【问题标题】:Kubernetes (GKE) names , labels, selectors, matchLables in manifest files清单文件中的 Kubernetes (GKE) 名称、标签、选择器、匹配标签
【发布时间】:2023-02-05 04:03:18
【问题描述】:

我有一个关于标签和名称的问题,在此示例清单文件中

api版本:应用程序/v

1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

我可以看到部署名称是“nginx部署”和吊舱名称是“nginx”?还是正在运行的容器? 然后我在控制台中看到 pod 的名称末尾附加了一个散列,我相信这是修订号? 我只想破译名字来自标签来自匹配标签,例如,我可以使用此服务清单来公开带有特定标签的 pod:

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

此服务是否会公开所有带有选择器:应用程序:nginx ?

谢谢

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    部署具有您指定的名称“nginx-deployment”。

    但是,您没有定义具有固定名称的 Pod,而是为此部署管理的 Pod 定义了一个模板。

    Deployment 管理 3 个 pod(因为你的 replicas 3),所以它将使用模板来构建这三个 pod。

    还将有一个带有哈希的副本集,这将管理 Pod,但通过下面的示例可以更好地理解这一点。

    由于一个部署可以管理多个 pod(比如你的例子有 3 个副本)或者在更新它们时需要一个新的 Pod,一个部署不会完全使用模板中指定的名称,但总是会向它附加一个哈希值以保持它们的唯一性.

    但是现在你会遇到将所有 Pod 负载均衡在一个 Kubernetes 服务后面的问题,因为它们有不同的名称。

    这就是您在模板中定义标签“app:nginx”的原因,这样所有 3 个 Pod 都将具有此标签,而不管 Kubernetes 设置的名称和其他标签。

    该服务使用选择器来找到正确的 Pod。在您的情况下,它将通过标签“app:nginx”搜索它们。

    所以是的,该服务将公开您部署的所有 3 个 Pod,并将在它们之间负载均衡器流量。

    您可以使用 --show-labelskubectl get pods 来查看名称和分配的标签。

    有关更完整的示例,请参见: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 2021-09-15
      • 1970-01-01
      相关资源
      最近更新 更多