插件窝 干货文章 k8s管理不同机器上的docker

k8s管理不同机器上的docker

节点 nginx kubectl 容器 563    来源:    2025-04-26

在 Kubernetes (k8s) 中管理跨多台机器的 Docker 容器,本质上是 Kubernetes 的核心功能。以下是关键步骤和概念解析:


1. 核心架构理解

  • Master Node:控制平面(API Server、Scheduler、Controller Manager、etcd)
  • Worker Node:运行容器的工作节点(包含 kubeletkube-proxyDocker/Containerd
  • Pod:最小调度单元,一个 Pod 可包含多个容器(共享网络/存储)。

2. 关键组件与流程

2.1 节点管理

  • kubelet:运行在每个 Worker 节点,负责与 Master 通信并管理本机容器。
  • kube-proxy:处理节点上的网络规则(Service 流量转发)。
  • 容器运行时:Docker 是可选之一(K8s 已逐步转向 Containerd 作为默认)。

2.2 集群部署工具

  • kubeadm:快速初始化集群(推荐)。
  • kubectl:命令行管理工具。
  • CNI 插件:如 Calico、Flannel,负责 Pod 间网络通信。

3. 操作步骤

3.1 初始化集群(Master 节点)

# 安装 kubeadm/kubelet/kubectl
sudo apt-get update && sudo apt-get install -y kubeadm kubelet kubectl

# 初始化 Master(替换 <ip> 为实际 IP)
sudo kubeadm init --apiserver-advertise-address=<ip> --pod-network-cidr=10.244.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

3.2 加入 Worker 节点

在 Master 初始化后,会输出类似以下命令:

kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

在 Worker 节点执行此命令即可加入集群。

3.3 部署网络插件(如 Calico)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

4. 管理 Docker 容器

4.1 通过 Pod 部署容器

# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

部署:

kubectl apply -f nginx-pod.yaml

4.2 使用 Deployment 管理副本

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
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-deployment.yaml

5. 跨节点通信与调度

  • Service:为 Pod 提供固定访问入口(ClusterIP、NodePort、LoadBalancer)。
  • Ingress:管理外部访问(需配合 Ingress Controller 如 Nginx)。
  • 节点亲和性:手动调度 Pod 到指定节点: yaml spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: disktype operator: In values: - ssd

6. 监控与维护

  • kubectl top nodes/pods:查看资源使用情况。
  • Dashboard:可视化集群管理(需额外部署)。
  • 日志收集kubectl logs <pod-name> 或集成 EFK 栈。

常见问题

  1. Docker 与 Containerd 如何选择?
    • K8s 1.20+ 开始弃用 Docker,推荐直接使用 Containerd 作为运行时。
  2. Pod 跨节点网络不通?
    • 检查 CNI 插件是否正常安装(kubectl get pods -n kube-system)。
  3. 节点 NotReady?
    • 检查 kubelet 服务状态:systemctl status kubelet

通过以上步骤,Kubernetes 可以统一管理多台机器上的 Docker 容器,实现自动化部署、扩缩容和故障恢复。建议结合 CI/CD 工具(如 Jenkins、ArgoCD)进一步提升运维效率。