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):
- 常用命令
- 查看资源: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。
- 安全加固:启用 RBAC、Pod Security、镜像仓库凭据管理、最小权限 ServiceAccount、网络策略(如 Calico NetworkPolicy)。
- 备份与恢复:定期备份 etcd(快照与恢复流程),并演练灾难恢复。