【发布时间】:2019-06-02 03:21:14
【问题描述】:
我在使用 kubectl 和 --dry-run 时遇到了一个奇怪的行为。
为了简化,假设我有以下 yaml 文件:
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
修改例如图像或副本数:
kubectl apply -f Deployment.yaml -o yaml --dry-run向我输出具有 OLD 规范的资源kubectl apply -f Deployment.yaml -o yaml输出具有NEW规范的资源
根据文档:
--dry-run=false:如果为true,则只打印要发送的对象,不发送。
但是打印的对象是旧的,而不是发送到 ApiServer 的对象
在 minikube、gke v1.10.0 上测试
与此同时,我为它打开了一个新的 gitHub 问题:
【问题讨论】:
-
是的,我能够重现这种行为并且同样感到惊讶。可能是一个错误,但至少它是糟糕的用户体验。我在 SIG CLI 频道中留下了评论,也许有人看过它并知道这是否是预期的。
-
此外,
create并没有显示这种行为并且输出是预期的。我为它创建了一个 github 问题 -
这是个好主意,也许可以通过问题链接更新您的问题? FWIW,我怀疑
apply的三向合并语义在这里显示了奇怪的副作用,但让我们看看;) -
@MichaelHausenblas 我试图了解使用 -v=10 检查跟踪是如何发生的,但我无处可去
标签: kubernetes kubectl minikube kubernetes-apiserver