Как изменить развертывание без изменения файла вручную?
Я определил развертывание для своего приложения:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: 172.20.34.206:5000/myapp_img:2.0
ports:
- containerPort: 8080
Теперь, если я хочу обновить образ приложения 2.0 до 3.0, я делаю это:
-
$ kubectl edit deployment/myapp-deployment
-
vim
открыт. Я меняю версию изображения с 2.0 на 3.0 и сохраняю.
Как это можно автоматизировать? Есть ли способ сделать это, просто выполнив команду? Что-то вроде:
$ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
Я думал, используя Kubernetes API REST, но я не понимаю документацию .
Ответы
Ответ 1
Вы можете сделать это через REST API с помощью PATCH verb. Однако более простым способом является использование патча kubectl. Следующая команда обновляет тэг приложения:
kubectl patch deployment myapp-deployment -p \
'{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"172.20.34.206:5000/myapp:img:3.0"}]}}}}'
Согласно документации, формат YAML также должен быть принят. См. вопрос Kubernetes # 458, хотя (и, в частности, этот комментарий), которые могут намекнуть на проблему.
Ответ 2
Существует команда set image
, которая может быть полезна в простых случаях
Обновить существующий образ (-ы) контейнера. Возможные ресурсы включают (без учета регистра): pod (po), репликационный контроллер (rc), развертывание (развертывание), daemonset (ds), job, replicaset (rs)
kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
http://kubernetes.io/docs/user-guide/kubectl/kubectl_set_image/
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment "nginx-deployment" image updated
http://kubernetes.io/docs/user-guide/deployments/
Ответ 3
(я бы разместил это как комментарий, если бы у меня была достаточно репутации)
Да, согласно http://kubernetes.io/docs/user-guide/kubectl/kubectl_patch/ принимаются как форматы JSON, так и YAML.
Но я вижу, что на всех примерах используется формат JSON.
Подано https://github.com/kubernetes/kubernetes.github.io/issues/458, чтобы добавить пример формата YAML.
Ответ 4
Недавно я создал инструмент для автоматизации обновлений развертывания при наличии новых изображений, он работает с Kubernetes и Helm:
https://github.com/rusenask/keel
Вам нужно только обозначить свои развертывания политикой Keel, например keel.sh/policy=major
, чтобы включить основные обновления версий, больше информации в readme. Работает аналогично Helm, никаких дополнительных CLI/UI не требуется.