在 Debian 上管理 Kubernetes 资源的实践指南
一 环境准备与集群初始化
- 系统要求与基础设置
- 建议配置:至少2 核 CPU、2GB RAM、20GB 磁盘;各节点间网络互通,设置主机名并在 /etc/hosts 做解析映射。
- 关闭 Swap:sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。
- 防火墙放行关键端口:如 6443(API Server)、10250(kubelet)等,确保节点与控制平面通信无阻。
- 容器运行时
- 安装 containerd(推荐)或 Docker,并启用与内核模块:
- 模块与内核参数:
- sudo modprobe overlay;sudo modprobe br_netfilter
- /etc/modules-load.d/containerd.conf:overlay、br_netfilter
- /etc/sysctl.d/99-kubernetes-k8s.conf:net.bridge.bridge-nf-call-iptables=1;net.ipv4.ip_forward=1
- 执行:sudo sysctl --system
- 启动服务:sudo systemctl enable --now containerd
- 安装 Kubernetes 组件
- 添加 APT 源并安装:sudo apt update && sudo apt install -y kubelet kubeadm kubectl
- 固定版本:sudo apt-mark hold kubelet kubeadm kubectl
- 初始化控制平面
- 示例:sudo kubeadm init --apiserver-advertise-address <MASTER_IP> --pod-network-cidr 10.244.0.0/16 --service-cidr 10.0.0.0/16
- 配置 kubectl:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 加入工作节点
- 使用 kubeadm init 输出的 kubeadm join 命令(包含 <MASTER_IP>:6443、token、证书哈希)。
二 日常资源操作命令
- 资源查看与诊断
- 节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
- 资源使用:kubectl top nodes;kubectl top pods
- 日志与事件:kubectl logs ;kubectl describe pod
- 应用部署与暴露
- 声明式:kubectl apply -f deployment.yaml;kubectl apply -f service.yaml
- 快速创建:kubectl create deployment nginx-app --image=nginx:1.14.2 --replicas=2
- 暴露服务:kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
- 扩缩容与更新
- 扩缩容:kubectl scale deployment --replicas=
- 滚动更新:kubectl set image deployment/ =image:tag;kubectl rollout status deployment/
- 回滚:kubectl rollout undo deployment/
- 清理与回退
- 删除资源:kubectl delete -f <file.yaml>;kubectl delete pod,svc
- 节点维护:kubectl drain --ignore-daemonsets;维护完成后 kubectl uncordon
- 重置节点:sudo kubeadm reset。
三 资源配额与限制
- 资源请求与限制(Pod/容器级)
- 在容器 spec 中设置 resources.requests 与 resources.limits(CPU/内存),保障应用稳定性与节点资源公平分配。
- 命名空间级配额与限额范围
- 资源配额(ResourceQuota):限制某命名空间的总 cpu、memory、pods 等资源上限。
- 限额范围(LimitRange):为容器设置默认请求/限制,避免“无限制”容器挤占资源。
- 配置示例
- 资源配额(示例):
- apiVersion: v1
- kind: ResourceQuota
- metadata: name: quota-demo
- spec:
- hard:
- pods: “10”
- requests.cpu: “2”
- requests.memory: “4Gi”
- limits.cpu: “4”
- limits.memory: “8Gi”
- 限额范围(示例):
- apiVersion: v1
- kind: LimitRange
- metadata: name: limits-demo
- spec:
- limits:
- default:
- cpu: “500m”
- memory: “512Mi”
- defaultRequest:
- cpu: “250m”
- memory: “256Mi”
- 管理要点
- 为关键业务设置合理请求/限制,避免资源争用;结合 Prometheus + Grafana 持续观测并调优配额与限额。
四 安全与网络策略
- 身份与权限
- 启用 RBAC:创建 ClusterRole/Role、ClusterRoleBinding/RoleBinding,遵循最小权限原则。
- 准入控制与镜像安全
- 建议启用 PodSecurity 准入(如 baseline/restricted 策略),并在生产环境使用私有镜像仓库与镜像安全扫描。
- 网络策略(NetworkPolicy)
- 使用 Calico 等网络插件实施命名空间与服务间访问控制,降低横向攻击面。
- 示例(仅允许同命名空间访问 80 端口):
- apiVersion: networking.k8s.io/v1
- kind: NetworkPolicy
- metadata: name: allow-same-ns
- spec:
- podSelector: {}
- policyTypes: [“Ingress”]
- ingress:
五 备份恢复与高可用
- 备份与迁移
- 使用 Velero 进行集群资源与持久卷的备份/恢复/迁移,在升级、迁移与灾难恢复场景中尤为重要。
- 高可用架构
- 控制平面高可用:部署奇数个 etcd 节点,使用 外部负载均衡器(如 LVS/HAProxy)暴露 API Server VIP,Controller Manager 与 Scheduler 通过 leader election 实现高可用。
- 节点与系统维护
- 例行操作:定期更新 Kubernetes 组件与系统补丁;清理未使用资源;为节点设置污点/容忍与节点亲和性以优化调度。