GOOGLE ADS

понедельник, 25 апреля 2022 г.

Как удалить элемент в Deployment volumeMounts с помощью команды kubectl Patch?

У меня есть такое развертывание:

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

этот обновит ваше развертывание с новой конфигурацией

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...