kubectl patch
命令可以用于直接修改Kubernetes对象,而无需使用edit
命令。这种方法非常适合在需要更新某些初始化后无法更新的资源字段时使用。
1、合并
- 假设我们有一个名为
nginx-daemonset.yaml
的DaemonSet对象,我们想要在其中添加一个新的容器。
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-daemonsetlabels:app: nginx
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.1ports:- containerPort: 80
- 创建一个名为
patch-file.yaml
的文件,内容如下:
spec:template:spec:containers:- name: patch-demo-ctr-2image: redis
- 使用
kubectl patch
命令更新DaemonSet:
kubectl patch deployment nginx-daemonset --patch "$(cat patch-file.yaml)"
这样,nginx-daemonset
的每个Pod就会有两个容器:一个运行nginx
,另一个运行redis.
2、替换
当然,以下是一个使用kubectl patch进行替换操作的示例1:
假设我们有一个名为my-configmap
的ConfigMap对象,其YAML文件如下:
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap
data:key1: value1key2: value2
我们想要更新key1
的值为new-value
,可以使用以下命令:
kubectl patch configmap my-configmap -p '{"data": {"key1": "new-value"}}'