为什么 "kubectl get" 的 YAML 与 GKE 中 "kubectl apply" 的 YAML 如此不同?

Why is the YAML of "kubectl get" so different from the YAML of "kubectl apply" in GKE?

我有一个 GKE 集群。

我使用 kubectl apply 从我的本地计算机应用以下 YAML:

apiVersion: v1
kind: Service
metadata:
  name: flask-app-svc
  namespace: myapp
spec:
  ports:
  - port: 5000
    targetPort: 5000
  selector:
    component: flask-app

已申请。都好。 ✅


然后我使用 kubectl get service 从集群中取回 YAML。它返回了这个:

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/neg: '{"ingress":true}'
    cloud.google.com/neg-status: '{"network_endpoint_groups":{"5000":"k8s1-5fe0c3c1-myapp-flask-app-svc-5000-837dba94"},"zones":["asia-southeast1-a"]}'
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"flask-app-svc","namespace":"myapp"},"spec":{"ports":[{"port":5000,"targetPort":5000}],"selector":{"component":"flask-app"}}}
  creationTimestamp: "2021-10-29T14:40:49Z"
  name: flask-app-svc
  namespace: myapp
  resourceVersion: "242820340"
  uid: ad80f634-5aab-4147-8f71-11ccc44fd867
spec:
  clusterIP: 10.22.52.180
  clusterIPs:
  - 10.22.52.180
  ports:
  - port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    component: flask-app
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

1。什么 kubernetes“概念”在这里发挥作用?

2。为什么 2 个 YAML 彼此如此不同?

3。幕后发生了什么?

4。这是 GKE 特有的,还是任何 k8s 集群都会这样?

5。我在哪里可以找到一些 info/articles 来了解更多关于这个概念的信息?


提前谢谢你。

一段时间以来,我一直在努力解决这个问题。感谢您在这里建议和建议的任何帮助。

A service in GKE 是一种向预期最终用户公开的方法,即一组 pods 中的那些应用程序 运行。所有这些元素构成了 GKE 集群的一部分。 如果您应用 YAML 来创建服务,则需要几个额外的文件才能让您的用户访问应用程序。 kubernetes 和 GKE 的功能之一是自动创建、设置和维护所需的资源,例如在本例中创建服务。 GKE 所做的所有这些额外设置和定义都记录在 YAML 文件中。

如果你能进一步了解这个概念,可以从Google Kubernetes Engine product page, or consult in this same page the GKE documentation. Another good point to start is to read this GKE overview开始。

Kubernetes API 服务器验证并配置 API 对象的数据,其中包括 pods、服务、复制控制器等。 API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端,所有其他组件通过它进行交互。 API 服务器采用用户提供的定义来创建创建所需对象所需的所有详细定义。在 this document 中,您可以找到 GKE API 服务器引擎的概述。

您可以找到一个 example on this document about a create operation。您可以在请求输入和为 API 服务器生成的响应之间切换,以创建所需对象的完整定义、其参数、元数据以及您在“扩展”版本中看到的所有相关配置参数原始 yaml 文件。 在同一文档中,您可以找到有关此主题的更多信息。