1. Kubernetes 集群部署全流程解析
作为容器编排领域的事实标准,Kubernetes 已成为云原生应用的基石。但在实际部署过程中,从环境准备到网络验证的每个环节都暗藏玄机。本文将基于生产环境最佳实践,详细拆解单节点集群的部署全流程,重点解决初学者最常遇到的证书配置、网络插件选型和连通性测试三大痛点。
提示:本文操作基于 containerd 运行时和 Calico 网络插件,所有命令均在 Ubuntu 22.04 LTS 上验证通过,其他 Linux 发行版需适当调整包管理命令。
1.1 基础环境准备
完整的 Kubernetes 部署需要以下先决条件:
- 至少 2GB 内存的 x86_64 主机(ARM 架构需额外处理镜像兼容性)
- 禁用交换分区(
sudo swapoff -a并注释 /etc/fstab 中的 swap 行) - 唯一的主机名、MAC 地址和 product_uuid(虚拟机克隆时需特别注意)
- 开放 6443(API Server)、10250(kubelet)等关键端口
配置系统内核参数:
bash复制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-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
1.2 容器运行时安装与调优
containerd 作为 Kubernetes 推荐的运行时,需要特别配置:
bash复制cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo apt-get update && sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
关键配置项调整:
toml复制[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
disable_snapshot_annotations = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 集群初始化核心步骤详解
2.1 kubeadm 定制化初始化
使用预生成证书避免后续过期问题:
bash复制sudo kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--upload-certs \
--control-plane-endpoint=$(hostname -I | awk '{print $1}') \
--apiserver-cert-extra-sans=内部DNS名称 \
--cert-dir=/etc/kubernetes/pki \
--skip-certificate-key-print
关键参数说明:
--pod-network-cidr必须与后续安装的 CNI 插件网段匹配--upload-certs自动轮换证书密钥--apiserver-cert-extra-sans为内部 DNS 添加 SAN 扩展
2.2 配置文件权限管理
生成 kubeconfig 后需严格限制访问权限:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
chmod 600 $HOME/.kube/config
2.3 节点污点控制策略
单节点集群需要取消 master 的调度限制:
bash复制kubectl taint nodes --all node-role.kubernetes.io/control-plane-
注意:生产环境请保留污点并通过
kubectl taint精确控制调度
3. 网络插件选型与部署实战
3.1 Calico 网络方案深度配置
安装 Tigera Calico 运营商版本:
bash复制kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
自定义 IP 池配置示例:
yaml复制apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: custom-ippool
spec:
cidr: 192.168.0.0/16
blockSize: 26
natOutgoing: true
nodeSelector: all()
3.2 网络策略验证方法
创建测试命名空间和 Pod:
bash复制kubectl create ns network-test
kubectl run -n network-test test-nginx --image=nginx --restart=Never
kubectl run -n network-test test-client --image=busybox --restart=Never -- sleep 3600
执行连通性测试:
bash复制kubectl exec -n network-test test-client -- wget -qO- test-nginx.network-test
4. 集群功能完整验证方案
4.1 核心组件健康检查
使用 kubectl 诊断命令:
bash复制kubectl get componentstatus
kubectl get --raw='/readyz?verbose'
kubectl cluster-info dump
4.2 端到端测试框架
部署测试 Job 验证完整功能:
yaml复制apiVersion: batch/v1
kind: Job
metadata:
name: cluster-verification
spec:
template:
spec:
containers:
- name: conformance
image: registry.k8s.io/conformance:v1.28.0
command: ["/run-e2e.sh"]
restartPolicy: Never
backoffLimit: 4
4.3 常见故障排查指南
网络问题诊断三板斧:
- 检查 Calico 节点状态
bash复制
kubectl get tigerastatus - 查看 Pod 网络配置
bash复制
kubectl describe pod <pod-name> | grep -A10 IP: - 节点级网络诊断
bash复制
calicoctl node status
证书过期应急处理:
bash复制kubeadm certs renew all
systemctl restart kubelet
5. 生产环境优化建议
5.1 资源配额与限制
配置命名空间级资源限制:
yaml复制apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
5.2 日志与监控方案
部署 Prometheus 监控栈:
bash复制kubectl create namespace monitoring
helm install prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring
关键监控指标:
- kubelet 内存使用率
- API Server 请求延迟
- etcd 写入吞吐量
5.3 安全加固措施
启用 Pod 安全准入控制:
bash复制apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
defaults:
enforce: "restricted"
enforce-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: ["kube-system"]
6. 版本升级与维护策略
6.1 滚动升级最佳实践
使用 kubeadm 进行无损升级:
bash复制sudo apt-get update && sudo apt-get install -y --allow-change-held-packages \
kubeadm=1.28.2-00
kubeadm upgrade plan
kubeadm upgrade apply v1.28.2
6.2 etcd 数据备份方案
定时备份 etcd 数据:
bash复制ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /var/lib/etcd/backup.db
6.3 节点维护操作
安全驱逐节点 Pod:
bash复制kubectl drain <node-name> \
--ignore-daemonsets \
--delete-emptydir-data \
--force
完成维护后重新标记为可调度:
bash复制kubectl uncordon <node-name>
