Недавно мы перешли от развертывания чисто кубернетов к развертыванию диаграммы управления для одного из наших приложений.
Я пытаюсь найти способ перенести кластер, в котором в настоящее время выполняется старое развертывание, на новую схему управления.
У меня проблема из-за того, что диаграмма руля не будет правильно установлена, если в кластере есть ресурсы, такие же, как те, которые он устанавливает. Например, у меня есть сервис, который выглядит так
$ 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"
Также вам может быть полезна эта статья: