在 Debian 上使用 Kubernetes 进行容器编排
一 架构与准备
- 组件与职责
- kubeadm:集群引导与初始化
- kubelet:节点上运行容器的代理
- kubectl:集群管理 CLI
- 容器运行时:如 Docker/containerd/CRI-O
- 节点规划
- 至少 1 台控制平面(建议 2–3 台 做高可用)
- 至少 1 台工作节点
- 建议硬件:每节点 ≥2 核 CPU、≥2GB 内存、≥20GB 磁盘
- 基础环境
- 各节点互通,时间同步(如 chrony)
- 关闭 Swap:swapoff -a 并注释 /etc/fstab 中的 swap 行
- 内核参数(示例):net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1
- 防火墙放行 6443/10250/10251/10252 等端口(或临时关闭防火墙便于部署)
二 安装与初始化集群
- 安装组件(Debian 12 示例)
- 导入签名密钥与仓库(推荐新版签名方式)
- curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
- echo “deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /” | tee /etc/apt/sources.list.d/kubernetes.list
- 安装并锁定版本
- apt-get update && apt-get install -y kubelet kubeadm kubectl
- apt-mark hold kubelet kubeadm kubectl
- 启动 kubelet
- systemctl enable --now kubelet
- 初始化控制平面
- kubeadm init --pod-network-cidr=10.244.0.0/16
- 完成后按提示保存 kubeadm join 命令
- 配置 kubectl
- mkdir -p $HOME/.kube
- cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(示例使用 Flannel)
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 加入工作节点
- 在每台 Worker 上执行 kubeadm init 输出的 kubeadm join 命令
- 验证
- kubectl get nodes 应看到所有节点 Ready
三 部署与运维示例
- 部署应用
- 示例 Deployment(nginx.yaml)
- apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- 应用与暴露
- kubectl apply -f nginx.yaml
- kubectl expose deployment nginx --type=NodePort --port=80
- 常用运维
- 扩缩容:kubectl scale deployment nginx --replicas=5
- 查看日志:kubectl logs deploy/nginx
- 进入容器:kubectl exec -it deploy/nginx – sh
四 本地开发与单机方案
- Minikube(适合在本机 Debian 上快速体验)
- 安装 kubectl(下载二进制到 /usr/local/bin 并赋权)
- 安装 Minikube(下载二进制到 /usr/local/bin)
- 启动集群:minikube start --driver=docker
- 部署示例应用:kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
- 访问服务:minikube service hello-minikube --url
- 无虚拟机驱动提示
- 若使用 none 驱动,需确保 crictl 等依赖可用(Kubernetes ≥1.26 场景常见要求)
五 常见问题与优化
- 镜像与仓库
- 国内环境可使用镜像源(如 pkgs.k8s.io 或云厂商镜像)加速组件安装与拉取
- 容器运行时
- 新版 Kubernetes 默认使用 containerd/CRI-O;如使用 Docker,需确保与 kubelet 的 CRI 配置匹配
- 版本与升级
- 生产环境建议固定 kubelet/kubeadm/kubectl 版本,变更前在测试环境验证
- 安全建议
- 避免以 root 直接运行工作负载,使用 RBAC 最小权限
- 开启 Pod Security 或 OPA/Gatekeeper 进行准入控制
- 网络与存储
- 选择兼容的 CNI 插件(如 Flannel、Calico)
- 有状态应用使用 PV/PVC 或 StorageClass 提供持久化