Kubernetes 1.25 集群部署指南
2025-03-25
7 min read
本指南将指导您如何从头开始设置一个使用 Docker 作为容器运行时的 Kubernetes 1.25 集群。我们将涵盖从系统准备到集群初始化的所有步骤,并提供一些常见问题的解决方法。
架构概述
节点类型 | 主机名 | IP 地址 | 角色描述 |
---|---|---|---|
Master 节点 | k8s-master | 172.31.7.100 | 集群管理节点,负责集群的初始化、调度等工作 |
Worker 节点 1 | k8s-node1 | 172.31.7.101 | 执行容器工作负载 |
Worker 节点 2 | k8s-node2 | 172.31.7.102 | 执行容器工作负载 |
Worker 节点 3 | k8s-node3 | 172.31.7.103 | 执行容器工作负载 |
安装与配置概览
序号 | 步骤 | 主要操作 | 目标 |
---|---|---|---|
1 | 前置配置 | 关闭 swap、设置主机名解析、加载内核模块等 | 准备系统环境,确保 Kubernetes 能够正常运行 |
2 | 安装 Docker | 添加 Docker APT 源并安装指定版本的 Docker | 提供容器运行时支持 |
3 | 安装 cri-dockerd | 下载并安装 cri-dockerd ,使其兼容 Kubernetes CRI 接口 |
允许 Docker 作为 Kubernetes 的容器运行时 |
4 | 安装 Kubernetes 组件 | 安装 kubeadm , kubelet , 和 kubectl |
初始化和管理 Kubernetes 集群 |
5 | 初始化 Master 节点 | 使用 kubeadm init 命令初始化集群 |
创建集群,并生成加入命令供其他节点使用 |
6 | Worker 节点加入集群 | 在每个 Worker 节点上执行生成的 join 命令 | 将 Worker 节点加入到集群中 |
7 | 安装网络插件 | 使用 Calico 网络插件 | 提供 Pod 网络支持 |
8 | 验证集群状态 | 使用 kubectl get nodes 和 kubectl get pods -n kube-system 查看状态 |
确认所有节点和系统组件正常运行 |
一、所有节点前置配置(所有节点执行)
# 关闭 swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 设置主机名解析(所有节点)
# 在 100 节点执行:
sudo hostnamectl set-hostname k8s-master
# 在 101-103 节点分别执行:
sudo hostnamectl set-hostname k8s-node1
sudo hostnamectl set-hostname k8s-node2
sudo hostnamectl set-hostname k8s-node3
# 所有节点添加 hosts 解析(可选)
cat <<EOF | sudo tee -a /etc/hosts
172.31.7.100 k8s-master
172.31.7.101 k8s-node1
172.31.7.102 k8s-node2
172.31.7.103 k8s-node3
EOF
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# 禁用防火墙(如果使用)
sudo ufw disable
二、安装 Docker(所有节点)
# 安装 Docker
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce=5:20.10.23~3-0~ubuntu-focal docker-ce-cli=5:20.10.23~3-0~ubuntu-focal containerd.io
# 配置 Docker 使用 systemd
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
sudo systemctl enable docker
三、安装 cri-dockerd(所有节点)
# 下载预编译二进制包
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.deb
sudo dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.deb
# 修改服务配置(适配 Kubernetes 1.25)
sudo sed -i 's|--network-plugin=cni --cni-bin-dir=/opt/cni/bin|--network-plugin=cni --cni-conf-dir=/etc/cni/net.d|g' /lib/systemd/system/cri-docker.service
sudo systemctl daemon-reload
sudo systemctl enable cri-docker && sudo systemctl start cri-docker
四、安装 kubeadm/kubelet/kubectl(所有节点)
# 添加阿里云镜像源
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 安装指定版本
sudo apt-get update
sudo apt-get install -y kubelet=1.25.7-00 kubeadm=1.25.7-00 kubectl=1.25.7-00
sudo apt-mark hold kubelet kubeadm kubectl
五、初始化 Master 节点(仅在 master 执行)
# 生成初始化命令(替换实际IP)
sudo kubeadm init \
--apiserver-advertise-address=172.31.7.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.7 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=192.168.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock
# 完成后按提示操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 保存 join 命令(稍后用于节点加入)
kubeadm token create --print-join-command > join-command.txt
六、Worker 节点加入集群(在 101-103 执行)
# 使用上一步生成的 join 命令(需添加 --cri-socket)
sudo $(cat join-command.txt) --cri-socket unix:///var/run/cri-dockerd.sock
七、安装网络插件(在 master 执行)
# 安装 Calico(匹配 --pod-network-cidr=192.168.0.0/16)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
八、验证集群状态
kubectl get nodes -o wide
# 等待所有节点状态变为 Ready
kubectl get pods -n kube-system
常见问题处理
-
镜像拉取失败:
# 手动拉取镜像(例如) docker pull registry.aliyuncs.com/google_containers/pause:3.8
-
cri-dockerd 未启动:
journalctl -u cri-docker -l
-
节点 NotReady:
journalctl -u kubelet -f
完成以上步骤后,您将获得一个使用 Docker 作为容器运行时的 Kubernetes 1.25 集群。所有节点均可通过 kubectl
命令在 Master 节点管理。