kubectl patch
命令可以用于直接修改Kubernetes对象,而无需使用edit
命令。这种方法非常适合在需要更新某些初始化后无法更新的资源字段时使用。
1、合并
nginx-daemonset.yaml
的DaemonSet对象,我们想要在其中添加一个新的容器。apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.1
ports:
- containerPort: 80
patch-file.yaml
的文件,内容如下:spec:
template:
spec:
containers:
- name: patch-demo-ctr-2
image: 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: value1
key2: value2
我们想要更新key1
的值为new-value
,可以使用以下命令:
kubectl patch configmap my-configmap -p '{"data": {"key1": "new-value"}}'