-
系统准备(所有节点执行):
- 禁用防火墙:
systemctl disable --now firewalld
- 关闭SELinux:
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 配置网桥过滤:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
sysctl --system
- 禁用防火墙:
-
安装容器运行时(所有节点执行):
yum install -y docker systemctl enable --now docker
-
安装kubeadm/kubelet/kubectl(所有节点执行):
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key EOF yum install -y kubeadm-1.28.0 kubelet-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes systemctl enable --now kubelet
-
初始化控制平面节点(仅master执行):
kubeadm init --pod-network-cidr=192.168.0.0/16 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
保存显示的join命令备用
-
安装网络插件(仅master执行):
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
-
加入工作节点(worker节点执行): 使用步骤4保存的kubeadm join命令,格式类似:
kubeadm join <control-plane-host>:<port> --token <token> --discovery-token-ca-cert-hash <hash>
如何使用kubeadm在CentOS系统上安装Kubernetes(k8s)集群?
回答
| 共 5 个
以下是使用kubeadm在CentOS系统上部署Kubernetes集群的核心步骤:
-
环境准备
- 系统要求:CentOS 7/8/9,2GB+内存,2vCPU+,禁用swap(sudo swapoff -a;注释/etc/fstab中swap行)
- 节点规划:1个Master节点(建议生产环境3节点HA),N个Worker节点
- 网络配置:确保节点间互通,/etc/hosts配置主机名解析,关闭防火墙(systemctl stop firewalld;systemctl disable firewalld)
- 加载内核模块(br_netfilter, overlay): modprobe br_netfilter overlay echo 'br_netfilter' > /etc/modules-load.d/k8s.conf
-
安装容器运行时(以containerd为例)
- 配置源: yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装containerd: yum install -y containerd.io systemctl enable --now containerd
- 配置cgroup驱动: containerd config default > /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd
-
安装kubeadm/kubelet/kubectl
- 配置Kubernetes源:
cat <
/etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key EOF - 安装工具: yum install -y kubelet-1.28.4 kubeadm-1.28.4 kubectl-1.28.4 --disableexcludes=kubernetes systemctl enable --now kubelet
- 配置Kubernetes源:
cat <
-
初始化Master节点
- 预拉取镜像: kubeadm config images pull
- 初始化控制平面:
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=
- 完成提示: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
部署CNI网络插件(Calico示例) kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
-
加入Worker节点
- 在Worker节点执行Master初始化后输出的join命令:
kubeadm join
:6443 --token \ --discovery-token-ca-cert-hash sha256:
- 在Worker节点执行Master初始化后输出的join命令:
kubeadm join
验证:
- kubectl get nodes -o wide
- kubectl get pods -A
排错要点:
- journalctl -xeu kubelet 查看kubelet日志
- kubeadm reset 重置错误配置
- 检查容器运行时与kubelet的cgroup驱动一致性
-
环境准备:
- 确认所有CentOS节点(建议7+/8+)已完成基础配置,包括主机名解析、时间同步、关闭防火墙及SELinux(
setenforce 0
永久生效需修改/etc/selinux/config
)。 - 确保所有节点已禁用swap(
swapoff -a
并注释/etc/fstab
中的swap条目)。
- 确认所有CentOS节点(建议7+/8+)已完成基础配置,包括主机名解析、时间同步、关闭防火墙及SELinux(
-
安装容器运行时:
- 推荐安装Docker(
yum install -y docker-ce
)或containerd,配置cgroup驱动为systemd(修改/etc/docker/daemon.json
添加"exec-opts": ["native.cgroupdriver=systemd"]
后重启服务)。
- 推荐安装Docker(
-
安装kubeadm/kubelet/kubectl:
- 配置Kubernetes的yum源,通过
yum install -y kubeadm-<version> kubelet-<version> kubectl-<version>
安装指定版本(需保持版本一致性),完成后执行systemctl enable --now kubelet
。
- 配置Kubernetes的yum源,通过
-
初始化Master节点:
- 执行
kubeadm init --apiserver-advertise-address=<master-ip> --pod-network-cidr=10.244.0.0/16
(若使用Flannel网络插件),记录输出的join命令。 - 根据提示配置kubectl:
mkdir -p $HOME/.kube
,cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
,并验证节点状态(kubectl get nodes
)。
- 执行
-
部署网络插件:
- 应用Flannel配置:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
,等待Pod就绪。
- 应用Flannel配置:
-
加入Worker节点:
- 在Worker节点执行kubeadm join命令(包含token及ca-cert-hash),使用
kubeadm token create --print-join-command
可生成新token(默认24小时过期)。
- 在Worker节点执行kubeadm join命令(包含token及ca-cert-hash),使用
-
验证集群:
- 在Master节点运行
kubectl get pods -A
确认所有核心组件(coredns/kube-proxy等)及网络插件处于Running状态。
- 在Master节点运行
注意事项:
- 生产环境需配置高可用(多Master节点+负载均衡器)
- 建议提前规划证书有效期、etcd存储路径等配置参数
- 若需GPU支持,需额外安装nvidia-docker2及k8s-device-plugin
是否考虑过使用k3s替代Kubernetes?它更轻量且部署简单,适合边缘计算场景。
在CentOS系统上使用kubeadm部署Kubernetes集群的实践经验总结如下:
一、环境准备
-
系统配置:
- 关闭防火墙:
systemctl disable --now firewalld
- 禁用SELinux:修改/etc/selinux/config为disabled
- 设置主机名解析:确保/etc/hosts包含所有节点IP与主机名映射
- 加载内核模块:br_netfilter, overlay
- 配置sysctl参数:net.bridge.bridge-nf-call-iptables=1
- 关闭防火墙:
-
容器运行时:
- 安装containerd 1.6+并配置systemd作为cgroup驱动
- 验证运行时状态:
ctr images pull docker.io/library/nginx:alpine
二、安装核心组件
-
配置yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF
-
安装指定版本:
yum install -y kubeadm-1.25.7 kubelet-1.25.7 kubectl-1.25.7 --disableexcludes=kubernetes
三、集群初始化
-
控制平面节点:
kubeadm init --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.100
-
网络插件:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
四、典型挑战与解决方案
-
镜像拉取失败:
- 预拉取镜像:
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
- 手动同步镜像到私有仓库
- 预拉取镜像:
-
kubelet持续重启:
- 检查/var/lib/kubelet/config.yaml与kubeadm配置一致性
- 验证cgroup驱动配置:containerd需设置systemd cgroup
-
节点NotReady状态:
- 排查CNI插件日志:
journalctl -u calico-node -f
- 验证网络策略:
iptables -L -n -t nat
- 排查CNI插件日志:
-
证书过期问题:
- 定期更新证书:
kubeadm certs renew all
- 配置外部etcd集群提升稳定性
- 定期更新证书:
五、验证要点
-
核心组件状态:
kubectl get pods -n kube-system kubectl get nodes -o wide
-
网络连通性测试:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 curl <ClusterIP>
实践表明,版本锁定(1.25 LTS)、国内镜像加速、前置环境校验是部署成功的关键要素。建议使用自动化工具预先完成系统参数配置,并通过GitOps维护集群状态。
推荐
热门问答
部分内容依据人工智能生成,仅供参考,可能有误请注意甄别