Kubernetes控制吊舱名称

时间:2020-07-10 10:09:19

标签: kubernetes

Kubernetes是一个非常复杂的工具,但是我们当中有些人还很粗糙,因此我们遇到了麻烦。

我正在尝试在集群中的Pod上运行一个简单的kubernetes作业,并且在kubernetes yaml配置文件中,我在元数据下定义了pod的名称,例如

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job

然后,当我创建此作业时,我看到吊舱的名称并不是我真正的工作。 是:

my-job-'randomstuff' 

我知道这对于副本集和其他内容非常酷,但是我需要将pod命名为我告诉它的命名方式,因为我在以后的回调函数中使用了该名称。

在我看来,很奇怪,我无法完全控制要在创建Pod时调用的容器。

我告诉自己这是有可能的,但是我已经疯狂搜索了一个小时。

非常感谢您提供任何想法:)

3 个答案:

答案 0 :(得分:3)

Jobs被设计为具有随机后缀,因为它们可能具有多个补全。

示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  completions: 5
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4   

如您所见,此作业将执行到获得5场比赛为止,并且如果名称没有附加随机后缀,则将无法执行。检查示例的Job的执行结果:

$ kubectl get pods 
NAME                            READY   STATUS      RESTARTS   AGE

pi-7mx4k                        0/1     Completed   0          3m9s
pi-bfw6p                        0/1     Completed   0          3m17s
pi-ls9lh                        0/1     Completed   0          3m43s
pi-njfpq                        0/1     Completed   0          3m35s
pi-ssn68                        0/1     Completed   0          3m27s

因此,您的问题的答案是否定的,您不能强迫它使用“固定”名称。

如果您需要控制名称,请考虑使用Pod(实物Pod)。

答案 1 :(得分:0)

请问自己以下问题:

  1. 从事什么工作?
  2. 谁应该与谁沟通?作业可以与其他人(服务,外部,...)进行通信,或者其他人可以与Job进行通信。

工作是临时过程/临时容器。它的设计目的是在Job :)工作完成后完成。

由于它是短暂的(临时的),因此预期会影响到其他人,而不是其他人会到达它。

如果我们对此表示同意,则为Job创建的pod分配确切名称应该没用。

如果您坚持认为有些极端情况,其他人正在等待这项工作,以便他们可以与它的吊舱通信。在这种情况下,请考虑在此窗格的前面使用服务(种类:服务)。


可行吗?是的。

这有意义吗?不。

答案 2 :(得分:0)

根据您在回调函数中要实现的目标,可以采用其他方法来解决它。

例如,您可以在容器上添加任何标签或注释,然后在回调函数中使用它们来引用该容器或一组具有相同标签或注释的容器。