kubectl应用-奇怪的空运行

时间:2019-01-07 12:47:52

标签: kubernetes kubectl minikube kubernetes-apiserver

我正面临着kubectl和--dry-run的怪异行为。

为简单起见,我们有以下yaml文件:

var foo = ["one", "two", "three"];
//without destructuring
var one = foo[0];
var two = foo[1];
var three = foo[2];

修改图像或副本数:

  • apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: run: nginx name: nginx spec: replicas: 3 selector: matchLabels: run: nginx strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: creationTimestamp: null labels: run: nginx spec: containers: - image: nginxsdf imagePullPolicy: Always name: nginx 向我输出具有 OLD 规范

  • 的资源
  • kubectl apply -f Deployment.yaml -o yaml --dry-run向我输出具有 NEW 规范

  • 的资源

根据文档:

  

-dry-run = false:如果为true,则仅打印将要发送的对象,而不发送它。

但是打印的对象是旧对象,而不是将被发送到ApiServer的对象

在minikube,gke v1.10.0上测试

同时,我为此打开了一个新的gitHub问题:

1 个答案:

答案 0 :(得分:2)

我在kubernetes问题页面上得到了以下答案:

  

更新现有对象时,kubectl apply不会发送整个对象,而只是发送补丁。以空运行模式打印现有对象或新对象并不是完全正确的……合并的结果就是应该打印的内容。

     

要使kubectl能够准确反映应用结果,就需要让服务器端应用逻辑客户端(这是非目标)。

     

当前的工作方向是将应用逻辑移至服务器。作为其一部分,已添加了对服务器端进行空运行的功能。 kubectl apply --server-dry-run将执行您想要的操作,打印应用合并的结果,而无需实际保留。

     

@apelisse我们应该更新标志帮助以进行申请,并在使用--dry-run时打印警告,并通过应用来记录--dry-run的局限性并指导人们使用--server来更新对象-空运行