问题描述
我想要实现的是从容器内部查看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 用于将Pod
和Container
字段公开给正在运行的Container:
有两种方法可以将Pod和Container字段暴露给正在运行的 容器:
- 环境变量
- Volume Files
这两种公开Pod和Container字段的方式在一起是 称为向下API 。
这并不意味着公开有关管理此类ReplicaSet
的其他对象/资源(例如Deployment
或Pod
)的任何信息。
通过执行以下操作,您可以确切地看到包含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服务器获得此类信息。