我正面临着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问题:
答案 0 :(得分:2)
我在kubernetes问题页面上得到了以下答案:
更新现有对象时,kubectl apply不会发送整个对象,而只是发送补丁。以空运行模式打印现有对象或新对象并不是完全正确的……合并的结果就是应该打印的内容。
要使kubectl能够准确反映应用结果,就需要让服务器端应用逻辑客户端(这是非目标)。
当前的工作方向是将应用逻辑移至服务器。作为其一部分,已添加了对服务器端进行空运行的功能。
kubectl apply --server-dry-run
将执行您想要的操作,打印应用合并的结果,而无需实际保留。@apelisse我们应该更新标志帮助以进行申请,并在使用--dry-run时打印警告,并通过应用来记录--dry-run的局限性并指导人们使用--server来更新对象-空运行