如何在kubernetes中设置部署副本的不同环境变量

hxi*_*dkd 6 deployment environment-variables kubernetes kubernetes-deployment

现在通过将 Deployment 的副本设置为 4,我有 4 个 k8s pod。

apiVersion: v1
kind: Deployment
metadata:
  ...
spec:
  ...
  replicas: 4
...
Run Code Online (Sandbox Code Playgroud)

POD将获取数据库中的项目并使用它,数据库中的项目有一个列class_name

现在我想要一个 Pod 只能获取一个class_name项目。例如pod1仅获取class_name等于的项目class_name_1,并且pod2仅获取class_name等于class_name_2...的项目

所以我想将不同的class_name环境变量传递给不同的部署 POD。可以在Deployment的yaml文件中定义吗?

或者还有其他方法可以实现我的目标吗?(比如除了 k8s 中的部署之外的其他方法)

Vas*_*pov 2

对于分布式作业处理部署不是很好,因为它们没有任何类型的排序或一致的 pod 主机名。最好使用 StatefulSet,因为它们有一致的命名,如 pod-0、pod-1、pod-2。您可以依赖该主机名索引。

例如,如果class_name_idx- 是类名列表中类名的索引,num_replicas- 是 StatefulSet 中副本的数量,pod_idx- 是 StatefulSet 中 pod 的索引,那么 pod 仅应在以下情况下运行作业:class_name_idx % num_replicas == pod_idx

不幸的是,无法使用Downward API在 pod 内动态获取 StatefulSet 副本的数量,因此您可以对其进行硬编码或使用 Kubernetes API 从集群中获取它。