Алексей
Коллеги приветствую. Подскажите по шаблону HELM пожалуйста. Сделал такой вот сложный range c вложенными range соответственно. Но проблема с переменными. {{- range $key, $val := .Values.deployment }} {{- $ServiceName := $key }} {{- if eq $key "worker" }} {{- $ServiceNameEnv := "sentry" }} {{- else }} {{- $ServiceNameEnv := $key }} {{- end }} # первый вложенный range {{- range $key, $val := $item.volumes }} - name: sentry-postgresql-data persistentVolumeClaim: claimName: sentry-postgresql {{- end }} # второй вложенный range {{- range $key, $val:= $env }} {{/*$ServiceNameEnv*/}} {{- if eq $key $ServiceName }} {{- range $key, $val := . }} - name: {{$key}} {{- if . }} value: {{ . }} {{- end }} {{- end }} {{- end }} {{- end }} {{end}} Проблема в том, что одна перменная во вложенных range видится, в вторая нет. Видится $ServiceName не видится $ServiceNameEnv Можете подсказать с чем может быть связано? Вне вложенных range $ServiceNameEnv выводится без ошибок.
Pavel
{{- range $key, $val := . }} Пееропределение переменных
Алексей
{{- range $key, $val := . }} Пееропределение переменных
Почему одна переменная видна, а вторая нет?
Алексей
Переопределение работает только внутри range
Pavel
можно полны текст
Алексей
можно полны текст
{{- $fullName := include "sentry.fullname" . -}} {{- $ChartName := include "sentry.chart" . -}} {{- $ReleaseName := .Release.Name -}} {{- $ReleaseService := .Release.Service -}} {{- $env := .Values.env -}} {{- $secret_env := .Values.secret_env -}} {{- range $key, $val := .Values.deployment }} {{- $item := . -}} {{- $servicePort := $item.service.port -}} {{- $ServiceName := $key }} {{- if eq $key "worker" }} {{$key}} {{- $ServiceNameEnv := "sentry" }} $ServiceNameEnv == sentry - {{ $ServiceNameEnv }} {{- else }} {{$key}} {{$key}} {{$key}} {{- $ServiceNameEnv := $key }} $ServiceNameEnv: {{ $ServiceNameEnv }} {{- end }} --- apiVersion: apps/v1beta1 kind: Deployment metadata: name: {{ $fullName }}-{{ $key }} labels: app: {{ $fullName }} chart: {{ $ChartName }} release: {{ $ReleaseName }} heritage: {{ $ReleaseService }} service: {{ $ServiceName }} spec: replicas: template: metadata: labels: app: {{ $fullName }} chart: {{ $ChartName }} release: {{ $ReleaseName }} heritage: {{ $ReleaseService }} service: {{ $ServiceName }} spec: volumes: {{- range $k1, $v1 := $item.volumes }} {{/*$ServiceNameEnv*/}} - name: sentry-postgresql-data persistentVolumeClaim: claimName: sentry-postgresql {{- end }} containers: - name: sentry-postgresql image: {{.image.repository}} ports: - name: {{$ServiceName}} containerPort: {{.service.port}} env: - name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name {{- range $k2, $v2:= $env }} {{/* $ServiceNameEnv */}} {{- if eq $k2 $ServiceName }} {{- range $k2, $val := . }} - name: {{$k2}} {{- if . }} value: {{ . }} {{- end }} {{- end }} {{- end }} {{- end }} # From Secret {{- range $k3, $v3 := $secret_env }} {{- $secretName := $k3 }} {{- if eq $k3 $ServiceName }} {{- range . }} - name: {{ . }} valueFrom: secretKeyRef: name: {{ $secretName }} key: {{ . }} {{- end }} {{- end }} {{- end }} volumeMounts: {{- if .volumeMounts }} {{- range $key, $val := .volumeMounts }} - name: {{$key}} mountPath: {{.path}} {{- if .subPath }} subPath: {{ .subPath }} {{- end }} {{- end }} {{ end }} {{- end }}
Алексей
Вот внутри range $k1 $k2 $k3 $ServiceNameEnv недоступна, а $ServiceName видна
Artem
/report
Pavel
{{- if eq $key "worker" }} {{$key}} {{- $ServiceNameEnv := "sentry" }} $ServiceNameEnv == sentry - {{ $ServiceNameEnv }} {{- else }} {{$key}} {{$key}} {{$key}} {{- $ServiceNameEnv := $key }} $ServiceNameEnv: {{ $ServiceNameEnv }} {{- end }} У Вас в записи if два формата,
Pavel
Вы либо назначайте значение либо это шаблонное значение
Алексей
Pavel
этот блок весь можно выкинуть?
Pavel
{{- if eq $key "worker" }} {{- $ServiceNameEnv := "sentry" }} {{- else }} {{- $ServiceNameEnv := $key }} {{- end }}
Pavel
или так оставить
Rainbow
@twwlf @shursh Спасибо 👍
Andrei
@twwlf @shursh Спасибо 👍
Только будьте внимательны, с jaeger работает nginx ingress с версии v0.18.0
Алексей
Pavel
В теории вы внутри блока определил новую переменную и область видимости у нее внутри этого блока.
Andrei
Ребят, а есть возможность прибить pod в statefulset к ноде? Чтобы, к примеру, pod-N всегда запускался на той ноде где был. Было бы очень полезно при использовании local volumes
Andor
разумеется
Andrei
Как? Сейчас, к примеру, 6 нод с нужной меткой и replicaCount == 6. Но если удалить два пода, то они легко меняются местами
Pavel
Affinity
Pavel
+ метки НОД. Если не зачто зацепиться
Andrei
Эм, сейчас они с topologyKey hostname
Andrei
А можно ткнуть в пример как pod-3 привязать к node-3?
Pavel
Интересный пример. Домой приеду, поищу рншение
Andrei
Вот ишью https://github.com/kubernetes/kubernetes/issues/65267 Я надеялся на смекалку нашего брата)
Pavel
Влоб и не универсально: добавить метку pod-3 на хост node-3 и по не й сделать афинити
Andrei
Влоб и не универсально: добавить метку pod-3 на хост node-3 и по не й сделать афинити
Это как? Мы же говорим о поде из StatefulSet Мне в голову приходит только кастомный шедулер
Pavel
Метки у хостов ест?
Pavel
В афинити говорим что запускаться только на узле у которой есть метка
Andrei
Есть, и? Да, допустим у нас 6 хостов с метками, nodeSelector натравлен на них и replicaCount == 6. Теперь мы удаляем 2 пода и они перезапускаются, к примеру, 5 на ноде где был 6 и наоборот.
Pavel
Метки node-1: pod-1, node-2: pod-2. В афинити вы указывает что выборка идёт по метками и там где метка равна имени рода, можно запустить под.
Михаил
Всем привет. Контейнер ушёл в рестарт и теперь пишет в статусе restarting
Михаил
Что можно сделать?
Михаил
Docker restart
Andrei
Посмотреть логи?
Pavel
kubectl describe
Михаил
Чистый докер
Михаил
Не курьер
Михаил
Кубер
Andrei
Метки node-1: pod-1, node-2: pod-2. В афинити вы указывает что выборка идёт по метками и там где метка равна имени рода, можно запустить под.
Я Ваш посыл услышал, но как указать свой affinity для каждого пода в отдельности или подставить POD_NAME хотя бы. Разве это поддерживается?
Pavel
Да
Andor
а разве стейтфулсет не будет запускаться на том же хосте где его клайм выделил волюм?
Pavel
Хм или нет... Сейчас дойду проверю
Andor
иначем зачем вот эти все локалволюмы
Andor
ты точно нигде не ошибся?
Andrei
Да где там можно ошибиться. Тут вопрос не в перезапуске пода/ноды с подом. А трабл когда две ноды перезапускаются: поды могут легко перепрыгнуть
Andrei
Т.е. при RollingUpdate c maxUnavailable 1, все ок Я там ишью выше скинул, говорят пока не завезли такого функционала (хотя там немного о другом) В общем, нужно лепить шедулер
V
Т.е. при RollingUpdate c maxUnavailable 1, все ок Я там ишью выше скинул, говорят пока не завезли такого функционала (хотя там немного о другом) В общем, нужно лепить шедулер
Глупый вопрос: в StatefullSet поды могут содержать разную "начинку"? Например, в виде разных открытых портрв, или версии образа, и т. д.
Andrei
И нет и да
Andrei
partitiion позволяет оставлять часть подов в repicaset со старой версией
𝚔𝚟𝚊𝚙𝚜
ты точно нигде не ошибся?
Если снести ноду, информация о поде тоже снесется
V
И нет и да
Да - это в каких случаях? Если не секрет :)
𝚔𝚟𝚊𝚙𝚜
Правильное решение - это проставить nodeAffinity для каждого local volume
V
partitiion позволяет оставлять часть подов в repicaset со старой версией
Пнятненько. Это я знал, может быть, есть еще возможные варианты?
Andrei
Правильное решение - это проставить nodeAffinity для каждого local volume
Опять же, каждый под в наборе должен иметь свой аффинити
𝚔𝚟𝚊𝚙𝚜
Нет
𝚔𝚟𝚊𝚙𝚜
Аффинити нужно не для подов добавлять а для president volume
V
Ведь если, в общем случае, между pod в StatefullSet нет разницы, кроме, пожалуй, имени, то не имеет значения, по всей видимости, где какой pod запущен. Или имеет?
Andrei
Если это кластер clickhouse, то имеет) Живет прекрасно, но вот это не дает мне покоя
Andrei
Аффинити нужно не для подов добавлять а для president volume
А можно пример? Ведь каждый под должен выбрать свой local-volume
𝚔𝚟𝚊𝚙𝚜
А каждый под в StatefulSet должен иметь свой pvc слинкованный с этим pv
𝚔𝚟𝚊𝚙𝚜
https://github.com/kvaps/docker-linstor#complex-solution-with-postgresql-database
Andor
может есть просто оператор для кх?
Andor
оно
Andor
о других кликхаусах лично я не слышал
Andrei
Andrei
В общем, завтра кастомный шедулер запилю, велосепидить так до конца
Andrei
Просто кто-то тут хвалился монгой в кубе, а там же теже проблемы всплывают
Andor
что-то не гуглится оператор, да
Andor
для монги сходу можно найти штуки три
Andrei
Я про вариант на StatefulSet, а операторов, да, хватает
Andor
а зачем руками делать стейтфулсет если есть оператор?