CentOS 7 上部署 Kubernetes v1.28 实操指南
一 环境规划与前置要求
二 所有节点通用配置
hostnamectl set-hostname k8s-master # 在 master 执行
hostnamectl set-hostname k8s-worker1 # 在 worker1 执行
hostnamectl set-hostname k8s-worker2 # 在 worker2 执行
cat >> /etc/hosts << EOF
192.168.9.86 k8s-master
192.168.9.87 k8s-worker1
192.168.9.88 k8s-worker2
EOF
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
yum update -y
yum install -y wget curl net-tools conntrack-tools telnet bind-utils yum-utils
yum install ntpdate -y
ntpdate ntp1.aliyun.com
echo "0 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >> /etc/crontab
reboot
以上步骤为后续组件安装提供干净、可预期的系统环境。
三 安装容器运行时与 Kubernetes 组件
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
systemctl enable --now docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.xuanyuan.me"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "200m" }
}
EOF
systemctl restart docker
# 以 v0.3.12 为例(CentOS 7 x86_64)
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm
# 指定国内 pause 镜像(提升拉取成功率)
sed -i 's|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://|ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9|' \
/usr/lib/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable --now kubelet
以上完成运行时与组件安装,为集群初始化做好准备。
四 初始化控制平面与加入工作节点
kubeadm init \
--apiserver-advertise-address=192.168.9.86 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm token create --print-join-command
kubeadm join 192.168.9.86:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--cri-socket=unix:///var/run/cri-dockerd.sock
kubectl get nodes
kubectl get pods -n kube-system
以上完成控制平面搭建与节点扩容,集群处于可用状态。
五 部署网络插件与验证
curl -O https://docs.projectcalico.org/manifests/calico.yaml
# 如需国内加速可先下载到本地再 apply
kubectl apply -f calico.yaml
kubectl get nodes
kubectl get pods -n kube-system -w
kubectl create deployment nginx --image=nginx:1.25 --replicas=2
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
curl http://<任一节点IP>:<NodePort>
网络插件就绪后,Pod 间可互通,Service 可对外暴露。
六 常见问题与加固建议
kubeadm token create --print-join-command 重新生成。image-repository 为 registry.aliyuncs.com/google_containers,或提前导入镜像;检查 cri-dockerd 的 pause 镜像地址。calico-node 日志定位。