是否考虑过使用k3s替代Kubernetes?它更轻量且部署简单,适合边缘计算场景。
如何使用kubeadm在CentOS系统上安装Kubernetes(k8s)集群?
在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维护集群状态。
更多回答
-
环境准备:
- 确认所有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
推荐
热门问答
部分内容依据人工智能生成,仅供参考,可能有误请注意甄别