kubernetes - 如何使用 kubectl Patch 命令删除 Deployment volumeMounts 中的元素?
问题描述
我有这样的部署:
apiVersion: apps/v1
kind: Deployment
spec:
template:
volumeMounts:
- mountPath: /home
name: john-webos-vol
subPath: home
- mountPath: /pkg
name: john-vol
readOnly: true
subPath: school
我想用命令改变 Deloyment ,kubectl patch
所以它有以下内容:volumeMounts
PodTemplate
目标.yaml:
apiVersion: apps/v1
kind: Deployment
spec:
template:
volumeMounts:
- mountPath: /home
name: john-webos-vol
subPath: home
我使用了下面的命令,但是没有用。
kubectl patch deployment sample --patch "$(cat target.yaml)"
谁能给我一些建议?
解决方案
你不能用kubectl patch
. 您在问题中所做的补丁称为strategic merge patch
. 补丁不能替换东西,而这个补丁只能添加东西。
就像如果你最初有一个container
,podspec
但你需要添加另一个container
。您可以使用patch
此处添加另一个container
. 但是如果你有两个container
并且需要删除一个,你不能用这种补丁来做到这一点。
如果你想这样做,patch
你需要使用retainKeys
. 参考
让我解释一下如何以另一种简单的方式做到这一点。假设您已在 test.yaml 下应用
kubectl apply -f test.yaml
测试.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
volumeMounts:
- mountPath: /home
name: john-webos-vol
subPath: home
- mountPath: /pkg
name: john-vol
readOnly: true
subPath: school
volumes:
- name: john-webos-vol
emptyDir: {}
- name: john-vol
emptyDir: {}
现在你需要更新这个。并且更新的一个target.yaml将删除一个 volume 。
目标.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
volumeMounts:
- mountPath: /pkg
name: john-vol
readOnly: true
subPath: school
volumes:
- name: john-vol
emptyDir: {}
你可以使用:
kubectl apply -f target.yaml
这将使用新配置更新您的部署
推荐阅读
- testng - 无法从类中获取 TestNG 版本:java.lang.ClassNotFoundException:org.testng.internal.Version
- google-apps-script - 将多个工作表导出到多个 PDF 并添加到 Sendmail 作为 HTML 正文的附件
- scala - 如何在 Scala 中创建模拟对象?
- php - 在 laravel 应用程序中实现适配器设计模式
- android - 在 Android 中为 StaggeredGridlayoutManager 的间隙填充颜色
- python-3.x - 有没有办法在 tkinter 的 for 循环中创建一个 get 方法
- php - 从 cookie 设置会话变量是个好主意吗?
- docker - 我在哪里可以找到这个 golang 图像的 windows 版本的名称?
- javascript - 如何将尾随元数据从 python gRPC 服务发送到 grpc-web 客户端?
- c - 在C中将文本文件的特定部分作为字符串读取?