Kubernetes 1.28 高可用集群安装指南(Docker 运行时)

文章目录

  • [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 离线/国内加速小贴士

  1. 镜像仓库统一指向 registry.aliyuncs.com/google_containers
  2. Docker、Calico、cri-dockerd 均提供国内镜像站,可替换 download.docker.comgithub.com 等地址
相关推荐
木子欢儿3 分钟前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
coppher1 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
虚伪的空想家3 小时前
k8s集群configmap和secrets备份脚本
linux·容器·kubernetes
SXJR3 小时前
k8s中的Pod
云原生·容器·kubernetes
文静小土豆3 小时前
K8s 滚动更新在 Java 应用中的实践与优化
java·容器·kubernetes
w6100104663 小时前
CKA-2026-Ingress
云原生·容器·kubernetes·cka
bloglin999994 小时前
docker logs 如何一直监听日志输出
运维·docker·容器
说实话起个名字真难啊4 小时前
Docker 入门之网络基础
网络·docker·php
❀͜͡傀儡师5 小时前
使用 Docker 部署 Neko 自托管虚拟浏览器(Firefox)
docker·容器·firefox
0xDevNull6 小时前
Linux Docker 安装与使用详细教程
linux·运维·docker