温馨提示×

Ubuntu Kubernetes如何进行容器编排

小樊
47
2025-11-17 00:19:20
栏目: 智能运维

在 Ubuntu 上使用 Kubernetes 进行容器编排

一 环境准备

  • 操作系统建议使用 Ubuntu 20.04/22.04,每个节点至少 2 GB 内存、2 核 CPU,并确保节点间网络互通。
  • 关闭 Swap:执行 sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,避免 kubelet 启动失败。
  • 设置唯一 主机名静态 IP,并在所有节点的 /etc/hosts 中添加映射,便于解析。
  • 允许相关端口或临时关闭防火墙(如 ufw/iptables),确保 6443、10250、10251、10252、8472(Flannel VXLAN) 等端口可达。
  • 准备容器运行时(推荐 Dockercontainerd),下文以 Docker 为例。

二 安装与初始化集群

  • 安装 Docker(如尚未安装):
    sudo apt update
    sudo apt install -y docker.io
    sudo systemctl enable --now docker
    
  • 安装 kubeadm、kubelet、kubectl:
    sudo apt update && sudo apt install -y apt-transport-https curl
    curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    
  • 初始化控制平面(主节点):
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    # 若使用 Calico,可按官方清单指定 CIDR,例如:--pod-network-cidr=192.168.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
    
  • 安装网络插件(二选一):
    • Flannel:
      kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      
    • Calico:
      kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
      
  • 加入工作节点(在每台 worker 上执行 kubeadm init 输出中的 kubeadm join ... 命令)。

三 基本编排示例

  • 部署应用:
    kubectl create deployment nginx --image=nginx:1.25 --replicas=3
    kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 验证与访问:
    kubectl get nodes -o wide
    kubectl get pods -o wide
    kubectl get svc nginx
    # 临时本地访问
    kubectl port-forward deployment/nginx 8080:80
    # 或在浏览器访问 http://<任一节点IP>:<NodePort>
    
  • 扩缩容与滚动更新:
    kubectl scale deployment nginx --replicas=5
    kubectl set image deployment/nginx nginx=nginx:1.27
    kubectl rollout status deployment/nginx
    kubectl rollout undo deployment/nginx
    
  • 配置与查看:
    kubectl describe pod <pod-name>
    kubectl logs <pod-name>
    kubectl exec -it <pod-name> -- sh
    

四 常用运维命令

  • 节点与系统信息:
    kubectl get nodes
    kubectl describe node <node-name>
    kubectl top nodes
    kubectl top pods
    
  • 资源清理:
    kubectl delete service nginx
    kubectl delete deployment nginx
    # 重置节点(谨慎:会清理本机 K8s 状态)
    sudo kubeadm reset -f
    

五 常见问题与优化

  • 节点 NotReady:多因网络插件未就绪或 Pod CIDR 与插件不匹配;确认已成功应用 Flannel/Calico 清单,且 --pod-network-cidr 与所选插件一致。
  • cgroup 驱动不一致:若 Docker 使用 cgroupfs,建议切换为 systemd 以与 kubelet 一致:
    # /etc/docker/daemon.json
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": { "max-size": "100m" },
      "storage-driver": "overlay2"
    }
    sudo systemctl restart docker
    
  • 镜像拉取慢:配置国内镜像仓库(imagePullSecrets 或节点 daemon.json 的 registry mirrors)。
  • 防火墙/安全组:放行 6443、10250、8472 等端口,或测试环境临时关闭防火墙。
  • 生产建议:使用 containerd 作为运行时、启用 RBAC网络策略(NetworkPolicy)PodSecurity 准入控制,并配置 kubelet 资源预留集群自动扩缩容(Cluster Autoscaler)

0