CentOS 环境 Kubernetes 安装技巧
一 环境准备与内核参数
- 资源与拓扑:至少准备3 台服务器(1 个 Master + 2 个 Node),每台建议≥2 CPU、≥2GB 内存、≥30GB 磁盘,并确保节点间互通与外网访问(拉取镜像)。
- 主机名与解析:为每个节点设置唯一主机名(如 hostnamectl set-hostname k8s-master),并在 /etc/hosts 维护 IP-主机名 映射,便于内网解析。
- 时间同步:安装并启用 chrony/ntp,保证集群时间一致,避免证书与调度异常。
- 关闭 Swap:执行 swapoff -a,并在 /etc/fstab 注释 swap 行,Kubelet 要求无 Swap。
- SELinux:临时 setenforce 0;永久将 /etc/selinux/config 中 SELINUX 设为 disabled(需重启生效)。
- 防火墙策略:测试环境可临时 systemctl stop/disable firewalld;生产环境建议保留防火墙并按需放行端口(如 6443、10250、2379-2380 等)。
- 内核网络:创建 /etc/sysctl.d/k8s.conf,启用桥接流量转发:
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
执行 sysctl --system 使配置生效。
二 容器运行时与组件安装
- 容器运行时:安装 Docker CE(或 containerd),建议配置国内镜像源加速;启动并设置开机自启:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
- Kubernetes 组件源:配置 kubernetes.repo(可选国内镜像源以提速),安装指定版本:
cat >/etc/yum.repos.d/kubernetes.repo<<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
- 版本策略:生产环境建议固定版本(如 v1.28.x),避免频繁升级带来不兼容。
三 初始化 Master 与网络插件
- 初始化命令:在 Master 节点执行(按需替换参数)
kubeadm init \
–apiserver-advertise-address=<MASTER_IP> \
–pod-network-cidr=10.244.0.0/16 \
–service-cidr=10.96.0.0/12 \
–image-repository=registry.aliyuncs.com/google_containers \
–kubernetes-version=
常见网络插件与 CIDR 搭配:
- Flannel:默认 10.244.0.0/16
- Calico:常用 192.168.0.0/16(部署前确认与现有网络不冲突)
- 配置 kubectl:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 CNI:
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 节点就绪:kubectl get nodes 应显示 Ready。
四 Node 加入与常见问题排查
- 获取加入命令:在 Master 上执行
kubeadm token create --print-join-command
在 Node 上执行输出的 kubeadm join 命令加入集群。
- 常见故障速查:
- coredns Pending:未安装或未就绪 CNI 插件,先部署 Flannel/Calico。
- kubelet 启动失败:检查 /var/log/messages、Swap 是否关闭、cgroup 驱动一致性(Docker 使用 systemd)。
- 镜像拉取失败:确认 image-repository 是否可用,或手动 docker pull 所需镜像。
- 节点 NotReady:检查 网络插件 Pod 是否 Running、节点污点/容忍、内核参数与防火墙策略。
五 生产可用性与安全加固要点
- 高可用:多 Master + Keepalived + HAProxy 或 kube-vip 提供 VIP;etcd 与 APIServer 多实例部署。
- 网络策略:启用 NetworkPolicy 限制 Pod 间通信,遵循最小权限原则。
- 镜像与仓库:使用国内镜像源或私有仓库,固定镜像版本,减少不确定性。
- 权限与合规:启用 RBAC,按团队/项目划分 Namespace 与权限;定期更新系统与组件补丁。
- 可观测性:部署 Prometheus + Grafana + Alertmanager 做监控告警,使用 EFK/ELK 或 Fluentd 做日志收集。
- 备份恢复:定期备份 etcd 与关键 YAML 清单,并演练恢复流程。