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 小时前
解决k8s UI界面进不去
云原生·容器·kubernetes
last demo3 小时前
docker基础
运维·docker·容器·eureka
孤岛悬城3 小时前
59 k8s集群调度
云原生·kubernetes
独自归家的兔4 小时前
K8s 核心概念深度解析:Pod 是什么?
云原生·容器·kubernetes
咕叽咕叽的汪4 小时前
Es/Kibana7.17.9中数据迁移到openSearch3.4.0【DockerDesktop模拟】
运维·spring boot·elasticsearch·docker·容器·devops
xzl044 小时前
Docker Overlay2 迁移至 CentOS Home 完整指南
docker·eureka·centos
Mr. Cao code4 小时前
Docker文件数据卷实战:挂载与优化
运维·docker·容器
大佐不会说日语~4 小时前
Docker部署旧版本系统MySQL5.7+乱码问题解决方案
运维·docker·容器
陈陈CHENCHEN4 小时前
【Kubernetes】现有 K8s 集群上部署 Kuboard v4
kubernetes