Compare commits
No commits in common. "3d778c8ef126d6b139941c9516c9df7ba61126c5" and "6b80bd3f13a2d77688c322fe23d424ef99d0a573" have entirely different histories.
3d778c8ef1
...
6b80bd3f13
|
|
@ -2,7 +2,7 @@
|
||||||
title: 02-video-app-metadata
|
title: 02-video-app-metadata
|
||||||
description:
|
description:
|
||||||
published: true
|
published: true
|
||||||
date: 2023-11-09T10:02:30.373Z
|
date: 2023-11-08T16:10:25.856Z
|
||||||
tags:
|
tags:
|
||||||
editor: markdown
|
editor: markdown
|
||||||
dateCreated: 2023-11-08T10:42:51.395Z
|
dateCreated: 2023-11-08T10:42:51.395Z
|
||||||
|
|
@ -78,8 +78,6 @@ mv ingress.yaml ../../old-templates/ingress-orig.yaml
|
||||||
> **{{/*** - это комментарий
|
> **{{/*** - это комментарий
|
||||||
> **define** - присвоение имени. Заканчивается с помощью оператора end. Так же могут быть условия if, else.
|
> **define** - присвоение имени. Заканчивается с помощью оператора end. Так же могут быть условия if, else.
|
||||||
> **trunc 63** - обрезает длину имени до 64 знаков
|
> **trunc 63** - обрезает длину имени до 64 знаков
|
||||||
> **trunc 63 | trimSuffix "-"** - допустим значение до будет qwerty-123, то после этой команды останется qwerty
|
|
||||||
> **nindent 4** - это отступ, который будет сформирован при запуске чарта
|
|
||||||
{.is-info}
|
{.is-info}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -385,6 +383,8 @@ fullnameOverride: "art"
|
||||||
application:
|
application:
|
||||||
reloader: true
|
reloader: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
helm template app ./openresty-art --set "application.reloader=true" --debug > app.yaml
|
helm template app ./openresty-art --set "application.reloader=true" --debug > app.yaml
|
||||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
||||||
|
|
|
||||||
|
|
@ -1,321 +0,0 @@
|
||||||
---
|
|
||||||
title: 03-video-spec
|
|
||||||
description:
|
|
||||||
published: true
|
|
||||||
date: 2023-11-09T10:29:33.228Z
|
|
||||||
tags: helm
|
|
||||||
editor: markdown
|
|
||||||
dateCreated: 2023-11-09T10:06:13.204Z
|
|
||||||
---
|
|
||||||
|
|
||||||
# Видео три
|
|
||||||
|
|
||||||
> Файлы для лабы:
|
|
||||||
[final-version.zip](/attachments/final-version.zip)
|
|
||||||
|
|
||||||
Продолжаем создавать свой чарт для приложения.
|
|
||||||
|
|
||||||
## Раздел spec deployment.
|
|
||||||
|
|
||||||
В values.yaml переносим replicaCount в раздел application и добавим
|
|
||||||
revisionHistoryLimit
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
reloader: false
|
|
||||||
replicaCount: 1
|
|
||||||
revisionHistoryLimit: 3
|
|
||||||
```
|
|
||||||
|
|
||||||
В шаблоне deployment.yaml добавляем соответствующие шаблоны.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.application.replicaCount }}
|
|
||||||
revisionHistoryLimit: {{ .Values.application.revisionHistoryLimit }}
|
|
||||||
```
|
|
||||||
|
|
||||||
За ним изменим раздел selector.matchLabels. Тут просто подставим
|
|
||||||
готовый именованный шаблон, при помощи которого определяем
|
|
||||||
labels селектора подов.
|
|
||||||
|
|
||||||
Аналогичный шаблон, подставляем в разделе template.metadata.labels.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
{{- include "openresty-art.selectorLabels" . | nindent 6 }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
{{- include "openresty-art.selectorLabels" . | nindent 8 }}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Аннотации пода.
|
|
||||||
|
|
||||||
Аннотации пода нам могут потребоваться например, для сбора метрик.
|
|
||||||
Хотя конкретно этот образ openresty такие метрики отдавать не умеет.
|
|
||||||
Но мы рассмотрим принцип добавления аннотаций.
|
|
||||||
|
|
||||||
В values.yaml переносим podAnnotations в раздел application. И
|
|
||||||
Оставляем его значение пустым. Т.е. по умолчанию аннотаций нет.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
podAnnotations: {}
|
|
||||||
```
|
|
||||||
|
|
||||||
В шаблоне deployment.yaml в template.metadata добавляем шаблон.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
{{- with .Values.application.podAnnotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
```
|
|
||||||
|
|
||||||
В этом шаблоне мы применяем структуру управления with, которая
|
|
||||||
устанавливает область видимости переменных.
|
|
||||||
|
|
||||||
Когда мы пишем путь к переменным, мы его обычно начинаем с
|
|
||||||
символа точка (вершина пространства имён). Например:
|
|
||||||
_.Values.application.podAnnotations_. Если предполагается,
|
|
||||||
что в указанном узле много переменных, то можно "переместить"
|
|
||||||
точку в конец podAnnotations.
|
|
||||||
|
|
||||||
Затем при помощи toYaml перенесём все как есть в итоговый
|
|
||||||
манифест. Т.е. не будем разрешать остальные переменные и их
|
|
||||||
значения. Просто скопируем.
|
|
||||||
|
|
||||||
Предполагается, что my-values.yaml мы будем явно описывать
|
|
||||||
аннотации. Например, вот так:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
podAnnotations:
|
|
||||||
prometheus.io/scrape: "true"
|
|
||||||
prometheus.io/path: "/metrics"
|
|
||||||
prometheus.io/port: "80"
|
|
||||||
```
|
|
||||||
|
|
||||||
Посмотрим, что получилось.
|
|
||||||
|
|
||||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
revisionHistoryLimit: 3
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: openresty-art
|
|
||||||
app.kubernetes.io/instance: app
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: openresty-art
|
|
||||||
app.kubernetes.io/instance: app
|
|
||||||
annotations:
|
|
||||||
prometheus.io/path: /metrics
|
|
||||||
prometheus.io/port: "80"
|
|
||||||
prometheus.io/scrape: "true"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Спецификация контейнера.
|
|
||||||
|
|
||||||
Займёмся _spec.template.spec.containers_.
|
|
||||||
|
|
||||||
### imagePullSecrets
|
|
||||||
|
|
||||||
На всякий случай добавим возможность указать imagePullSecrets.
|
|
||||||
|
|
||||||
В values.yaml переносим в раздел application imagePullSecrets.
|
|
||||||
По умолчанию, массив пустой.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
imagePullSecrets: []
|
|
||||||
```
|
|
||||||
|
|
||||||
В шаблоне deployment.yaml добавим следующую конструкцию.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
spec:
|
|
||||||
{{- with .Values.application.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- toYaml . | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
```
|
|
||||||
|
|
||||||
При помощи with меняем область видимости. И при помощи toYaml
|
|
||||||
преобразуем все что там есть в yaml. По умолчанию у нас там
|
|
||||||
пустой массив. Поэтому в итоговый манифест не подставиться.
|
|
||||||
|
|
||||||
Но если в my-values.yaml мы добавим указание имени сикрета,
|
|
||||||
то секция будет сформирована.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
reloader: true
|
|
||||||
podAnnotations:
|
|
||||||
prometheus.io/scrape: "true"
|
|
||||||
prometheus.io/path: "/metrics"
|
|
||||||
prometheus.io/port: "80"
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: pullSecretName
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверим, что получилось.
|
|
||||||
|
|
||||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
spec:
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: pullSecretName
|
|
||||||
```
|
|
||||||
|
|
||||||
Удалим imagePullSecrets из my-values.yaml, поскольку мы
|
|
||||||
предполагаем использование публичного docker registry.
|
|
||||||
|
|
||||||
### Container
|
|
||||||
|
|
||||||
В первую очередь определим: name, image и imagePullPolicy.
|
|
||||||
|
|
||||||
В values.yaml добавим в раздел application значения по
|
|
||||||
умолчанию:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
image:
|
|
||||||
repository: openresty/openresty
|
|
||||||
tag: "centos-rpm"
|
|
||||||
pullPolicy: IfNotPresent
|
|
||||||
```
|
|
||||||
|
|
||||||
В deployment.yaml добавим соответствующие шаблоны.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
containers:
|
|
||||||
- name: {{ include "openresty-art.fullname" . }}
|
|
||||||
image: "{{ .Values.application.image.repository }}:{{ .Values.application.image.tag | default "centos-rpm" }}"
|
|
||||||
imagePullPolicy: {{ .Values.application.image.pullPolicy }}
|
|
||||||
```
|
|
||||||
|
|
||||||
Из интересного тут только установка значения по умолчанию в шаблоне
|
|
||||||
{{ .Values.application.image.tag | default "centos-rpm" }}
|
|
||||||
|
|
||||||
Если tag не определен, будет подставлено значение "centos-rpm".
|
|
||||||
|
|
||||||
Проконтролируем правильность создания шаблона.
|
|
||||||
|
|
||||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
|
||||||
|
|
||||||
### Пробы
|
|
||||||
|
|
||||||
В созданном _helm create_ шаблоне пробы не обёрнуты в шаблон.
|
|
||||||
Это не хорошо. Мы должны дать возможность администратору,
|
|
||||||
устанавливающему наш чарт управлять пробами.
|
|
||||||
|
|
||||||
Поэтому в values.yaml, раздел application добавим следующие
|
|
||||||
строки:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
probe:
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: http
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: http
|
|
||||||
```
|
|
||||||
|
|
||||||
В deployment.yaml вместо определения проб:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}
|
|
||||||
image: "{{ .Values.application.image.repository }}:{{ .Values.application.image.tag | default "centos-rpm" }}"
|
|
||||||
imagePullPolicy: {{ .Values.application.image.pullPolicy }}
|
|
||||||
ports:
|
|
||||||
- containerPort: 80
|
|
||||||
name: http
|
|
||||||
{{- with .Values.application.probe }}
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
```
|
|
||||||
|
|
||||||
В my-values.yaml добавим немного изменённое определение проб.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
probe:
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /index.html
|
|
||||||
port: http
|
|
||||||
initialDelaySeconds: 5
|
|
||||||
periodSeconds: 15
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
path: /index.html
|
|
||||||
port: http
|
|
||||||
initialDelaySeconds: 5
|
|
||||||
periodSeconds: 15
|
|
||||||
timeoutSeconds: 5
|
|
||||||
```
|
|
||||||
|
|
||||||
Проконтролируем правильность генерации проб.
|
|
||||||
|
|
||||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
|
||||||
|
|
||||||
### Ресурсы
|
|
||||||
|
|
||||||
В файле values.yaml переносим resources в раздел application.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
resources: {}
|
|
||||||
```
|
|
||||||
|
|
||||||
По умолчанию у нас нет ограничений.
|
|
||||||
|
|
||||||
В файле deployment.yaml добавим соответствующий шаблон.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}
|
|
||||||
{{- with .Values.application.resources }}
|
|
||||||
resources:
|
|
||||||
{{- toYaml . | nindent 10 }}
|
|
||||||
{{- end }}
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверим, что по умолчанию ресурсы не добавляются в манифест.
|
|
||||||
|
|
||||||
helm template app ./openresty-art > app.yaml
|
|
||||||
|
|
||||||
Добавим в файл my-values.yaml определение ресурсов:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
application:
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: "0.2"
|
|
||||||
memory: "400Mi"
|
|
||||||
requests:
|
|
||||||
cpu: "0.1"
|
|
||||||
memory: "200Mi"
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверим, что ресурсы корректно подставляются.
|
|
||||||
|
|
||||||
На этом подготовка шаблона deployment.yaml завершена.
|
|
||||||
|
|
||||||
## Видео
|
|
||||||
|
|
||||||
[<img src="https://img.youtube.com/vi/OWJYAhMuyJg/maxresdefault.jpg" width="50%">](https://youtu.be/OWJYAhMuyJg)
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue