1.我有两个pod,它们被称为nginx-111-xxx,nginx-111-yyy,但nginx-111-xxx中有错误,我需要创建一个新的pod来替换它,因为需求要求你删除nginx-111-xxx,然后新建一个podnginx-111-zzz,我可以用nginx-111-xxx**重命名nginx-111-zzz吗?我尝试使用kubectl edit命令来实现,
1.但是Kubernetes说 * 您的更改副本已存储到“/tmp/kubectl-edit-oh43e.yaml”错误:apiVersion,kind和name中至少有一个被更改 *,所以是否有方法更改运行pod的名称?x1c 0d1x
2条答案
按热度按时间eoigrqb61#
无法更改运行中的pod的名称,因为API不接受此操作。
实际上,你正在使用Kubernetes部署,这是在Kubernetes上运行pod的默认或最常用的方法。但是,除此之外,还有不同的方法来调度pod。
然而,出于某种原因,您似乎需要更可预测的pod名称。以下是一些方法:
1.使用StatefulSets(https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)。StatefulSet创建的pod的名字会像nginx-01,nginx-02..
1.直接使用pod。这样,你就不会有那些来自副本集、守护进程集等的滚动更新特性,而是对命名有绝对的控制权
nbewdwxp2#
我强烈建议您按照建议使用statefulSet。但是,请记住,编辑正在运行的pod的规格时应谨慎,以避免中断。以下字段可以为现有pod进行编辑:
字符串
要进行更改,您有两个选项:
使用kubectl edit:
运行
kubectl edit pod <pod name>
在vi编辑器中打开pod规范。尝试直接保存更改将被拒绝,但修改后文件的副本将保存在临时位置。使用kubectl delete pod删除现有pod,然后使用kubectl create -f /tmp/kubectl-edit-<random-string>.yaml.
(在您的案例中为kubectl create -f /tmp/kubectl-edit-oh43e.yaml
)创建一个新的pod使用导出的YAML:
使用
kubectl get pod <pod name> -o yaml > my-new-pod.yaml
将pod定义提取到YAML文件中。使用vi (vi my-new-pod.yaml) 编辑导出的文件。保存更改,使用kubectl delete pod删除现有pod,然后使用kubectl create -f my-new-pod.yaml
创建新pod