Миграция из развертывания в Кубернетесе в Хелм
Недавно мы перешли от простого развертывания в Kubernetes к развертыванию рулевого управления для одного из наших приложений.
Я пытаюсь найти способ миграции кластера, на котором в настоящее время выполняется старое развертывание, для использования новой диаграммы управления.
У меня возникла проблема, потому что диаграмма рулевого управления не будет установлена точно, когда в кластере есть ресурсы, которые совпадают с тем, что он устанавливает. Например, у меня есть сервис, который выглядит так
$ kubectl get service elasticsearch -oyaml
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"creationTimestamp":"2018-01-26T01:39:20Z","labels":{"app":"elasticsearch"},"name":"elasticsearch","namespace":"default","resourceVersion":"18650241","selfLink":"/api/v1/namespaces/default/services/elasticsearch","uid":"bac30dfa-0239-11e8-b7a8-0015b2aa5ea6"},"spec":{"externalName":"100.64.0.100","sessionAffinity":"None","type":"ExternalName"},"status":{"loadBalancer":{}}}
creationTimestamp: 2018-10-04T21:22:06Z
labels:
app: elasticsearch
name: elasticsearch
namespace: default
resourceVersion: "31430"
selfLink: /api/v1/namespaces/default/services/elasticsearch
uid: 8b82157e-c81b-11e8-a0d8-94c69116956d
spec:
externalName: 127.0.0.1
sessionAffinity: None
type: ExternalName
status:
loadBalancer: {}
и у моего руля есть шаблон, который выглядит следующим образом
$ cat elasticsearch.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: elasticsearch
name: elasticsearch
spec:
type: ExternalName
externalName: 127.0.0.1
status:
load_balancer: {}
Если я попытаюсь применить свой график, используя
$ helm install /path/to/chart --name=chart-name
Это не удастся с этой ошибкой
Error: release chart-name failed: services "elasticsearch" already exists
Что еще хуже, даже при неудачной установке диаграмма появится у руля со статусом FAILED. Если я затем удаляю диаграмму, это удалит некоторые из запущенных развертываний.
У меня два вопроса.
1) Как я могу установить свой график и получить контроль над существующим сервисом.
2) Можно ли удалить неисправный график из руля, не удаляя запущенные развертывания?
1 ответ
У вас не должно быть этой проблемы, если вы развернете свои диаграммы Helm в другом пространстве имен и, убедившись, что все работает как положено, перенаправьте трафик клиентов в это пространство имен.
Helm использует ConfigMaps для хранения информации об установленных выпусках, поэтому, возможно, существует возможность установить частичную диаграмму, а затем изменить ConfigMap, добавив пропущенные ресурсы, существующие в этом пространстве имен, и изменить диаграмму helm для одновременного включения этих ресурсов в шаблоны диаграмм.,
Другой способ, который я могу себе представить, - это развернуть полную диаграмму в другом пространстве имен, а затем изменить пространство имен в ConfigMap (s), которые тиллер создает во время установки диаграммы.
Оба способа являются хакерскими и требуют точных манипуляций, и в конечном итоге вы можете получить разрушенную среду, если допустите ошибку, поэтому лучше сначала попробовать ее с тестовой средой и простыми диаграммами.
Чтобы Helm забыл о конкретной версии, вы можете удалить соответствующий ConfigMap из пространства имен Tiller.
Вы можете проверить содержимое существующих Helm ConfigMaps, используя следующую команду:
kubectl get configmap -n <tiller-namespace-name> -l "OWNER=TILLER"
Кроме того, вы можете найти эту статью полезной: