CentOS 7 搭建 Kubernetes 1.34.3 集群(4节点)

集群规划

主机IP 主机名 角色
172.31.1.241 k8s-master01 master
172.31.1.242 k8s-node01 worker
172.31.1.243 k8s-node02 worker
172.31.1.244 k8s-node03 worker

Kubernetes 版本:

1.34.3

容器运行时:

containerd

网络插件:

flannel

一、所有节点基础配置

以下操作需要在:

241
242
243
244

全部执行。


二、设置主机名

master

hostnamectl set-hostname k8s-master01

node1

hostnamectl set-hostname k8s-node01

node2

hostnamectl set-hostname k8s-node02

node3

hostnamectl set-hostname k8s-node03

三、配置 hosts

所有节点:

cat >> /etc/hosts << EOF
172.31.1.241 k8s-master01
172.31.1.242 k8s-node01
172.31.1.243 k8s-node02
172.31.1.244 k8s-node03
EOF

测试:

ping k8s-master01

四、关闭防火墙

所有节点:

systemctl stop firewalld
systemctl disable firewalld

五、关闭 SELinux

所有节点:

临时关闭:

setenforce 0

永久关闭:

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
sed -i 's/^SELINUX=permissive$/SELINUX=disabled/' /etc/selinux/config

六、关闭 swap

所有节点:

swapoff -a

永久关闭:

sed -ri 's/.*swap.*/#&/' /etc/fstab

验证:

free -m

Swap 应为:

0

七、配置内核参数

所有节点:

cat > /etc/modules-load.d/k8s.conf << EOF
overlay
br_netfilter
EOF

加载模块:

modprobe overlay
modprobe br_netfilter

配置 sysctl:

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

生效:

sysctl --system

八、同步时间

所有节点:

安装:

yum install -y chrony

启动:

systemctl enable chronyd
systemctl restart chronyd

验证:

chronyc sources

九、安装 containerd

所有节点:

安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

添加 Docker Repo

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装 containerd

yum install -y containerd.io

生成配置

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

修改 systemd cgroup

sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

配置 sandbox 镜像(国内推荐)

sed -i 's#registry.k8s.io/pause:3.8#registry.aliyuncs.com/google_containers/pause:3.10#g' /etc/containerd/config.toml

启动 containerd

systemctl daemon-reload
systemctl enable containerd
systemctl restart containerd

检查:

systemctl status containerd

十、安装 Kubernetes 组件

所有节点:


添加 Kubernetes Repo

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

安装 kubelet kubeadm kubectl

yum install -y kubelet-1.34.3 kubeadm-1.34.3 kubectl-1.34.3 --disableexcludes=kubernetes

启动 kubelet

systemctl enable kubelet
systemctl restart kubelet

十一、初始化 Master

仅在:

172.31.1.241

执行。


拉取镜像

kubeadm config images pull \
--kubernetes-version=v1.34.3 \
--image-repository registry.aliyuncs.com/google_containers

初始化集群

kubeadm init \
--apiserver-advertise-address=172.31.1.241 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.34.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

成功后会看到:

kubeadm join ...

保存下来。


十二、配置 kubectl

仅 master:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

验证:

kubectl get nodes

十三、安装 Flannel 网络插件

仅 master:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

十四、Node 加入集群

在:

242
243
244

执行 master 初始化后生成的 join 命令。

类似:

kubeadm join 172.31.1.241:6443 \
--token xxxxxx.xxxxxxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxx

十五、验证集群

master 执行:

kubectl get nodes

正常应该:

NAME            STATUS   ROLES           AGE   VERSION
k8s-master01    Ready    control-plane   xx    v1.34.3
k8s-node01      Ready    <none>          xx    v1.34.3
k8s-node02      Ready    <none>          xx    v1.34.3
k8s-node03      Ready    <none>          xx    v1.34.3

十六、验证 Pod

kubectl get pod -A

所有 Pod 应为:

Running

十七、常见问题

1. kubelet 无法启动

查看日志:

journalctl -u kubelet -f

2. swap 未关闭

报错:

running with swap on is not supported

解决:

swapoff -a

3. Node NotReady

通常是 flannel 未启动。

查看:

kubectl get pod -A

4. containerd CRI 报错

重启:

systemctl restart containerd
systemctl restart kubelet

5. 查看集群信息

kubectl cluster-info

十八、安装 Metrics Server(推荐)

master:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

修改:

kubectl edit deployment metrics-server -n kube-system

增加:

- --kubelet-insecure-tls

验证:

kubectl top nodes

十九、开放 Master 调度(可选)

如果希望 Pod 也能调度到 master:

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

二十、查看 Join Token

如果忘了 join 命令:

kubeadm token create --print-join-command

二十一、重置集群

节点执行:

kubeadm reset -f

删除残留:

rm -rf ~/.kube
rm -rf /etc/cni
rm -rf /var/lib/cni
rm -rf /var/lib/kubelet/*
rm -rf /etc/kubernetes

重启:

systemctl restart containerd
systemctl restart kubelet

二十二、验证测试 Pod

kubectl create deployment nginx --image=nginx

查看:

kubectl get pod -o wide

二十三、建议配置(生产环境)

建议:

  • 使用 keepalived + haproxy 做高可用 master
  • 使用 calico 替代 flannel
  • 使用 ingress-nginx
  • 使用 metrics-server
  • 使用 prometheus + grafana
  • 使用 local-path-provisioner 或 NFS CSI

二十四、版本查看

kubectl version
kubeadm version
kubelet --version

二十五、查看运行时

crictl info
ctr version
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