У меня есть такое развертывание:
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
test.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 удалит один из томов.
target.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
этот обновит ваше развертывание с новой конфигурацией
Комментариев нет:
Отправить комментарий