温馨提示×

Ubuntu Kubernetes入门指南

小樊
41
2025-12-14 16:04:39
栏目: 智能运维

Ubuntu 上搭建与体验 Kubernetes 的实用入门指南

一 环境准备与系统要求

  • 操作系统建议:Ubuntu 22.04/24.04,64 位架构。
  • 资源建议:单节点学习至少 2 核 CPU、4GB 内存、20GB 磁盘;多节点或生产建议更高规格。
  • 基础工具:更新系统并安装常用工具(如 curl、gnupg、ca-certificates、software-properties-common)。
  • 主机名与解析:为各节点设置清晰主机名(如 k8s-master、k8s-worker1),必要时配置 /etc/hosts 便于内网解析。
  • 容器运行时:安装并启用 containerd(推荐)或 Docker;如使用 containerd,需生成默认配置并启用 SystemdCgroup

二 安装容器运行时与 Kubernetes 组件

  • 安装 containerd(推荐)
    • 安装与配置:
      • sudo apt update && sudo apt install -y containerd
      • sudo mkdir -p /etc/containerd
      • containerd config default | sudo tee /etc/containerd/config.toml
      • 将配置中的 SystemdCgroup = true
      • sudo systemctl restart containerd && sudo systemctl enable containerd
  • 安装 kubeadm、kubelet、kubectl
    • 导入 GPG 并添加仓库(使用签名密钥环):
      • curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
      • echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
    • 安装指定版本(示例:1.28.x):
      • sudo apt update && sudo apt install -y kubeadm=1.28. kubelet=1.28. kubectl=1.28.***
      • sudo systemctl enable --now kubelet
  • 可选:安装 Docker(如选择 Docker 作为运行时)
    • sudo apt update && sudo apt install -y docker.io
    • sudo systemctl start docker && sudo systemctl enable docker

三 初始化集群与加入节点

  • 前置系统设置(所有节点)
    • 禁用 Swap:sudo swapoff -a 并注释 /etc/fstab 中的 swap 行
    • 加载内核模块:sudo modprobe overlay;sudo modprobe br_netfilter
    • 开启桥接与转发:
      • cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
        • net.bridge.bridge-nf-call-iptables = 1
        • net.bridge.bridge-nf-call-ip6tables = 1
        • net.ipv4.ip_forward = 1
        • EOF
      • sudo sysctl --system
  • 初始化控制平面(仅在 Master)
    • 初始化命令(按需替换参数):
      • sudo kubeadm init
        –pod-network-cidr=192.168.0.0/16
        –apiserver-advertise-address=<主节点IP>
        –control-plane-endpoint=<主节点IP或负载均衡地址>
    • 配置 kubectl(普通用户):
      • mkdir -p $HOME/.kube
      • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(CNI)
    • Calico(与 192.168.0.0/16 匹配):
      • kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
    • 或 Flannel(经典 10.244.0.0/16):
      • kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
  • 加入工作节点
    • 在 Master 生成加入命令:sudo kubeadm token create --print-join-command
    • 在 Worker 执行输出的 kubeadm join … 命令
  • 验证
    • kubectl get nodes(状态应为 Ready
    • kubectl cluster-info

四 快速上手应用部署

  • 部署示例应用
    • 创建 Deployment:
      • kubectl create deployment nginx-deployment --image=nginx:1.25 --replicas=3
    • 暴露为 NodePort 服务:
      • kubectl expose deployment nginx-deployment --port=80 --type=NodePort
    • 查看访问端口:
      • kubectl get svc nginx-deployment
    • 访问测试(任一节点 IP + NodePort):
      • curl http://<节点IP>:
  • 常用命令
    • 查看资源:kubectl get pods,svc,deploy -A
    • 查看日志:kubectl logs
    • 进入容器:kubectl exec -it – /bin/sh

五 常见问题排查与生产建议

  • 常见问题
    • Pod 处于 Pending:多因未安装 CNI 或 PodNetworkCIDR 与插件不匹配;检查 kubectl describe pod 与网络插件 YAML。
    • 服务无法访问:确认 Service type=NodePort 的端口范围(默认 30000–32767)、节点防火墙/安全组放行、以及 Pod 就绪探针。
    • kubelet 启动失败:journalctl -u kubelet 查看日志,常见为 cgroup 驱动不一致、镜像拉取失败或端口占用。
  • 生产建议
    • 高可用控制平面:使用 kubeadm 的 HA 方案或 kube-vip/keepalived + HAProxy,并配置 –control-plane-endpoint 指向 VIP。
    • 持久化存储:引入 CSI 驱动与 StorageClass,为数据库等有状态应用提供 PV/PVC
    • 安全加固:启用 RBACPod Security、镜像仓库凭据管理、最小权限 ServiceAccount、网络策略(如 Calico NetworkPolicy)。
    • 备份与恢复:定期备份 etcd(快照与恢复流程),并演练灾难恢复。

0