跳转到内容

Kubernetes术语

来自代码酷

Kubernetes术语[编辑 | 编辑源代码]

Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。理解Kubernetes的核心术语是掌握其工作原理的基础。本文将详细介绍Kubernetes中的关键术语,帮助初学者和高级用户更好地理解和使用Kubernetes。

核心概念[编辑 | 编辑源代码]

1. Pod[编辑 | 编辑源代码]

Pod是Kubernetes中最小的可部署单元,由一个或多个容器组成,共享存储、网络和运行上下文。Pod中的容器总是被调度到同一节点上运行。

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

解释:

  • 上述YAML定义了一个名为`nginx-pod`的Pod,其中运行一个`nginx`容器。
  • `containerPort: 80`表示容器暴露的端口为80。

2. Node[编辑 | 编辑源代码]

Node是Kubernetes集群中的工作节点,可以是物理机或虚拟机。每个Node运行以下组件:

  • Kubelet:负责与主节点通信并管理容器。
  • 容器运行时(如Docker):运行容器。
  • Kube-proxy:管理网络规则。

graph TD Master[Master Node] -->|Manages| Node1[Worker Node 1] Master -->|Manages| Node2[Worker Node 2] Node1 -->|Runs| Pod1[Pod] Node2 -->|Runs| Pod2[Pod]

3. Deployment[编辑 | 编辑源代码]

Deployment用于定义Pod的期望状态,并管理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:latest
        ports:
        - containerPort: 80

解释:

  • `replicas: 3`表示运行3个Pod副本。
  • `selector.matchLabels`用于匹配Pod的标签。

4. Service[编辑 | 编辑源代码]

Service定义了一组Pod的访问策略,通常用于负载均衡和暴露服务。

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

解释:

  • `selector.app: nginx`匹配所有标签为`app: nginx`的Pod。
  • `type: ClusterIP`表示服务仅在集群内部可访问。

5. Namespace[编辑 | 编辑源代码]

Namespace用于在同一个Kubernetes集群中划分逻辑分区,实现资源隔离。

kubectl create namespace dev
kubectl get namespaces

输出:

NAME          STATUS   AGE
default       Active   1d
dev           Active   5s
kube-system   Active   1d

高级术语[编辑 | 编辑源代码]

1. ConfigMap和Secret[编辑 | 编辑源代码]

ConfigMap用于存储非敏感配置数据,而Secret用于存储敏感信息(如密码、密钥)。

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_url: "mysql://db.example.com"
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  password: cGFzc3dvcmQ=  # Base64编码的"password"

2. Ingress[编辑 | 编辑源代码]

Ingress用于管理外部访问集群服务的规则,通常与Ingress Controller(如Nginx或Traefik)配合使用。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

解释:

  • 上述配置将所有访问`example.com`的流量路由到`nginx-service`。

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

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

1. 使用Deployment定义应用副本。 2. 使用Service暴露应用。 3. 使用Ingress配置域名访问。

graph LR User -->|访问 example.com| Ingress Ingress -->|路由| Service Service -->|负载均衡| Pod1 Service -->|负载均衡| Pod2 Service -->|负载均衡| Pod3

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

Kubernetes术语是理解和使用Kubernetes的基础。从Pod、Node到Deployment、Service,再到高级概念如ConfigMap和Ingress,每个术语都有其特定的用途和配置方式。通过实际案例和代码示例,希望读者能够更好地掌握这些概念。