Client-go - 在使用 client-go 在 Kubernetes 中创建对象之前获取生成的名称
Client-go - Getting the generated name before creating an object in Kubernetes using client-go
假设我有这样的代码来生成新的 pod
req := &api.Pod{
TypeMeta: unversioned.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: api.ObjectMeta{
GenerateName: "name-, // need to get that name, before creating an object
},
Spec: api.PodSpec{
Containers: []api.Container{
{
Name: "nginx",
Image: "nginx",
Env: []corev1.EnvVar{} // pass here the generated name,
},
},
},
}
...
// Do some work on the generated name, before creating the resource in Kubernetes cluster
...
err := client.Create(context.Background(), req)
是否可以在创建对象之前获取生成的名称?或者是否可以将生成的名称存储在同一对象的环境中?
生成的名称似乎是与 apiServer 一起创建的。参见 Issue comment and Kubernetes API Concepts - Generated values。
建议不要依赖。通常,标签和选择器在 Kubernetes 生态系统中更为常见。
Env: []corev1.EnvVar{} // pass here the generated name,
您可以为此使用向下API。
示例:
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
假设我有这样的代码来生成新的 pod
req := &api.Pod{
TypeMeta: unversioned.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: api.ObjectMeta{
GenerateName: "name-, // need to get that name, before creating an object
},
Spec: api.PodSpec{
Containers: []api.Container{
{
Name: "nginx",
Image: "nginx",
Env: []corev1.EnvVar{} // pass here the generated name,
},
},
},
}
...
// Do some work on the generated name, before creating the resource in Kubernetes cluster
...
err := client.Create(context.Background(), req)
是否可以在创建对象之前获取生成的名称?或者是否可以将生成的名称存储在同一对象的环境中?
生成的名称似乎是与 apiServer 一起创建的。参见 Issue comment and Kubernetes API Concepts - Generated values。
建议不要依赖。通常,标签和选择器在 Kubernetes 生态系统中更为常见。
Env: []corev1.EnvVar{} // pass here the generated name,
您可以为此使用向下API。 示例:
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name