Назад | Перейти на главную страницу

Переход с развертывания Kubernetes на Helm

Недавно мы перешли от развертывания чисто кубернетов к развертыванию диаграммы управления для одного из наших приложений.

Я пытаюсь найти способ перенести кластер, в котором в настоящее время выполняется старое развертывание, на новую схему управления.

У меня проблема из-за того, что диаграмма руля не будет правильно установлена, если в кластере есть ресурсы, такие же, как те, которые он устанавливает. Например, у меня есть сервис, который выглядит так

$ 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) Можно ли удалить отказавший график из руля без удаления запущенных развертываний?

У вас не должно возникнуть этой проблемы, если вы развертываете свои диаграммы Helm в другом пространстве имен и, убедившись, что все работает должным образом, перенаправляете клиентский трафик в это пространство имен.

Helm использует ConfigMaps для хранения информации об установленных выпусках, поэтому, вероятно, есть способ установить частичную диаграмму, а затем изменить ConfigMap, добавив пропущенные ресурсы, существующие в этом пространстве имен, и изменить диаграмму управления, чтобы включить эти ресурсы в шаблоны диаграмм одновременно. .

Другой способ, который я могу себе представить, это развертывание полной диаграммы в другом пространстве имен, а затем изменение пространства имен в ConfigMap (s), которые tiller создает во время установки диаграммы.

Оба способа являются хакерскими и требуют точных манипуляций, и в конечном итоге вы можете оказаться в разрушенной среде, если допустили ошибку, поэтому лучше сначала попробовать это с тестовой средой и простыми диаграммами.

Чтобы Helm забыл о конкретном выпуске, вы можете удалить соответствующую ConfigMap из пространства имен Tiller.

Вы можете проверить содержимое существующих Helm ConfigMaps, используя следующую команду:

kubectl get configmap -n <tiller-namespace-name> -l "OWNER=TILLER"

Также вам может быть полезна эта статья: