3. 基础环境搭建:操作系统与内核参数调优、Docker与容器运行时安装、Kubernetes集群快速部署、网络插件(CNI)选型与配置
服务目录平台的稳定运行依赖于底层基础设施的健壮性。本章将系统性地完成从操作系统层到容器编排层的全栈环境搭建,涵盖内核参数调优、容器运行时安装、Kubernetes 集群部署以及网络插件选型与配置。每一步都经过生产环境验证,确保平台准入控制与性能调优具备坚实的底座。
3.1 操作系统与内核参数调优
推荐使用 Ubuntu 22.04 LTS 或 CentOS 7.9/8.4 作为宿主操作系统。内核版本需不低于 5.4,以支持最新的容器网络与安全特性。以下为关键内核参数调优清单,适用于所有集群节点。
| 参数名 | 推荐值 | 说明 |
|---|---|---|
net.bridge.bridge-nf-call-iptables |
1 | 确保桥接流量经过 iptables 过滤,Kubernetes 网络策略依赖此设置 |
net.ipv4.ip_forward |
1 | 启用 IP 转发,Pod 间通信与 Service 转发必需 |
net.core.somaxconn |
65535 | 增大 socket 监听队列长度,应对高并发连接 |
vm.max_map_count |
262144 | 提升内存映射区域上限,Elasticsearch 等组件依赖此值 |
kernel.pid_max |
4194304 | 防止 PID 耗尽导致容器启动失败 |
fs.file-max |
2097152 | 增大系统级文件句柄上限 |
调优执行命令: 将上述参数写入
/etc/sysctl.d/99-kubernetes.conf,执行 sysctl --system 立即生效。同时需加载 br_netfilter 与 overlay 内核模块。
# 加载必要内核模块
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/99-kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.core.somaxconn = 65535
vm.max_map_count = 262144
kernel.pid_max = 4194304
fs.file-max = 2097152
EOF
sudo sysctl --system
3.2 Docker 与容器运行时安装
Kubernetes 从 v1.24 开始移除了对 Docker 的直接支持,推荐使用 containerd 作为容器运行时。Docker 仍可作为开发调试工具安装,但集群运行时统一使用 containerd。
3.2.1 安装 containerd
# 安装 containerd
sudo apt-get update
sudo apt-get install -y containerd
# 生成默认配置并启用 SystemdCgroup
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启 containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
3.2.2 安装 Docker(可选)
# 安装 Docker CE
sudo apt-get install -y docker-ce docker-ce-cli
# 配置 Docker 使用 systemd cgroup 驱动
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
生产建议: 仅安装 containerd 即可满足 Kubernetes 运行需求。Docker 的安装会增加系统复杂度与安全面,非必要不安装。
3.3 Kubernetes 集群快速部署
使用 kubeadm 工具快速搭建高可用集群。以下步骤基于 1 个控制平面节点 + 2 个工作节点的最小拓扑。
3.3.1 安装 kubeadm、kubelet、kubectl
# 添加 Kubernetes 官方仓库
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
3.3.2 初始化控制平面节点
# 在控制平面节点执行
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.10 \
--cri-socket=unix:///run/containerd/containerd.sock
# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.3.3 加入工作节点
# 在工作节点执行( 从控制平面 init 输出获取)
sudo kubeadm join 192.168.1.10:6443 -- <> \
--discovery--ca-cert-hash sha256:<hash> \
--cri-socket=unix:///run/containerd/containerd.sock
注意: 如果使用 containerd 作为运行时,必须通过
--cri-socket 显式指定 socket 路径,否则 kubeadm 会默认尝试 Docker socket 导致初始化失败。
3.4 网络插件(CNI)选型与配置
CNI 插件负责为 Pod 分配 IP、实现跨节点通信以及网络策略。以下为三种主流 CNI 的对比与选型建议。
| CNI 插件 | 性能 | 网络策略 | 加密 | 适用场景 |
|---|---|---|---|---|
| Flannel | 中等 | 不支持 | 不支持 | 开发测试、小型集群 |
| Calico | 高 | 支持(丰富) | 支持(WireGuard/IPsec) | 生产环境、多租户、安全敏感 |
| Cilium | 极高 | 支持(基于 eBPF) | 支持(WireGuard) | 高性能、大规模、可观测性要求高 |
选型结论: 服务目录平台涉及多租户隔离与网络策略控制,推荐使用 Calico 作为默认 CNI。若对性能与可观测性有极致要求,可选用 Cilium。
3.4.1 安装 Calico
# 下载 Calico 清单
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml
# 修改 CALICO_IPV4POOL_CIDR 与 kubeadm init 的 --pod-network-cidr 一致
# 默认值为 192.168.0.0/16,若使用 10.244.0.0/16 需修改
# 应用 Calico
kubectl apply -f calico.yaml
# 验证所有 Pod 处于 Running 状态
kubectl get pods -n kube-system -l k8s-app=calico-node
3.4.2 验证集群网络
# 检查节点状态
kubectl get nodes
# 部署测试 Pod 验证跨节点通信
kubectl run test-pod1 --image=busybox -- sleep 3600
kubectl run test-pod2 --image=busybox -- sleep 3600
kubectl exec test-pod1 -- ping -c 3 <test-pod2-ip>
3.5 环境验证清单
完成上述步骤后,执行以下验证确保环境就绪:
- 节点状态:
kubectl get nodes所有节点均为Ready状态。 - 核心组件:
kubectl get pods -n kube-system所有 Pod 处于Running状态。 - DNS 解析: 部署一个 busybox Pod 执行
nslookup kubernetes.default.svc.cluster.local确认 CoreDNS 正常。 - 跨节点通信: 在不同节点上创建 Pod,使用 ping 测试连通性。
- 网络策略: 创建一条简单的 NetworkPolicy 验证隔离生效。
最佳实践: 将上述环境配置过程编写为 Ansible Playbook 或 Terraform 脚本,实现集群的声明式管理与快速重建。服务目录平台的准入控制与性能调优将在本章搭建的集群基础上逐步展开。