Первое, что приходит в голову, когда речь идёт про обновление YAML-файлов — использовать
sed
, awk
или perl
и т.п. Но если использовать встроенную функцию Kubectl patch
, дело пойдёт значительно проще. Команда VK Cloud перевела статью о более простом способе обновления YAML-файлов.Допустим, нам нужно обновить количество реплик в представленной ниже
spec
, а также версию образа контейнера Nginx. Для этого нужно обновить несколько строк, поэтому другие опции в нашем случае нерелевантны.apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Применим файл
kubectl apply -f https://k8s.io/examples/application/deployment.yaml.
Локально создадим файл с именем patch.yaml и следующим содержимым:
spec:
selector:
matchLabels:
app: nginx
replicas: 3 # Update the number replicas from 2 to 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1
ports:
- containerPort: 80
Исправим
deployment
с помощью команды:kubectl patch deployment/nginx-deployment --patch "$(cat patch.yaml)"
Когда вы увидите сообщение
deployment.apps/nginx-deployment patched.
, выполните команды:Kubectl get deployments
# NAME READY UP-TO-DATE AVAILABLE AGE
#nginx-deployment 3/3 3 3 3hkubectl get deployment nginx-deployment -o yaml
Начинайте искать предыдущую конфигурацию, которую вы заменили:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},"spec":{"replicas":2,"selector":{"matchLabels":{"app":"nginx"}},"template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx","ports":[{"containerPort":80}]}]}}}}
Попробуйте Kubernetes as a Service на платформе VK Cloud. Мы даем новым пользователям 3000 бонусных рублей на тестирование кластера или любых других сервисов.
Stay tuned
Присоединяйтесь к телеграм-каналу «Вокруг Kubernetes», чтобы быть в курсе новостей из мира K8s!
Регулярные дайджесты, полезные статьи, а также анонсы конференций и вебинаров.
t.me/+cWY7eMrhzNVmMmQy
Комментарии (6)
DesertEagle
00.00.0000 00:00И чем это быстрее/лучше/проще edit deployment?
dr_duke
00.00.0000 00:00Воспроизводимость, видно что именно поменяли. Вариант с патчем можно в автоматизации пихать. Но статья, конечно, мое почтение! Уровень - даже не «мы перевели документацию». Про kustomize автору не рассказывайте.
Chupaka
00.00.0000 00:00И всё же, как быстро и просто обновлять YAML-файлы? Один я не увидел ни одного обновлённого .yaml в статье?..
zradeg
00.00.0000 00:00Получается, вы создали полную версию файла, который и можно было бы использовать. Таким образом, здесь kubectl patch является лишним действием.
Но предположу, что эта команда может оказаться полезной в какой-нибудь автоматизации, например, при массовом обновлении configmap.
yarkov
Мне одному кажется, что это стрельба из пушки по воробьям?