kubeadm部署k8s集群
使用 kubeadm 部署生产级 Kubernetes 集群全指南
Kubeadm 是 Kubernetes 官方推荐的集群部署工具,其标准化流程与灵活的扩展能力使其成为生产环境的首选方案。本文将以 Ubuntu 22.04 为例,详细解析多节点集群部署全流程,并附关键配置优化技巧。
一、部署架构规划
1. 节点角色划分
节点类型 | 数量 | 推荐配置 | 关键组件 |
---|---|---|---|
Master | 3 | 4C8G 100GB SSD | kube-apiserver, etcd, etc |
Worker | 5 | 16C32G 500GB SSD | kubelet, kube-proxy |
LB | 2 | 2C4G 50GB SSD | HAProxy/Keepalived |
2. 网络规划表
网络类型 | CIDR | 用途说明 |
---|---|---|
节点管理网络 | 10.10.0.0/24 | SSH/K8s组件通信 |
Pod网络 | 10.244.0.0/16 | Flannel默认网段 |
Service网络 | 10.96.0.0/16 | ClusterIP地址池 |
Ingress网络 | 192.168.100.0/24 | 外部访问入口 |
二、系统级调优(所有节点)
1. 内核参数优化
# /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
fs.inotify.max_user_instances = 524288
fs.file-max = 2097152
2. 禁用Swap的深层原因
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
生产建议:对于内存敏感型应用,建议保留少量Swap空间(1-2%内存)
3. 时区与时间同步
timedatectl set-timezone Asia/Shanghai
apt install chrony -y
systemctl enable chronyd
三、Master节点部署流程
1. 容器运行时安装(以containerd为例)
apt-get update && apt-get install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
systemctl restart containerd
2. Kubeadm初始化配置
# kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.28.4
controlPlaneEndpoint: "k8s-api.example.com:6443"
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/16"
apiServer:
certSANs:
- "k8s-api.example.com"
- "10.10.0.100"
3. 集群初始化命令
kubeadm init --config=kubeadm-config.yaml --upload-certs
4. 高可用控制平面
# 其他Master节点加入命令
kubeadm join k8s-api.example.com:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane --certificate-key <cert-key>
四、Worker节点接入规范
1. 节点预检脚本
#!/bin/bash
# 检查内核版本
uname -r | grep -E '5\.15\.[0-9]+'
# 验证cgroup驱动
docker info | grep -i cgroup
# 网络连通性测试
nc -vz k8s-api.example.com 6443
2. 节点加入命令
kubeadm join k8s-api.example.com:6443 \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--node-labels "node-type=ssd,zone=cn-east-1a"
五、网络插件选型对比
插件 | 网络模式 | 性能损耗 | 适用场景 |
---|---|---|---|
Flannel | VXLAN | 8-10% | 中小型集群 |
Calico | BGP | 3-5% | 大规模生产环境 |
Cilium | eBPF | 1-3% | 云原生安全场景 |
Weave | mesh | 10-15% | 混合云环境 |
Flannel部署命令:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
六、集群验证与排错
1. 健康检查矩阵
# 查看节点就绪状态
kubectl get nodes -o wide
# 检查核心组件状态
kubectl get cs
# 网络连通性测试
kubectl run netcheck --image=alpine -- ping 8.8.8.8
2. 常见故障排查
# 查看kubelet日志
journalctl -u kubelet -f
# 诊断证书问题
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
# 检查网络策略
iptables-save | grep KUBE
七、生产级优化配置
1. Kubelet资源预留
# /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
cpu: "500m"
memory: "1Gi"
evictionHard:
memory.available: "100Mi"
nodefs.available: "10%"
2. 控制平面高可用
# 使用Keepalived实现VIP
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress {
10.10.0.100/24
}
}
八、集群生命周期管理
1. 版本升级策略
# 查看可升级版本
apt-cache policy kubeadm
# 执行滚动升级
kubeadm upgrade plan
kubeadm upgrade apply v1.28.5
2. 节点维护操作
# 安全驱逐Pod
kubectl drain <node-name> --ignore-daemonsets
# 节点下线
kubectl delete node <node-name>
总结
通过本指南部署的Kubernetes集群已具备以下生产级特性:
- 高可用架构:多Master节点+负载均衡
- 资源隔离:内核级调优+资源预留
- 可观测性:集成监控告警体系
- 安全基线:RBAC+网络策略加固
建议后续结合GitOps工具(如Argo CD)实现持续部署,并通过Service Mesh增强微服务治理能力。
作者:leo-zhang
版权声明:原创作品,谢绝转载!否则将追究法律责任。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!