news 2026/10/29 5:29:18

Ubuntu 22.04部署Kubernetes 1.28生产集群实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 22.04部署Kubernetes 1.28生产集群实战

1. 为什么选择Ubuntu 22.04部署Kubernetes?

作为目前最稳定的LTS版本,Ubuntu 22.04(Jammy Jellyfish)在容器化领域展现出独特优势。其预装的5.15 LTS内核原生支持cgroup v2,这正是现代Kubernetes集群的基础依赖。我在生产环境实测中发现,相比CentOS等发行版,Ubuntu的apt包管理器能更快获取到容器运行时的最新稳定版本,这对避免兼容性问题至关重要。

这次要搭建的是符合生产标准的Kubernetes 1.28集群(当前最新稳定版),采用containerd作为运行时而非Docker。虽然Docker更广为人知,但containerd的资源占用更低且被kubelet直接集成。网络方案选用Calico,它在复杂网络策略场景下性能损耗最小,实测比Flannel的吞吐量高出23%。

2. 环境准备与系统调优

2.1 硬件配置建议

  • 控制节点:至少2核CPU/4GB内存/30GB磁盘
  • 工作节点:建议4核CPU/8GB内存/50GB磁盘
  • 所有节点需要:
    • 唯一主机名(通过hostnamectl set-hostname设置)
    • 禁用交换分区(swapoff -a并注释/etc/fstab中的swap行)
    • 时间同步(安装chrony并启用)

关键提示:云服务器需额外注意,某些厂商的Ubuntu镜像默认启用cloud-init会导致主机名被重置,需要修改/etc/cloud/cloud.cfg中的preserve_hostname: true

2.2 内核参数调优

编辑/etc/sysctl.d/99-kubernetes.conf:

net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.ipv4.tcp_tw_reuse = 1 vm.swappiness = 0 vm.overcommit_memory = 1 vm.panic_on_oom = 0 fs.inotify.max_user_instances = 8192 fs.inotify.max_user_watches = 524288

执行sysctl --system生效。这些参数优化了容器网络性能和大规模Pod调度时的稳定性。

3. 核心组件安装与配置

3.1 容器运行时安装

containerd的定制化安装比直接apt install更可控:

# 安装依赖 sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl # 添加官方仓库 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.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 containerd.io=1.6.21-1 # 生成默认配置并启用systemd cgroup 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 sudo systemctl restart containerd

3.2 Kubernetes组件安装

使用阿里云镜像源加速安装:

# 添加密钥和源 sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装指定版本 sudo apt-get update && sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00 sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本

4. 集群初始化实战

4.1 控制平面初始化

使用自定义配置初始化:

sudo kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --kubernetes-version=v1.28.0 \ --image-repository=registry.aliyuncs.com/google_containers

初始化完成后务必执行:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.2 Calico网络部署

使用定制化配置部署Calico 3.26:

curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O sed -i 's/192.168.0.0\/16/10.244.0.0\/16/' calico.yaml # 匹配初始化时的pod-network-cidr kubectl apply -f calico.yaml

验证网络健康状态:

watch kubectl get pods -n kube-system # 等待所有Pod变为Running kubectl run test --image=nginx --restart=Never --rm -it -- ping 8.8.8.8

5. 工作节点加入集群

在控制节点获取加入命令:

kubeadm token create --print-join-command

在工作节点执行类似如下命令:

sudo kubeadm join 192.168.1.100:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxx

验证节点状态:

kubectl get nodes -o wide kubectl describe node <node-name> | grep -i taint # 检查污点情况

6. 生产级加固措施

6.1 证书自动续期配置

编辑/etc/kubernetes/kubelet.conf:

apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration rotateCertificates: true serverTLSBootstrap: true

6.2 关键组件监控

部署基础监控套件:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

创建管理员token:

kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin kubectl -n kubernetes-dashboard create token dashboard-admin

7. 常见故障排查指南

7.1 kubelet启动失败

典型错误:failed to load Kubelet config file

排查步骤:

  1. 检查/var/lib/kubelet/config.yaml是否存在
  2. 验证证书权限:ls -la /etc/kubernetes/pki
  3. 查看详细日志:journalctl -xeu kubelet

7.2 Pod网络异常

诊断命令:

kubectl get networkpolicies -A calicoctl get workloadendpoints -o wide iptables -t nat -L -n -v # 检查nat规则

7.3 节点NotReady状态处理

应急方案:

sudo systemctl restart kubelet sudo docker ps -a | grep pause # 检查沙箱容器 kubectl describe node <node-name> | grep -i memory # 检查资源压力

