logo

单机部署Kubernetes 1.22:从零开始的完整指南

作者:问题终结者2025.09.17 11:04浏览量:0

简介:本文详细介绍了在单机环境下部署Kubernetes 1.22的完整流程,包括环境准备、组件安装、配置调整及验证测试,帮助开发者快速搭建本地K8s开发环境。

单机部署Kubernetes 1.22:从零开始的完整指南

云计算与容器化技术飞速发展的今天,Kubernetes(K8s)已成为容器编排领域的标准。对于开发者而言,本地搭建K8s环境是学习、测试和开发的重要基础。本文将详细介绍如何在单机环境下部署Kubernetes 1.22版本,覆盖从环境准备到集群验证的全流程,帮助读者快速构建高效的本地开发环境。

一、环境准备:硬件与软件要求

1.1 硬件配置建议

单机部署K8s 1.22的最低硬件要求为:

  • CPU:2核以上(推荐4核)
  • 内存:4GB以上(推荐8GB)
  • 磁盘空间:至少20GB可用空间(推荐SSD)
  • 网络:支持桥接或NAT模式的虚拟网络

实践建议:若用于生产环境模拟,建议使用16GB内存以上配置,避免资源竞争导致的性能下降。

1.2 操作系统选择

K8s 1.22支持多种Linux发行版,推荐使用以下系统:

  • Ubuntu 20.04 LTS(官方测试最充分)
  • CentOS 7/8(企业环境常用)
  • Debian 10/11(轻量级选择)

避坑指南:避免使用Windows系统直接部署,若需在Windows上运行,建议通过WSL2或虚拟机(如VirtualBox、VMware)实现。

1.3 依赖工具安装

在部署前需安装以下工具:

  1. # Ubuntu示例
  2. sudo apt update
  3. sudo apt install -y docker.io conntrack ebtables socat iptables
  • Docker:作为容器运行时(需19.03+版本)
  • conntrack/ebtables:网络组件依赖
  • socat/iptables:端口转发与防火墙管理

二、核心组件安装:kubeadm、kubelet、kubectl

2.1 添加K8s官方仓库

  1. sudo apt-get update && sudo apt-get install -y apt-transport-https curl
  2. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  4. sudo apt-get update

2.2 安装指定版本组件

  1. # 固定版本安装(避免自动升级)
  2. sudo apt-get install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00
  3. sudo apt-mark hold kubelet kubeadm kubectl

版本控制要点:通过=1.22.0-00精确指定版本,使用apt-mark hold防止意外升级。

2.3 配置cgroup驱动

修改Docker配置以匹配K8s的cgroup驱动:

  1. cat <<EOF | sudo tee /etc/docker/daemon.json
  2. {
  3. "exec-opts": ["native.cgroupdriver=systemd"],
  4. "log-driver": "json-file",
  5. "log-opts": {
  6. "max-size": "100m"
  7. },
  8. "storage-driver": "overlay2"
  9. }
  10. EOF
  11. sudo systemctl restart docker

三、集群初始化与配置

3.1 使用kubeadm初始化集群

  1. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.22.0
  • 参数说明
    • --pod-network-cidr:指定Pod网络范围(需与CNI插件匹配)
    • --kubernetes-version:强制使用指定版本

常见问题处理:若初始化失败,可通过kubeadm reset清理后重试,检查/var/log/cloud-init-output.log获取详细错误。

3.2 配置kubectl

初始化完成后,按提示执行:

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

验证集群状态:

  1. kubectl cluster-info
  2. kubectl get nodes

3.3 部署网络插件(以Calico为例)

  1. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

插件选择建议

  • 小规模环境:Calico或Flannel
  • 需要网络策略:Calico
  • 轻量级需求:Weave Net

四、验证与测试

4.1 部署测试Pod

  1. kubectl create deployment nginx --image=nginx:alpine
  2. kubectl expose deployment nginx --port=80 --type=NodePort

获取访问端口:

  1. kubectl get svc nginx

通过<节点IP>:<NodePort>访问服务。

4.2 集群健康检查

  1. # 检查节点状态
  2. kubectl describe nodes
  3. # 检查核心组件日志
  4. journalctl -u kubelet -n 100 --no-pager

五、常见问题解决方案

5.1 Swap未禁用错误

现象[ERROR Swap]: running with swap on is not supported
解决

  1. sudo swapoff -a
  2. # 永久禁用(可选)
  3. sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

5.2 镜像拉取失败

现象ImagePullBackOff
解决

  1. # 使用国内镜像源(以阿里云为例)
  2. sudo sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
  3. sudo systemctl restart containerd

5.3 端口冲突

现象Port 10250 is in use
解决

  1. # 查找占用进程
  2. sudo netstat -tulnp | grep 10250
  3. # 终止冲突进程或修改K8s配置

六、进阶优化建议

6.1 资源限制配置

编辑/etc/default/kubelet,添加:

  1. KUBELET_EXTRA_ARGS="--fail-swap-on=false --max-pods=110"

重启服务:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart kubelet

6.2 持久化存储配置

使用hostPath作为本地存储示例:

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: local-pv
  5. spec:
  6. capacity:
  7. storage: 10Gi
  8. accessModes:
  9. - ReadWriteOnce
  10. hostPath:
  11. path: /mnt/data

七、总结与展望

通过本文的步骤,读者可在单机环境下快速部署Kubernetes 1.22集群。此方案适用于:

  • 本地开发测试
  • 持续集成环境
  • 小规模项目原型验证

未来可扩展的方向包括:

  • 集成Ingress控制器(如Nginx Ingress)
  • 部署监控系统(Prometheus+Grafana)
  • 探索Service Mesh(如Istio)

最佳实践:建议定期备份/etc/kubernetes/manifests/目录下的静态Pod配置,以便快速恢复集群。

通过严谨的环境配置和组件选择,单机K8s 1.22部署既能满足开发需求,又可为后续迁移到生产集群提供经验积累。

相关文章推荐

发表评论