如何获取容器内的所有副本集名称

问题描述

请考虑此example中提供的以下doc

我想要实现的是从容器内部查看3个副本名称。 在this guide之后,我可以获取当前的Pod名称,但是我还需要从副本中获得Pod名称

理想情况下,我想:

print(k8s.get_my_replicaset_names())

print(os.getenv("MY_replicaset"))

,结果如下:

[frontend-b2zdv,frontend-vcmts,frontend-wtsmm]

这是所有容器副本的pod名称(当然也是当前容器),并最终比较名称列表中的当前名称以在列表中获取我的索引。

有什么办法可以做到这一点?

解决方法

您可以阅读here向下API 用于将PodContainer字段公开给正在运行的Container:

有两种方法可以将Pod和Container字段暴露给正在运行的 容器:

这两种公开Pod和Container字段的方式在一起是 称为向下API

这并不意味着公开有关管理此类ReplicaSet的其他对象/资源(例如DeploymentPod)的任何信息。

通过执行以下操作,您可以确切地看到包含yaml清单的哪些字段描述了正在运行的Pod

kubectl get pods <pod_name> -o yaml

其输出的示例片段可能如下所示:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    <some annotations here>
    ...
  creationTimestamp: "2020-10-08T22:18:03Z"
  generateName: nginx-deployment-7bffc778db-
  labels:
    app: nginx
    pod-template-hash: 7bffc778db
  name: nginx-deployment-7bffc778db-8fzrz
  namespace: default
  ownerReferences: ?
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet ?
    name: nginx-deployment-7bffc778db ?
 ...

如您所见,在metadata部分中,它包含ownerReferences,在上面的示例中,该引用包含对ReplicaSet对象的引用,该Pod被管理。因此,您可以很容易地获得这个特定的ReplicaSet名称,因为它是Pod yaml清单中的一部分。

但是,您无法通过这种方式获得与此Pods管理的其他ReplicaSet相关的信息。

只能通过 kubectl 客户端或以编程方式直接调用API来从 api服务器获得此类信息。