跳转到内容

Kubernetes基本概念

来自代码酷

Kubernetes基本概念[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它由 Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF)。Kubernetes 提供了一套强大的工具来管理分布式系统,确保高可用性、可扩展性和资源效率。

本节将介绍 Kubernetes 的核心概念,帮助初学者和高级用户理解其基本架构和工作原理。

核心组件[编辑 | 编辑源代码]

Kubernetes 由多个组件组成,共同协作以管理容器化应用。以下是关键组件:

控制平面(Control Plane)[编辑 | 编辑源代码]

控制平面负责集群的全局决策和调度,包括以下核心组件:

  • API Server:Kubernetes 的入口点,处理所有 REST 请求。
  • Scheduler:决定将 Pod 分配到哪个节点运行。
  • Controller Manager:运行控制器(如 Deployment、ReplicaSet 控制器),确保集群状态符合预期。
  • etcd:分布式键值存储,保存集群的所有配置数据。

工作节点(Worker Node)[编辑 | 编辑源代码]

工作节点是运行容器化应用的机器,包含以下组件:

  • kubelet:与 API Server 通信,管理节点上的 Pod 和容器。
  • kube-proxy:处理网络规则和负载均衡。
  • 容器运行时(如 Docker、containerd):负责运行容器。

graph TD A[Control Plane] -->|Manages| B[Worker Nodes] A --> C[API Server] A --> D[Scheduler] A --> E[Controller Manager] A --> F[etcd] B --> G[kubelet] B --> H[kube-proxy] B --> I[Container Runtime]

基本对象[编辑 | 编辑源代码]

Kubernetes 使用声明式对象模型管理资源。以下是核心对象:

Pod[编辑 | 编辑源代码]

Pod 是 Kubernetes 的最小部署单元,包含一个或多个共享网络和存储的容器。

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

Deployment[编辑 | 编辑源代码]

Deployment 管理 Pod 的声明式更新,支持滚动升级和回滚。

  
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:1.21  
        ports:  
        - containerPort: 80

Service[编辑 | 编辑源代码]

Service 提供稳定的 IP 和 DNS 名称,用于访问一组 Pod。

  
apiVersion: v1  
kind: Service  
metadata:  
  name: nginx-service  
spec:  
  selector:  
    app: nginx  
  ports:  
    - protocol: TCP  
      port: 80  
      targetPort: 80  
  type: LoadBalancer

实际案例[编辑 | 编辑源代码]

场景:部署 Web 应用[编辑 | 编辑源代码]

1. 使用 Deployment 创建 3 个 Nginx Pod 副本。 2. 通过 Service 暴露应用,使外部用户可通过负载均衡器访问。

执行以下命令查看状态:

  
kubectl get pods  
kubectl get services

输出示例:

  
NAME                                READY   STATUS    RESTARTS   AGE  
nginx-deployment-756d9fd5f9-2j4r7   1/1     Running   0          1m  
nginx-deployment-756d9fd5f9-5h6w8   1/1     Running   0          1m  
nginx-deployment-756d9fd5f9-9k8q2   1/1     Running   0          1m  

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE  
nginx-service      LoadBalancer   10.96.100.101   203.0.113.10    80:30001/TCP   1m  

扩展知识[编辑 | 编辑源代码]

  • 命名空间(Namespace):用于逻辑隔离集群资源(如 `kubectl create namespace dev`)。
  • ConfigMap 和 Secret:分别管理配置数据和敏感信息。
  • Horizontal Pod Autoscaler(HPA):根据 CPU 使用率自动扩展 Pod。

数学公式示例(资源请求计算): Total CPU Request=i=1nPod CPU Requesti

总结[编辑 | 编辑源代码]

Kubernetes 通过控制平面和工作节点协作,以 Pod、Deployment 和 Service 等对象为核心,实现容器化应用的高效管理。掌握这些基本概念是进一步学习高级主题(如 Helm、Operator)的基础。