安装kubeadm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 根据阿里镜像源的教程https://developer.aliyun.com/mirror/kubernetes/

# 加载repo源
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key
EOF

# 关闭selinux(集群环境初始化已经操作过)
setenforce 0

# 安装kubelet、kubeadmin、kubectl,并以守护进程的方式启动kubelet
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

初始化主节点

以下操作只在master节点执行

创建初始化模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 执行该命令创建初始化模板
kubeadm config print init-defaults --component-configs KubeletConfiguration > kubeadm-config.yaml

## 修改初始化模板(主要修改以下几个地方)
# 1
localAPIEndpoint:
advertiseAddress: 192.168.66.11 # 修改为自己集群的 master01 的 IP
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock # 修改为 cri-docker 的套接字路径
imagePullPolicy: IfNotPresent
imagePullSerial: true
name: k8s-master01 # 修改为 master01 的主机名
taints: null

#2
imageRepository: registry.aliyuncs.com/google_containers # 修改为 aliyun 镜像仓库地址

#3
kubernetesVersion: 1.31.1 # 修改为当前集群的版本(根据实际安装的版本进行修改)

初始化主节点

1
2
3
4
# --config指定初始化配置模板
# --upload-certs 将证书保存到 kube-system 名称空间下名为 extension-apiserver-authentication 的 configmap 中,这样其他控制节点(master节点)加入的话只要加上 --control-plane --certificate-key 并带上相应的key就可以拿到证书并下载到本地(搭建高可用集群时候使用,如果单控制节点可以不加这个参数)
# --v=9输出日志级别为9级别
kubeadm init --config kubeadm-config.yaml --upload-certs --v=9
1
2
3
4
# 根据初始化结束后的提示进行操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

初始化工作节点

以下操作只在node节点执行

1
2
3
4
5
6
7
8
9
10
11
# 根据主节点初始化结束后的提示进行操作(记得在命令后面加上--cri-socket unix:///var/run/cri-dockerd.sock,否则会因为不知道用containerd还是cri-docker而报错)
# 各工作节点运行该命令即可
kubeadm join 192.168.66.11:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:821a2aff9fe91eafee2d80b1a86d50068dd4c40aa09c04c541a680440bcda3de --cri-socket unix:///var/run/cri-dockerd.sock

# 验证,主节点执行kubectl get node后,发现node节点加入进来了即成功,状态是NotReady是正常的,因为我们网络插件还没有安装呢
[root@k8s-master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 NotReady control-plane 12m v1.31.1
k8s-node01 NotReady <none> 13s v1.31.1
k8s-node02 NotReady <none> 7s v1.31.1

修改kube-proxy模式为IPVS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改kube-proxy模式,找到mode,改为mode: "ipvs"
kubectl edit cm kube-proxy -n kube-system

# 重启kube-proxy
kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

# 查看kube-proxy的pod名称
[root@k8s-master01 ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-8tmw4 1/1 Running 0 3m51s
kube-proxy-dh5rh 1/1 Running 0 3m52s
kube-proxy-dnp26 1/1 Running 0 3m53s

# 随便选一个kube-proxy的pod查看运行模式
[root@k8s-master01 ~]# kubectl -n kube-system logs kube-proxy-8tmw4 |grep -i proxier | grep -i using
I0919 11:55:30.890649 1 server_linux.go:230] "Using ipvs Proxier"