k8s 的基本原理、架构图、使用步骤和注意事项

发布于:2025-07-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

Kubernetes(k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。以下是其基本原理、使用步骤和注意事项的总结:


一、k8s 基本原理

  1. 核心架构

    • Master 节点:控制集群的核心组件,包括:
      • API Server:所有操作的入口,提供 RESTful API。
      • Scheduler:将 Pod 分配到合适的 Node。
      • Controller Manager:维护集群状态(如副本数、故障检测)。
      • etcd:分布式键值存储,保存集群状态。
    • Worker 节点:运行容器化应用,包含:
      • kubelet:与 Master 通信,管理 Pod 生命周期。
      • kube-proxy:处理网络规则和负载均衡。
      • 容器运行时(如 Docker、containerd)。
  2. 关键概念

    • Pod:最小部署单元,包含一个或多个共享资源的容器。
    • Deployment:定义 Pod 的副本数和更新策略。
    • Service:为 Pod 提供稳定的网络访问(ClusterIP、NodePort、LoadBalancer)。
    • Namespace:逻辑隔离集群资源(如开发、生产环境)。
    • ConfigMap/Secret:管理配置和敏感数据。
  3. 工作流程

    • 用户通过 kubectl 或 API 提交 YAML 描述文件。
    • Master 组件协调资源分配,调度 Pod 到 Node。
    • kubelet 拉取镜像并启动容器,持续监控状态。

以下是一个简化的 Kubernetes 架构图,描述 物理机(服务器)、K8s 集群、应用节点 之间的关系,并用文字逐步解释关键组件和交互流程:

Kubernetes 架构图

在这里插入图片描述


关键关系说明

  1. 物理服务器层

    • 提供硬件资源(CPU/内存/存储/网络)。
    • 每台物理机部署一个角色:
      • Master 节点:运行控制平面组件(API Server、Scheduler 等)。
      • Worker 节点:运行应用负载(Pod)。
  2. K8s 集群层

    • Master 节点
      • API Server:接收用户或工具(如 kubectl)的指令。
      • Scheduler:决定 Pod 运行在哪个 Worker 节点。
      • etcd:存储集群状态(如 Pod、Service 配置)。
    • Worker 节点
      • kubelet:与 Master 通信,管理 Pod 生命周期。
      • kube-proxy:处理节点上的网络规则(Service 流量转发)。
      • Pod:最小调度单元,包含一个或多个容器。
  3. 应用层

    • 每个 Pod 中运行具体的容器化应用(如 Nginx、MySQL)。
    • 应用通过 Service 或 Ingress 暴露给外部访问。

交互流程示例

  1. 用户部署应用

    • 用户通过 kubectl apply -f app.yaml 提交请求到 API Server。
    • Scheduler 根据资源情况,将 Pod 分配到 Node1 或 Node2。
    • 目标节点的 kubelet 拉取镜像并启动容器。
  2. 应用访问

    • 其他 Pod 或外部用户通过 Service(如 ClusterIP)访问应用。
    • kube-proxy 负责将请求转发到具体的 Pod。
  3. 高可用性

    • 若 Node1 宕机,Master 检测到故障后,会在 Node2 上重新调度 Pod。

注意事项

  1. 物理机与 K8s 节点的映射

    • 生产环境中,建议 Master 节点独占物理机(避免资源竞争)。
    • Worker 节点可以跨多台物理机,提高容灾能力。
  2. 网络要求

    • 所有物理机需在同一网络,确保 Pod 间可通信。
    • 避免防火墙阻断 K8s 组件端口(如 6443、10250)。
  3. 存储卷

    • 如果应用需要持久化数据,需挂载物理机的存储(如 NFS)或云存储(如 AWS EBS)。

通过此架构图,可以清晰看到:
物理机提供资源 → K8s 管理调度 → 应用运行在 Pod 中
实际部署时,还需考虑网络插件(如 Calico)、负载均衡(如 MetalLB)等组件。


二、使用步骤

1. 安装与初始化
  • 安装工具:kubectlminikube(本地测试)或 kubeadm(生产集群)。
  • 初始化集群(以 kubeadm 为例):
    kubeadm init --apiserver-advertise-address=<MASTER_IP>
    
  • 加入 Worker 节点:
    kubeadm join <MASTER_IP>:6443 --token <TOKEN>
    
2. 部署应用
  • 编写 YAML 文件(例如 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 deployment.yaml
    
3. 暴露服务
  • 创建 Service:
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    
4. 监控与维护
  • 查看资源状态:
    kubectl get pods,svc,deployments
    
  • 日志与调试:
    kubectl logs <pod-name>
    kubectl describe pod <pod-name>
    

三、注意事项

  1. 资源规划

    • 确保 Node 资源(CPU、内存)充足,避免 Pod 因资源不足被驱逐。
    • 使用 Resource Requests/Limits 限制容器资源占用:
      resources:
        requests:
          cpu: "100m"
          memory: "256Mi"
        limits:
          cpu: "500m"
          memory: "1Gi"
      
  2. 高可用性

    • 生产环境需部署多 Master 节点,避免单点故障。
    • 使用 Horizontal Pod Autoscaler (HPA) 自动扩缩容。
  3. 安全实践

    • 启用 RBAC 控制权限,避免过度授权。
    • 定期更新 k8s 版本,修复安全漏洞。
    • 敏感数据使用 Secret 而非 ConfigMap。
  4. 网络与存储

    • 选择适合的 CNI 插件(如 Calico、Flannel)解决网络隔离。
    • 持久化存储使用 PersistentVolume (PV)PersistentVolumeClaim (PVC)
  5. 故障排查

    • 常见问题:
      • Pod 一直 Pending:检查资源或调度约束。
      • CrashLoopBackOff:查看容器日志排查应用错误。
    • 使用 kubectl events 查看集群事件。
  6. 备份与恢复

    • 定期备份 etcd 数据:
      etcdctl snapshot save backup.db
      

四、常用命令速查

功能 命令示例
查看 Pod kubectl get pods -A
进入容器 kubectl exec -it <pod> -- bash
删除资源 kubectl delete -f file.yaml
查看 Service kubectl get svc
滚动更新 kubectl set image deploy/nginx nginx=nginx:1.20

通过理解这些原理和步骤,可以高效使用 k8s 管理容器化应用。生产环境中建议结合监控工具(Prometheus)和日志系统(ELK)完善运维体系。


网站公告

今日签到

点亮在社区的每一天
去签到