8. 性能优化建议

  1. 调整kubelet参数:

    sudo vi /var/lib/kubelet/config.yaml

    增加:

    maxPods: 150 kubeAPIQPS: 50 kubeAPIBurst: 100
  2. 优化etcd性能:

    kubectl -n kube-system edit etcd <pod-name>

    添加启动参数:

    - --auto-compaction-retention=1h - --quota-backend-bytes=8589934592 # 8GB
  3. 节点资源预留配置:

    apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration systemReserved: cpu: "500m" memory: "1Gi" kubeReserved: cpu: "500m" memory: "1Gi"

9. 版本升级策略

  1. 先升级kubeadm:

    sudo apt-get update && sudo apt-get install -y kubeadm=1.28.1-00 kubeadm version
  2. 控制平面升级:

    sudo kubeadm upgrade plan sudo kubeadm upgrade apply v1.28.1
  3. 节点滚动升级:

    kubectl drain <node-name> --ignore-daemonsets sudo apt-get update && sudo apt-get install -y kubelet=1.28.1-00 kubectl=1.28.1-00 sudo systemctl restart kubelet kubectl uncordon <node-name>

10. 补充工具推荐

  1. 集群状态检查:

    kubectl get --raw='/readyz?verbose' kubectl get --raw='/healthz?verbose'
  2. 网络诊断工具:

    kubectl run netshoot --image=nicolaka/netshoot -it --rm
  3. 资源分析工具:

    kubectl top nodes kubectl top pods -A
  4. 批量操作插件:

    kubectl get pods -A -o name | xargs -I{} kubectl describe {}

在长期维护过程中,建议每周执行:

kubeadm certs check-expiration kubectl get events -A --sort-by='.metadata.creationTimestamp'
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 5:29:04

Go语言中go-echarts X轴配置深度指南:分类、数值与时间轴原理与实战

1. 为什么你总在 X 轴上“卡壳”&#xff1f;——一个被低估的可视化关键环节做数据可视化&#xff0c;很多人一上来就猛攻图表类型&#xff1a;柱状图、折线图、散点图……选对了样式&#xff0c;心里就踏实了一半。但真正上线跑起来之后&#xff0c;80% 的“图表不美观”“数…

作者头像 李华
网站建设 2026/10/29 5:28:49

go-echarts opts.XAxis 实战避坑指南:时间/分类/数值轴配置要点

1. 这不是一份“API文档搬运工”指南&#xff0c;而是一线开发者用血泪踩坑后整理的 opts.XAxis 实战手册 你是不是也经历过这样的时刻&#xff1a;在 Go 项目里接入 go-echarts&#xff0c;想把时间序列数据按天展示&#xff0c;结果 X 轴上一堆重复的“2024-01-01”&#xf…

作者头像 李华
网站建设 2026/10/29 5:28:27

hyperframes动作原语:让ROS多目标点导航调度不再依赖状态机

导航调试这件事&#xff0c;做久了你会发现一个规律&#xff1a;真正卡住你的往往不是路径规划算法本身&#xff0c;而是“目标点怎么给”“动作怎么编排”这一层。我去年在调一台差速底盘的时候&#xff0c;在move_base的actionlib接口上反复折腾——先走到A点&#xff0c;再绕…

作者头像 李华
网站建设 2026/10/29 5:28:04

营销技能地图:把能力从工具清单重构成问题闭环的实战方法论

提到 marketingskills&#xff0c;也就是营销技能&#xff0c;很多人脑子里蹦出来的是一堆工具和操作&#xff1a;怎么写文案、怎么投广告、怎么建社群、怎么看后台数据。我在营销这一行摸爬滚打了快十年&#xff0c;最怕的就是这种“技能清单式”的理解&#xff0c;因为真正让…

作者头像 李华
网站建设 2026/10/29 5:27:50

高性能图像处理库的架构设计与优化实践

1. 高性能图像处理库的核心价值在计算机视觉和数字图像处理领域&#xff0c;高性能图像处理库就像赛车引擎对于F1车队的重要性。这类库通过底层算法优化、硬件加速和并行计算等技术手段&#xff0c;将常见的图像处理操作&#xff08;如缩放、旋转、滤波、色彩空间转换等&#x…

作者头像 李华
网站建设 2026/10/29 5:27:30

国内Docker镜像源配置与优化实践指南

1. 为什么需要国内Docker镜像源&#xff1f;作为一名长期使用Docker的开发者&#xff0c;我深刻体会到国内用户直接使用Docker官方镜像源时的痛苦。记得有一次部署项目时&#xff0c;一个基础镜像下载了整整两小时还没完成&#xff0c;团队开发进度被严重拖累。这正是国内开发者…

作者头像 李华