Миграция из развертывания в Кубернетесе в Хелм

Недавно мы перешли от простого развертывания в 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"

Кроме того, вы можете найти эту статью полезной:

Другие вопросы по тегам