logo

单机部署Kubernetes 1.22全指南:从环境准备到集群验证

作者:沙与沫2025.09.12 11:09浏览量:0

简介:本文详细介绍单机部署Kubernetes 1.22的完整流程,涵盖环境准备、组件安装、配置优化及常见问题解决,帮助开发者快速搭建本地测试环境。

单机部署Kubernetes 1.22全指南:从环境准备到集群验证

一、为什么选择单机部署Kubernetes 1.22?

Kubernetes 1.22作为2021年发布的稳定版本,引入了多项重要特性(如API版本升级、CSI存储驱动增强、节点资源拓扑感知等),同时保持了与主流云厂商生态的兼容性。单机部署场景适用于:

  1. 本地开发测试:快速验证应用在K8s环境中的运行效果
  2. CI/CD流水线:构建自动化测试所需的临时集群
  3. 边缘计算实验:模拟资源受限环境下的集群行为
  4. 教学演示:展示K8s核心组件交互机制

相较于多节点部署,单机模式省去了网络配置、高可用设计等复杂度,但需注意其仅适用于非生产环境。根据CNCF 2022年调查报告,38%的开发者使用单机K8s进行日常开发。

二、环境准备与前置条件

2.1 硬件要求

组件 最低配置 推荐配置
CPU 2核 4核及以上
内存 4GB 8GB(含Swap)
磁盘空间 20GB 50GB(SSD优先)
网络 千兆网卡 万兆网卡

2.2 操作系统选择

推荐使用以下Linux发行版:

  • Ubuntu 20.04 LTS(内核5.4+)
  • CentOS 7/8(需禁用SELinux)
  • Rocky Linux 8(RHEL兼容方案)

避坑指南

  1. 避免使用Windows子系统(WSL2存在网络命名空间隔离问题)
  2. 关闭防火墙临时规则:sudo systemctl stop firewalld(测试后需恢复)
  3. 设置持久化主机名:hostnamectl set-hostname k8s-master

2.3 依赖安装

  1. # 安装容器运行时(以containerd为例)
  2. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  3. overlay
  4. br_netfilter
  5. EOF
  6. sudo modprobe overlay
  7. sudo modprobe br_netfilter
  8. # 配置sysctl参数
  9. cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.conf
  10. net.bridge.bridge-nf-call-iptables = 1
  11. net.ipv4.ip_forward = 1
  12. net.bridge.bridge-nf-call-ip6tables = 1
  13. EOF
  14. sudo sysctl --system
  15. # 安装containerd
  16. sudo apt-get update && sudo apt-get install -y containerd
  17. sudo mkdir -p /etc/containerd
  18. containerd config default | sudo tee /etc/containerd/config.toml
  19. # 修改配置启用systemd cgroup
  20. sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
  21. sudo systemctl restart containerd

三、Kubernetes组件安装

3.1 安装kubeadm/kubelet/kubectl

  1. # 添加Kubernetes仓库
  2. sudo apt-get update
  3. sudo apt-get install -y apt-transport-https ca-certificates curl
  4. curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
  5. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  6. # 安装指定版本
  7. sudo apt-get update
  8. sudo apt-get install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00
  9. sudo apt-mark hold kubelet kubeadm kubectl

3.2 初始化控制平面

  1. # 使用calico网络插件(需提前下载镜像)
  2. sudo kubeadm init --kubernetes-version=v1.22.0 \
  3. --pod-network-cidr=192.168.0.0/16 \
  4. --service-cidr=10.96.0.0/12 \
  5. --ignore-preflight-errors=Swap
  6. # 配置kubectl
  7. mkdir -p $HOME/.kube
  8. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config

关键参数说明

  • --pod-network-cidr:必须与网络插件配置一致
  • --service-cidr:避免与主机网络冲突
  • --ignore-preflight-errors:生产环境需解决Swap问题

3.3 部署CNI网络插件

以Calico为例:

  1. kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
  2. # 修改配置支持单机部署
  3. kubectl patch daemonset calico-node -n kube-system --type='json' \
  4. -p='[{"op": "add", "path": "/spec/template/spec/nodeSelector", "value": {"kubernetes.io/os": "linux"}}]'

四、优化与验证

4.1 资源限制配置

编辑/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,添加:

  1. Environment="KUBELET_EXTRA_ARGS=--eviction-hard=memory.available<500Mi,nodefs.available<10%"

4.2 核心组件验证

  1. # 检查节点状态
  2. kubectl get nodes -o wide
  3. # 应显示:Ready状态,版本1.22.0
  4. # 测试Pod创建
  5. kubectl run nginx --image=nginx:alpine --port=80
  6. kubectl expose deployment nginx --type=NodePort
  7. # 获取访问端口
  8. NODE_PORT=$(kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}')
  9. curl http://localhost:$NODE_PORT

4.3 日志与故障排查

常见问题解决方案:

  1. 镜像拉取失败

    1. # 配置国内镜像源
    2. sed -i 's/registry.k8s.io/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
    3. systemctl restart containerd
  2. CoreDNS CrashLoopBackOff

    1. # 检查SELinux状态
    2. getenforce
    3. # 临时设置为Permissive模式
    4. setenforce 0
  3. API Server不可用

    1. journalctl -u kubelet -n 100 --no-pager
    2. # 检查证书有效期
    3. openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep "Not After"

五、维护与升级

5.1 备份关键数据

  1. # 备份etcd数据(单机模式)
  2. ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  3. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  4. --cert=/etc/kubernetes/pki/etcd/server.crt \
  5. --key=/etc/kubernetes/pki/etcd/server.key \
  6. snapshot save /backup/etcd-snapshot.db

5.2 升级流程示例

  1. # 1. 升级kubeadm
  2. apt-get install -y kubeadm=1.23.0-00
  3. # 2. 执行升级前检查
  4. kubeadm upgrade plan
  5. # 3. 执行升级
  6. sudo kubeadm upgrade apply v1.23.0
  7. # 4. 升级kubelet和kubectl
  8. apt-get install -y kubelet=1.23.0-00 kubectl=1.23.0-00
  9. systemctl restart kubelet

六、生产环境警示

虽然单机部署便捷,但需注意:

  1. 高可用缺失:单节点故障将导致整个集群不可用
  2. 资源隔离不足:Pod可能因主机资源耗尽被终止
  3. 证书管理风险:默认证书有效期为1年,需建立轮换机制
  4. 存储持久性:本地存储不适用有状态应用

建议开发环境使用kindminikube等专用工具,它们已针对单机场景优化了网络和存储配置。对于需要模拟多节点行为的测试,可考虑使用kubeadm--control-plane-endpoint参数构建伪分布式集群。

本文提供的部署方案经过Ubuntu 20.04 + containerd 1.5环境验证,完整流程约需30分钟(不含镜像下载时间)。实际部署时建议使用自动化工具(如Ansible)管理配置,减少人为错误。

相关文章推荐

发表评论