Розширене налаштування Helm Chart

Передумови

Перед початком перевірте наступні передумови:

  1. Завантажте реліз Istio.
  2. Виконайте будь-які необхідні специфічні налаштування платформи.
  3. Перевірте Вимоги до Podʼів та Сервісів.
  4. Використання helm для установки Istio.
  5. Версія Helm, яка підтримує пост-рендеринг (>= 3.1).
  6. kubectl або kustomize.

Розширені налаштування Helm Chart

Helm chart для Istio намагається включити більшість атрибутів, необхідних користувачам для їх специфічних вимог. Однак він не містить кожного можливого значення Kubernetes, яке ви можете захотіти налаштувати. Хоча практично неможливо реалізувати такий механізм, в цьому документі ми покажемо метод, який дозволить вам здійснювати розширене налаштування Helm чарту без необхідності безпосередньо модифікувати Helm чарт Istio.

Використання Helm з kustomize для пост-рендерингу Istio charts

Використовуючи можливість post-renderer Helm, ви можете легко налаштувати маніфести установки відповідно до ваших вимог. Пост-рендеринг надає гнучкість для маніпулювання, налаштування і/або перевірки створених маніфестів перед їх установкою за допомогою Helm. Це дозволяє користувачам з розширеними потребами в конфігурації використовувати такі інструменти, як Kustomize, для застосування змін конфігурації без потреби у додатковій підтримці від оригінальних розробників чартів.

Додавання значення до наявного чарту

У цьому прикладі ми додамо значення sysctl до розгортання ingress-gateway Istio. Ми збираємось:

  1. Створити шаблон патча налаштування sysctl для розгортання.
  2. Застосувати патч за допомогою пост-рендерингу Helm.
  3. Перевірити, що патч sysctl був правильно застосований до podʼів.

Створення Kustomization

Спочатку створимо файл патча sysctl, додавши securityContext до podʼа ingress-gateway з додатковим атрибутом:

$ cat > sysctl-ingress-gw-customization.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: istio-ingress
  namespace: istio-ingress
spec:
  template:
    spec:
      securityContext:
          sysctls:
          - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
            value: "10"
EOF

Нижче наведений сценарій оболонки допомагає зʼєднати Helm post-renderer та Kustomize, оскільки перший працює з stdin/stdout, а другий працює з файлами.

$ cat > kustomize.sh <<EOF
#!/bin/sh
cat > base.yaml
exec kubectl kustomize # також можна використовувати "kustomize build .", якщо у вас його встановлено.
EOF
$ chmod +x ./kustomize.sh

Нарешті, створимо файл kustomization.yaml, який є вхідним для kustomize зі списком ресурсів та супутніми деталями налаштування.

$ cat > kustomization.yaml <<EOF
resources:
- base.yaml
patchesStrategicMerge:
- sysctl-ingress-gw-customization.yaml
EOF

Застосування Kustomization

Тепер, коли файл Kustomization готовий, використаємо Helm, щоб переконатися, що він буде застосований належним чином.

Додати репозиторій Helm для Istio

$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update

Рендеринг та перевірка за допомогою Helm Template

Ми можемо використовувати Helm post-renderer, щоб перевірити створені маніфести перед їх установкою за допомогою Helm.

$ helm template istio-ingress istio/gateway --namespace istio-ingress --post-renderer ./kustomize.sh | grep -B 2 -A 1 netfilter.nf_conntrack_tcp_timeout_close_wait

У виводі перевірте новий атрибут sysctl для podʼа ingress-gateway:

securityContext:
  sysctls:
  - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
    value: "10"

Застосування патча за допомогою Helm Post-Renderer

Використовуйте наступну команду для установки ingress-gateway Istio, застосовуючи наше налаштування за допомогою Helm post-renderer:

$ kubectl create ns istio-ingress
$ helm upgrade -i istio-ingress istio/gateway --namespace istio-ingress --wait --post-renderer ./kustomize.sh

Перевірка Kustomization

Перевірте розгортання ingress-gateway, ви побачите нове змінене значення sysctl:

$ kubectl -n istio-ingress get deployment istio-ingress -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  …
  name: istio-ingress
  namespace: istio-ingress
spec:
  template:
    metadata:
      …
    spec:
      securityContext:
        sysctls:
        - name: net.netfilter.nf_conntrack_tcp_timeout_close_wait
          value: "10"

Додаткова інформація

Для отримання детальнішої інформації про концепції та техніки, описані в цьому документі, будь ласка, зверніться до:

  1. IstioOperator — Налаштування установки
  2. Розширені техніки Helm
  3. Kustomize
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!