mirror of
https://github.com/slurm-personal/school-dev-k8s.git
synced 2026-06-27 13:50:24 +00:00
Change some practice
This commit is contained in:
@@ -0,0 +1,414 @@
|
||||
### Знакомимся с Helm
|
||||
|
||||
1) Подключаем repo и смотрим kube-ops-view
|
||||
|
||||
```bash
|
||||
helm repo add southbridge https://charts.southbridge.ru
|
||||
helm repo update
|
||||
|
||||
helm search hub kube-ops
|
||||
helm show values southbridge/kube-ops-view > values.yaml
|
||||
|
||||
```
|
||||
|
||||
2) Правим `values.yaml`:
|
||||
|
||||
```bash
|
||||
ingress:
|
||||
enabled: true
|
||||
...
|
||||
hostname: kube-ops.s<свой номер логина>.k8s.slurm.io
|
||||
...
|
||||
```
|
||||
|
||||
3) Устанавливаем `kube-ops-view`:
|
||||
|
||||
```bash
|
||||
helm install ops-view southbridge/kube-ops-view -f values.yaml
|
||||
```
|
||||
|
||||
4) Переходим в браузер в Инкогнито режим и заходим на `http://kube-ops.s<свой номер логина>.k8s.slurm.io/`
|
||||
|
||||
5) Удаляем чарт:
|
||||
|
||||
```bash
|
||||
helm delete ops-view
|
||||
```
|
||||
|
||||
### Посмотрим, что внутри чарта:
|
||||
|
||||
```bash
|
||||
helm pull southbridge/kube-ops-view
|
||||
|
||||
tar -zxvf kube-ops-view-X.Y.Z.tgz
|
||||
|
||||
cd kube-ops-view/
|
||||
```
|
||||
|
||||
### Создадим свой чарт
|
||||
|
||||
1) Возьмем за основу нашего чарта готовый Depolyment. Создадим папку будущего чарта и создадим внутри необходимые файлы и папки:
|
||||
|
||||
```bash
|
||||
cd ~
|
||||
mkdir myapp
|
||||
|
||||
cd myapp
|
||||
|
||||
touch Chart.yaml values.yaml
|
||||
mkdir templates
|
||||
|
||||
cp ~/slurm/practice/13.templating/simple-deployment.yaml ~/myapp/templates/
|
||||
```
|
||||
|
||||
2) Добавим в файл `Chart.yaml` минимально необходимые поля:
|
||||
|
||||
```
|
||||
name: myapp
|
||||
version: 1
|
||||
```
|
||||
|
||||
3) Проверим что рендеринг чарта работает, в выводе команды должны увидеть наш Deployment
|
||||
|
||||
```
|
||||
helm template .
|
||||
```
|
||||
|
||||
### Темплейтируем свой чарт
|
||||
|
||||
> **Если отстали, сверяемся с файлом `summary_file.yaml`**
|
||||
|
||||
1) Смотрим на файл `templates/simple-deployment.yaml` и темплейтируем в нем количество реплик и image
|
||||
|
||||
```bash
|
||||
replicas: 1
|
||||
|
||||
меняем на
|
||||
|
||||
replicas: {{ .Values.replicas }}
|
||||
|
||||
...
|
||||
|
||||
image: nginx:1.14.2
|
||||
|
||||
меняем на
|
||||
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
```
|
||||
|
||||
2) Добавляем значения этих переменных в файл `values.yaml`:
|
||||
|
||||
```bash
|
||||
replicas: 3
|
||||
|
||||
image:
|
||||
repository: nginx
|
||||
tag: 1.12
|
||||
```
|
||||
|
||||
3) Проверяем что все корректно и что наши values подцепились:
|
||||
|
||||
```bash
|
||||
helm template .
|
||||
```
|
||||
|
||||
**САМОСТОЯТЕЛЬНАЯ РАБОТА:**
|
||||
- Затемплейтировать по аналогии в Deployment значение поля `containerPort: 80`
|
||||
|
||||
### Стандартизируем наш чарт
|
||||
|
||||
1) Заменяем все лейблы в Deployment, а также имя деплоймента и контейнера
|
||||
|
||||
```bash
|
||||
labels:
|
||||
app: nginx
|
||||
|
||||
меняем на
|
||||
|
||||
labels:
|
||||
app: {{ .Chart.Name }}-{{ .Release.Name }}
|
||||
|
||||
---
|
||||
|
||||
name: nginx-deployment
|
||||
|
||||
меняем на
|
||||
|
||||
name: {{ .Chart.Name }}-{{ .Release.Name }}
|
||||
|
||||
---
|
||||
|
||||
containers:
|
||||
- name: nginx
|
||||
|
||||
меняем на
|
||||
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
|
||||
```
|
||||
|
||||
2) Для проверки используем ту же команду, но с доп ключом:
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
3) Указываем количество реплик по-умолчанию:
|
||||
|
||||
```bash
|
||||
{{ .Values.replicas | default 2 }}
|
||||
```
|
||||
|
||||
4) Проверяем изменения, а также пробуем переназначить тэг образа через ключ `--set`:
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar --set image.tag=1.13
|
||||
```
|
||||
|
||||
### Добавляем в наш Deployment `requests/limits`
|
||||
|
||||
1) Добавляем в `values.yaml` реквесты и лимиты, прям в их обычном формате:
|
||||
|
||||
```bash
|
||||
resources:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 128Mi
|
||||
requests:
|
||||
cpu: 80m
|
||||
memory: 64Mi
|
||||
```
|
||||
|
||||
2) В нашем темплейтированном манифесте говорим, чтобы за ресурсами он сходил в `values.yaml` и взял оттуда секцию целиком:
|
||||
|
||||
```bash
|
||||
ports:
|
||||
- containerPort: {{ .Values.service.internalPort }}
|
||||
resources: <--- вставляем в это место
|
||||
{{ toYaml .Values.resources }}
|
||||
|
||||
```
|
||||
|
||||
3) Проверяем изменения
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
4) Видим что не хватает отступов. Добавляем `indent` в наш Deployment:
|
||||
|
||||
```bash
|
||||
было
|
||||
|
||||
{{ toYaml .Values.resources }}
|
||||
|
||||
стало
|
||||
|
||||
{{ toYaml .Values.resources | indent 10 }}
|
||||
```
|
||||
|
||||
5) Проверяем исправилось ли
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
**САМОСТОЯТЕЛЬНАЯ РАБОТА:**
|
||||
- Добавить таким же образом `annotations`
|
||||
- Поиграйтесь с indent'ом. Сделайте так, чтобы при рендеринге показывались верные отступы
|
||||
- В `values.yaml` укажите значение аннотации `abc: xyz`
|
||||
|
||||
6) Добавляем условие в аннотации:
|
||||
|
||||
```bash
|
||||
было
|
||||
|
||||
annotations:
|
||||
{{ toYaml .Values.annotations | indent 4 }}
|
||||
|
||||
стало
|
||||
|
||||
{{ if .Values.annotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.annotations | indent 4 }}
|
||||
{{ end }}
|
||||
|
||||
```
|
||||
|
||||
7) Смущают пустые строчки. Уберем их
|
||||
|
||||
```bash
|
||||
было
|
||||
|
||||
{{ if .Values.annotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.annotations | indent 4 }}
|
||||
{{ end }}
|
||||
|
||||
стало
|
||||
|
||||
{{- if .Values.annotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.annotations | indent 4 }}
|
||||
{{- end }}
|
||||
|
||||
```
|
||||
|
||||
8) Проверяем что теперь все ОК
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
### Добавляем указание переменных окружения
|
||||
|
||||
1) Вносим в наш темплейтированный манифест следующее:
|
||||
|
||||
```bash
|
||||
- containerPort: {{ .Values.port }}
|
||||
{{ if .Values.env }} <--- Сюда вставляем
|
||||
env:
|
||||
{{ range $key, $val := .Values.env }}
|
||||
- name: {{ $key | quote }}
|
||||
value: {{ $val | quote }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
```
|
||||
|
||||
2) Проверяем что ничего не сломали
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
3) Добавляем в `values.yaml` переменные окружения:
|
||||
|
||||
```bash
|
||||
env:
|
||||
one: two
|
||||
ENV: DEVELOPMENT
|
||||
```
|
||||
|
||||
4) Проверяем что переменные подтянулись
|
||||
|
||||
```bash
|
||||
helm template . --name-template foobar
|
||||
```
|
||||
|
||||
**ДОМАШНЯЯ РАБОТА:**
|
||||
|
||||
- Перейти в папку `homework`
|
||||
- Запустить deployment из файла `bad_deployment.yaml`
|
||||
- Исправить все найденные ошибки и сделать так, чтобы все pod'ы были в состоянии `Running 1/1`
|
||||
|
||||
Ответ-шпаргалка находится в файле `bad_deployment.yaml_otvet`
|
||||
|
||||
### Helm Tests
|
||||
|
||||
1) Переходим в каталог `~/slurm/practice/13.templating/wordpress`, осматриваем чарт. Смотрим папку `tests` и манифест там
|
||||
|
||||
```bash
|
||||
cd ~/slurm/practice/13.templating/wordpress
|
||||
ls
|
||||
cd templates/tests/
|
||||
ls
|
||||
cat test-mariadb-connection.yaml
|
||||
```
|
||||
2) Устанавливаем чарт Wordpress в свой кластер и запускаем тесты:
|
||||
|
||||
```bash
|
||||
helm install wordpress ~/slurm/practice/13.templating/wordpress/
|
||||
helm test wordpress
|
||||
```
|
||||
|
||||
3) Видим что все работает и тест прошел успешно. Удаляем чарт из кластера, однако замечаем что pod с тестом остается:
|
||||
|
||||
```bash
|
||||
helm delete wordpress
|
||||
kubectl get po
|
||||
```
|
||||
|
||||
4) Удалим этот оставшийся pod. Затем модернизируем наши тесты, добавив туда аннотацию `"helm.sh/hook-delete-policy": hook-succeeded`
|
||||
|
||||
```bash
|
||||
kubectl delete po <имя_пода>
|
||||
|
||||
cd ~/slurm/practice/13.templating
|
||||
vim wordpress/templates/tests/test-mariadb-connection.yaml
|
||||
```
|
||||
```yaml
|
||||
...
|
||||
annotations:
|
||||
"helm.sh/hook-delete-policy": hook-succeeded` <-- Добавляем аннотацию
|
||||
"helm.sh/hook": test-succeded
|
||||
...
|
||||
```
|
||||
|
||||
5) Снова ставим чарт и делаем тест:
|
||||
|
||||
```bash
|
||||
helm install wordpress ~/slurm/practice/13.templating/wordpress/
|
||||
helm test wordpress
|
||||
```
|
||||
|
||||
6) Видим, что теперь pod удаляется. Намеренно испортим тест, чтобы проверить что произойдет. Изменим в манифесте `test-mariadb-connection.yaml` номер порта с `3306` на `3333`. Затем обновим чарт, добавив необходимые переменные:
|
||||
|
||||
```bash
|
||||
vim wordpress/templates/tests/test-mariadb-connection.yaml
|
||||
|
||||
export MARIADB_PASSWORD=$(kubectl get secret wordpress-mariadb -o jsonpath="{.data.mariadb-password}" | base64 --decode)
|
||||
export WORDPRESS_PASSWORD=$(kubectl get secret wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
|
||||
|
||||
helm upgrade --install wordpress ./wordpress/ --set mariadb.auth.password=$MARIADB_PASSWORD --set wordpressPassword=$WORDPRESS_PASSWORD
|
||||
```
|
||||
|
||||
7) Выполним тест, указав таймаут, чтобы не ждать ошибки от самого pod'а. Смотрим статус теста и pod'а:
|
||||
|
||||
```bash
|
||||
helm test wordpress --timeout 30s
|
||||
kubectl get po
|
||||
```
|
||||
|
||||
8) Удаляем чарт
|
||||
|
||||
```bash
|
||||
helm delete wordpress
|
||||
```
|
||||
|
||||
### Helm Library Chart
|
||||
|
||||
1) Смотрим на чарты в каталогах `libchart/` и `mychart/`
|
||||
|
||||
2) Проверяем как подключается библиотечный чарт с шаблоном configmap'а:
|
||||
|
||||
```bash
|
||||
helm install libtest mychart/ --debug --dry-run
|
||||
```
|
||||
|
||||
### Helm Cheatsheet
|
||||
|
||||
Поиск чартов
|
||||
|
||||
```bash
|
||||
helm search hub
|
||||
```
|
||||
|
||||
Получение дефолтных values
|
||||
|
||||
```bash
|
||||
helm show values repo/chart > values.yaml
|
||||
```
|
||||
|
||||
Установка чарта в кластер
|
||||
|
||||
```bash
|
||||
helm install release-name repo/chart [--atomic] [--namespace namespace]
|
||||
```
|
||||
|
||||
Локально отрендерить чарт
|
||||
|
||||
```bash
|
||||
helm template /path/to/chart
|
||||
```
|
||||
Reference in New Issue
Block a user