1.检查是否具备安装环境
1.检查机器是否是Cgroup V2
stat -fc %T /sys/fs/cgroup/
[root@master ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs
出现这个说明是V2
For cgroup v2, the output is cgroup2fs
.
For cgroup v1, the output is tmpfs.
2.查看机器是否内核为 5.8以上
uname -a
3.配置主机域名
vim /etc/hosts
192.168.181.100 cluster-endpoint
192.168.181.101 node-point1
192.168.181.102 node-point2
esc
:wq
保存配置
ping master
4.配置代理
vim /etc/profile
export http_proxy=http://192.168.33.229:7890
export https_proxy=http://192.168.33.229:7890
esc
:wq
source /etc/profile
5.更新软件包
yum -y update
6.时间同步
kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。
企业中建议配置内部的时间同步服务器
systemctl start chronyd
systemctl enable chronyd
date
7. 禁用iptables和firewalld服务
关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
关闭iptables服务
systemctl stop iptables
systemctl disable iptables
没有这个服务就不用管他了
8.验证MAC地址和product_uuid对于每个节点都是唯一的
- 您可以使用命令
ip link
或ifconfig -a
获取网络接口的MAC地址 - 可以使用命令检查product_uuid
sudo cat /sys/class/dmi/id/product_uuid
尽管某些虚拟机可能具有相同的值,但硬件设备很可能会具有唯一的地址。 Kubernetes使用这些值来唯一识别群集中的节点。如果这些值不是每个节点唯一的,则安装过程可能会失败。
sudo cat /sys/class/dmi/id/product_uuid
9.检查所需的端口
这些需要的端口 需要开放才能使Kubernetes组件相互通信。 您可以使用NetCat之类的工具检查端口是否打开。例如:
nc 127.0.0.1 6443 -v
您使用的POD网络插件也可能需要打开某些端口。由于每个POD网络插件都不同,因此请参阅有关这些端口所需的插件的文档
10.禁用 selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
查看是否开启
getenforce
这样就是开启的
临时关闭
setenforce 0
永久关闭
vim /etc/selinux/config
将SELINUX=enforcing
改成 SELINUX=disabled
:wq 保存退出
要重新启动linux 生效 先不重启 一起重启
11.禁用 swap 分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
官网说明
vim /etc/fstab
把最后一行注掉
wq 保存退出
想让他生效必须重新启动操作系统 ,但是我们最后再重启
12.修改 kubernetes 网络配置
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
复制进去
重新加载配置
sudo sysctl --system
验证net.ipv4.ip_forward
设置为1的with:
sysctl net.ipv4.ip_forward
13.加载网桥过滤模块
modprobe br_netfilter
验证查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
这样就是成功的
14.配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
1 安装ipset和ipvsadm
yum install ipset ipvsadm -y
2 添加需要加载的模块写入脚本文件
mkdir /etc/sysconfig/modules -p
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
内核 4.19+版本 nf_conntrack_ipv4 已改为 nf_conntrack ,4.18以下使用 nf_conntrack_ipv4即可
wq 保存退出
3 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
4 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
5 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
15.安装容器运行时
kubernetes v1.32 已经废弃docker 作为容器运行时 我们用系统自带的
如果没有就安装 有就不用下面这几步了
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y containerd.io
sudo systemctl enable --now containerd
vim /etc/containerd/config.toml
找个空白位置放入
还有把 disable=['cri'] 注释掉 #disable=['cri']
sudo systemctl restart containerd
重启一下服务器:
reboot
16.检查 selinx 是不是 关闭状态 和 swap 分区 是不是关闭状态
swap 都是 0 代表都关闭了的
上面两个命令
getenforce
free -m
2.安装kubernetes 集群必要组件
1.添加 kubernetes 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
2.安装 kubelet kubeadm kubectl
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
3.启动并开机自启kubelet
sudo systemctl enable --now kubelet
4.集群初始化 上面的操作都是三台机器都执行 接下来操作只在master节点执行
1.初始化主节点
还是需要自己导入镜像啊
ctr -n k8s.io images pull registry.k8s.io/kube-apiserver:v1.32.2
ctr -n k8s.io images pull registry.k8s.io/kube-controller-manager:v1.32.2
ctr -n k8s.io images pull registry.k8s.io/kube-scheduler:v1.32.2
ctr -n k8s.io images pull registry.k8s.io/kube-proxy:v1.32.2
ctr -n k8s.io images pull registry.k8s.io/coredns/coredns:v1.11.3
ctr -n k8s.io images pull registry.k8s.io/pause:3.10
ctr -n k8s.io images pull registry.k8s.io/pause:3.8
ctr -n k8s.io images pull registry.k8s.io/etcd:3.5.16-0
kubeadm init \
--apiserver-advertise-address=192.168.181.100 \
--control-plane-endpoint=cluster-endpoint \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--image-repository registry.aliyuncs.com/google_containers
如果执行失败,重启虚拟机,就好了
终于啊 历经千辛万苦搭建完毕 主节点
太舒服了
比较重要在初始化主节点后的要干的事情
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
--discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
--discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1
2.创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
警告:
Kubeconfig文件admin.conf
kubeadm init
生成的 Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin
。小组kubeadm:cluster-admins
与内置cluster-admin
簇簇绑定。不要与任何人共享admin.conf
文件。
kubeadm init
生成另一个kubeconfig文件super-admin.conf
,其中包含一个证书 Subject: O = system:masters, CN = kubernetes-super-admin
. system:masters
是一个绕开授权层(例如RBAC)的超级用户组。不要与任何人共享super-admin.conf
文件。建议将文件移至安全位置。
看 为其他用户生成kubeconfig文件 关于如何使用kubeadm kubeconfig user
为其他用户生成kubeconfig文件。
用的云服务器踩了个大坑,master一直init不起来,云服务器的公网ip默认没有绑定到网卡上,绑一个就init成功了,但是后面不知道还有没有问题,还是建议三台在一个子网里
3.将从节点加入主节点 这句话 在从节点上面执行
kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
--discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1
3.安装POD网络附加组件
警告:
本节包含有关网络设置和部署订单的重要信息。在继续之前,请仔细阅读所有这些建议。
您必须部署 容器网络接口 (CNI)基于 Pod 网络插件,以便您的 Pod 可以相互通信。 在安装网络之前,集群 DNS(CoreDNS)将不会启动。
-
注意您的POD网络不得与任何主机网络重叠:如果存在重叠,您可能会看到问题。 (如果您发现网络插件首选的POD网络与某些主机网络之间的碰撞,则应考虑使用合适的CIDR块,然后在
kubeadm init
期间使用它--pod-network-cidr
,作为网络插件YAML的替换)。 -
默认情况下,
kubeadm
设置了您的群集以使用和强制使用 RBAC (基于角色的访问控制)。确保您的POD网络插件支持RBAC,并且您用来部署它的任何清单也是如此。 -
如果要使用IPv6-二堆或仅单堆IPv6网络 - 在群集中,请确保您的POD网络插件支持IPv6。 IPv6支持已在V0.6.0中添加到CNI中。
-
笔记:
Kubeadm应该是CNI不可知论,CNI提供商的验证不超出我们当前的E2E测试的范围。如果您发现与CNI插件相关的问题,则应在其各自的问题跟踪器中记录一张票,而不是Kubeadm或Kubernetes问题跟踪器。几个外部项目使用CNI提供Kubernetes POD网络,其中一些也支持网络策略。
查看实现的附加组件列表 Kubernetes网络模型。
请参考安装插件 有关Kubernetes支持的网络插件列表的无需阐明的页面。 您可以在 具有kubeconfig凭据的控制平面节点或节点:
kubectl apply -f <add-on.yaml>
笔记:
只有几个CNI插件支持窗口。在添加Windows Worker节点时,可以找到更多详细信息和设置说明。您可以每个群集仅安装一个POD网络。
安装了POD网络后,您可以通过检查Coredns Pod在输出中
Running
kubectl get pods --all-namespaces
。一旦Coredns Pod启动并运行,您可以通过加入节点来继续。如果您的网络不起作用或核心不在
Running
状态,请查看 故障排除指南 对于kubeadm
。
1.安装网络插件
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel
插件只需要在master节点上面执行就可以了
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
ctr -n k8s.io images pull ghcr.io/flannel-io/flannel:v0.26.4
ctr -n k8s.io images pull ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
ctr -n k8s.io images pull ghcr.io/flannel-io/flannel:v0.26.4
kubectl apply -f ./kube-flannel.yml
重置
sudo kubeadm reset -f
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
# 清理残留的 IPVS 规则(如果使用了 IPVS)
sudo ipvsadm -C
# 检查并删除 /etc/kubernetes 目录下的残留文件
sudo rm -rf /etc/kubernetes
# 查找占用端口 10250 的进程
sudo lsof -i :10250
# 根据输出的进程 ID(PID)停止进程
sudo kill -9 <PID>
# 清理网络配置
sudo ip link delete cni0
sudo ip link delete flannel.1 # 如果使用 Flannel 网络插件
sudo rm -rf /etc/cni /etc/kubernetes /var/lib/etcd /var/lib/kubelet
没有成功 还是有问题 但是 这个 值得参考