随笔 - 307  文章 - 0  评论 - 5  阅读 - 4264

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集群已具备以下生产级特性:

  1. 高可用架构:多Master节点+负载均衡
  2. 资源隔离:内核级调优+资源预留
  3. 可观测性:集成监控告警体系
  4. 安全基线:RBAC+网络策略加固

建议后续结合GitOps工具(如Argo CD)实现持续部署,并通过Service Mesh增强微服务治理能力。

作者:leo-zhang
版权声明:原创作品,谢绝转载!否则将追究法律责任。

posted on   Leo-Yide  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示