文章目录
- [Kubernetes 1.28 高可用集群安装指南(Docker 运行时)](#Kubernetes 1.28 高可用集群安装指南(Docker 运行时))
-
- [1 节点规划](#1 节点规划)
- [2 基础环境(所有节点)](#2 基础环境(所有节点))
-
- [2.1 设置主机名 & 解析](#2.1 设置主机名 & 解析)
- [2.2 安装依赖](#2.2 安装依赖)
- [2.3 关闭防火墙 & SELinux & swap](#2.3 关闭防火墙 & SELinux & swap)
- [2.4 内核参数 & 资源限制](#2.4 内核参数 & 资源限制)
- [2.5 加载 IPVS 模块](#2.5 加载 IPVS 模块)
- [2.6 时间同步](#2.6 时间同步)
- [3 安装 Docker CE(所有节点)](#3 安装 Docker CE(所有节点))
- [4 安装 cri-dockerd(所有节点)](#4 安装 cri-dockerd(所有节点))
- [5 安装 kubeadm/kubelet/kubectl(所有节点)](#5 安装 kubeadm/kubelet/kubectl(所有节点))
- [6 初始化控制平面(仅 master)](#6 初始化控制平面(仅 master))
-
- [6.1 预先拉取镜像](#6.1 预先拉取镜像)
- [6.2 生成初始化配置](#6.2 生成初始化配置)
- [6.3 执行初始化](#6.3 执行初始化)
- [6.4 配置 kubectl](#6.4 配置 kubectl)
- [7 加入工作节点(所有 worker)](#7 加入工作节点(所有 worker))
- [8 部署 CNI(Calico)](#8 部署 CNI(Calico))
- [9 验证集群](#9 验证集群)
- [10 常用优化](#10 常用优化)
- [11 离线/国内加速小贴士](#11 离线/国内加速小贴士)
Kubernetes 1.28 高可用集群安装指南(Docker 运行时)
> 基于 kubeadm 1.28 + Docker CE + Calico CNI
> 适用于 CentOS 7/8、Rocky、RHEL 等 systemd 系列发行版
> 3 节点最小化拓扑:1 master + 2 worker,可按需水平扩展
1 节点规划
| 角色 | 主机名 | IP | CPU | 内存 | 磁盘 | 备注 |
|---|---|---|---|---|---|---|
| master | master | 192.168.100.128 | 2C | 4G | 200G | 控制平面 |
| node1 | node1 | 192.168.100.129 | 4C | 6G | 400G | 工作节点 |
| node2 | node2 | 192.168.100.136 | 4C | 6G | 400G | 工作节点 |
> 所有节点均需 root 权限,建议关闭 SELinux、防火墙、swap。
2 基础环境(所有节点)
2.1 设置主机名 & 解析
bash
hostnamectl set-hostname master # 各节点分别执行
cat >> /etc/hosts <<EOF
192.168.100.128 master
192.168.100.129 node1
192.168.100.136 node2
EOF
2.2 安装依赖
bash
yum -y install vim lrzsz unzip wget net-tools tree bash-completion \
conntrack ntpdate chrony ipvsadm ipset iptables curl sysstat libseccomp \
git psmisc telnet gcc gcc-c++ make
2.3 关闭防火墙 & SELinux & swap
bash
systemctl disable --now firewalld NetworkManager
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
2.4 内核参数 & 资源限制
bash
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
EOF
sysctl --system
# 文件句柄 & 进程数
echo "* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited" >> /etc/security/limits.conf
2.5 加载 IPVS 模块
bash
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack overlay br_netfilter
EOF
systemctl restart systemd-modules-load
lsmod | grep -e ip_vs -e nf_conntrack
2.6 时间同步
bash
yum -y install chrony
systemctl enable --now chronyd
chronyc sources -v
3 安装 Docker CE(所有节点)
bash
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
# 镜像加速 + cgroup 驱动改为 systemd
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl enable --now docker
4 安装 cri-dockerd(所有节点)
Kubernetes 1.24+ 已移除 dockershim,需额外 CRI 适配器。
bash
# 以 0.3.4 为例,请按需替换版本
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm
# 指定 pause 镜像
sed -i 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://' \
/usr/lib/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker.service
ls /run/cri-dockerd.sock
5 安装 kubeadm/kubelet/kubectl(所有节点)
bash
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
# 指定 cgroup 驱动 & ipvs 模式
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
systemctl enable kubelet
6 初始化控制平面(仅 master)
6.1 预先拉取镜像
bash
kubeadm config images pull \
--cri-socket unix:///var/run/cri-dockerd.sock \
--kubernetes-version v1.28.0 \
--image-repository registry.aliyuncs.com/google_containers
6.2 生成初始化配置
bash
kubeadm config print init-defaults > kubeadm-init.yaml
按需修改以下关键字段(已给出完整示例):
yaml
# kubeadm-init.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.100.128
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock
name: master
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.28.0
imageRepository: registry.aliyuncs.com/google_containers
networking:
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 # 与 Calico 保持一致
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
6.3 执行初始化
bash
kubeadm init --config kubeadm-init.yaml --upload-certs | tee init.log
记录最后输出的 kubeadm join ... 命令,后续 worker 节点使用。
6.4 配置 kubectl
bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
7 加入工作节点(所有 worker)
在各 node 执行 master 输出的 join 命令,务必追加 cri-dockerd 套接字:
bash
kubeadm join 192.168.100.128:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:48b03ed5f255e142387fa4b58f4e6ef422aea8ec101b2221ea302d50e3921d25 \
--cri-socket unix:///var/run/cri-dockerd.sock
8 部署 CNI(Calico)
bash
# 下载与 k8s 1.28 匹配的 Calico 3.25+
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
# 修改 Pod CIDR(已默认 10.244.0.0/16 可跳过)
# sed -i 's/# - name: CALICO_IPV4POOL_CIDR/- name: CALICO_IPV4POOL_CIDR/' calico.yaml
# sed -i 's|# value: "192.168.0.0/16"| value: "10.244.0.0/16"|' calico.yaml
kubectl apply -f calico.yaml
等待所有 Pod Running:
bash
kubectl get pods -A
kubectl get nodes
9 验证集群
bash
# 1. 核心组件状态
kubectl get cs
# 2. DNS 解析
dig @10.96.0.10 kubernetes.default.svc.cluster.local
# 3. 创建示例 Nginx
kubectl create deployment nginx --image=nginx --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
浏览器访问 http://<任一节点IP>:<NodePort> 即可看到 Nginx 欢迎页。
10 常用优化
| 功能 | 命令 |
|---|---|
| kubectl 自动补全 | yum install bash-completion && source <(kubectl completion bash) |
| 内核升级(推荐) | yum update -y kernel && reboot |
| 清理失败集群 | kubeadm reset -f && rm -rf /etc/kubernetes/* |
| Master 运行 Pod | kubectl taint nodes master node-role.kubernetes.io/control-plane- |
11 离线/国内加速小贴士
- 镜像仓库统一指向
registry.aliyuncs.com/google_containers - Docker、Calico、cri-dockerd 均提供国内镜像站,可替换
download.docker.com、github.com等地址