Compare commits
6 Commits
6b80bd3f13
...
3d778c8ef1
| Author | SHA1 | Date |
|---|---|---|
|
|
3d778c8ef1 | |
|
|
89076ca54e | |
|
|
22f46587ff | |
|
|
2697de795e | |
|
|
b4b6ccd2ea | |
|
|
090b651d11 |
|
|
@ -2,7 +2,7 @@
|
|||
title: 02-video-app-metadata
|
||||
description:
|
||||
published: true
|
||||
date: 2023-11-08T16:10:25.856Z
|
||||
date: 2023-11-09T10:02:30.373Z
|
||||
tags:
|
||||
editor: markdown
|
||||
dateCreated: 2023-11-08T10:42:51.395Z
|
||||
|
|
@ -78,6 +78,8 @@ mv ingress.yaml ../../old-templates/ingress-orig.yaml
|
|||
> **{{/*** - это комментарий
|
||||
> **define** - присвоение имени. Заканчивается с помощью оператора end. Так же могут быть условия if, else.
|
||||
> **trunc 63** - обрезает длину имени до 64 знаков
|
||||
> **trunc 63 | trimSuffix "-"** - допустим значение до будет qwerty-123, то после этой команды останется qwerty
|
||||
> **nindent 4** - это отступ, который будет сформирован при запуске чарта
|
||||
{.is-info}
|
||||
|
||||
|
||||
|
|
@ -383,8 +385,6 @@ fullnameOverride: "art"
|
|||
application:
|
||||
reloader: true
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
helm template app ./openresty-art --set "application.reloader=true" --debug > app.yaml
|
||||
helm template app ./openresty-art -f my-values.yaml > app.yaml
|
||||
|
|
|
|||
|
|
@ -0,0 +1,321 @@
|
|||
---
|
||||
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