在 CentOS 上部署 Kubernetes(k8s)实现自动化,通常可以从「单机脚本化」到「生产级自动化工具」几个层次来做。下面按实用程度给你一个完整思路。
# init-k8s.sh
#!/bin/bash
set -e
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 内核参数
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
EOF
sysctl --system
# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io
systemctl enable --now containerd
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 在 master 上生成 join 命令
kubeadm token create --print-join-command
Node 执行:
kubeadm join <master-ip>:6443 --token xxx --discovery-token-ca-cert-hash xxx
✅ 适合:学习、PoC、临时环境
ansible-control
├── master
├── node1
├── node2
k8s-ansible/
├── inventory.ini
├── roles/
│ ├── init/
│ ├── containerd/
│ ├── kubeadm/
├── site.yml
[master]
192.168.1.10
[node]
192.168.1.11
192.168.1.12
- hosts: all
roles:
- init
- containerd
- hosts: master
roles:
- master-init
- hosts: node
roles:
- node-join
✅ 优点
✅ 基于 Ansible
✅ 支持 HA、多网卡、离线
✅ CentOS 完美支持
git clone https://github.com/kubernetes-sigs/kubespray
cd kubespray
pip install -r requirements.txt
cp -rf inventory/sample inventory/mycluster
ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml
./rke up
适合:
./kk create cluster
✅ 中文友好
✅ 一键部署 K8s + KubeSphere
可结合:
示例流程:
Terraform → CentOS VM
Ansible → K8s 集群
ArgoCD → 应用自动化
❌ firewalld 没关
❌ swap 没关
❌ cgroup driver 不一致
❌ 内核版本太低(建议 ≥ 4.18)
❌ 时间不同步(必须 NTP)
| 场景 | 推荐方案 |
|---|---|
| 学习 | Shell + kubeadm |
| 多节点 | Ansible |
| 生产 | Kubespray |
| 国产生态 | KubeSphere / RKE2 |
如果你愿意,我可以:
你现在是 测试环境还是生产环境?单节点还是多节点?