Compare commits

..

10 Commits

6 changed files with 252 additions and 0 deletions

View File

@ -0,0 +1,11 @@
<!--
title: Helm
description:
published: true
date: 2023-11-07T15:27:02.477Z
tags: helm
editor: ckeditor
dateCreated: 2023-11-07T15:25:32.651Z
-->
<p>Записки из уроков Крюкова Артура <a href="https://www.youtube.com/watch?v=vv8SSYITzPE&amp;list=PLmxqUDFl0XM7e0d0ixZ82zlcBprpMfEpk&amp;index=1">https://www.youtube.com/watch?v=vv8SSYITzPE&amp;list=PLmxqUDFl0XM7e0d0ixZ82zlcBprpMfEpk&amp;index=1</a></p>

View File

@ -0,0 +1,85 @@
---
title: 01-Основы helm
description:
published: true
date: 2023-11-07T15:20:01.968Z
tags: helm
editor: markdown
dateCreated: 2023-11-07T15:18:54.227Z
---
# Видео раз. Основы helm.
## Что такое helm?
Helm - это менеджер пакетов для kuberntes.
Как любой менеджер пакетов, Helm упрощает задачу управления жизненным циклом приложений.
Апдейт и удаление приложений достаточно простые (ну почти всегда). Поэтому в
данном цикле видео, мы не будем акцентировать внимание на этих действиях. В основном мы
займемся разбором создания собственных пакетов (chart), их установкой и кастомизацией.
### Документация
* [Helm](https://helm.sh/)
* [Go templates](https://pkg.go.dev/text/template)
### Как работает Helm
Пакет (helm chart или просто chart), обычно распространяется в виде стандартного архива в формате tar.gz
Внутри которого находятся:
* Описание чарта.
* Шаблоны манифестов.
* Конфигурационные параметры приложения по умолчанию.
* Другие, не обязательные файлы.
Для хранения набора таких пакетов можно использовать любой WEB сервер с обязательным файлом index.yaml, в котором
описываются чарты, которые предоставляются данным сервером. Но это конечно самый простой способ создания репозитория.
В принципе хранить архивы пакетов можно в специализированных системах или универсальных приложениях, которые
поддерживают helm charts типа Nexus, Harbor и т.п.
Так же чарт можно хранить например в локальной файловой системе, не запаковывая его в архив, в виде структуры файлов
и директорий. Но в этом случае затруднена версионность чарта. Т.е. для разных версий чарта необходимо создавать
отдельные директории. Ситуацию может облегчить хранения файлов чарта в системе контроля версии, например в git.
Основная задача helm:
* Получить от пользователя информацию, какие конфигурационные параметры приложения необходимо переопределить.
Обычно для этого используется кастомный файл values.
* Учитывая параметры, сгенерировать из шаблонов файлы манифестов приложений.
* Итоговые файлы манифестов поместить в kubernetes через kubernetes API.
Разумеется кроме работы с пакетами (шаблонами) helm умеет много чего полезного и по ходу изложения материала
мы познакомимся с этими функциями.
Helm версии 3 не требует наличия в кластере kubernetes дополнительного программного обеспечения.
Helm не может управлять приложениями, установленными помимо него.
## Установка
```bash
wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
tar -zxvf helm-v3.7.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
helm list
rm -r helm-v3.7.2-linux-amd64.tar.gz linux-amd64
```
## Задача
Изучать что-либо, просто так, без поставленной задачи бессмысленно. Поэтому сформулируем задачу, которую мы должны
будем решить.
У нас есть некоторое приложение - openresty, которое мы запускаем в кластере kubernetes. Для этого приложения мы написали
файлы [манифестов](../base-application).
Наша задача, сделать из этих манифестов чарт, так что бы мы могли при установке изменять парамеры деплоя,
конфигурационных файлов, сервисов и т.п.
У нас не стоит задачи сделать супер chart с возможностью кастомизации всего и вся. Только базовый функционал,
на котором можно понять как работает "кухня" helm charts.
## Видео
[<img src="https://img.youtube.com/vi/vv8SSYITzPE/maxresdefault.jpg" width="50%">](https://youtu.be/vv8SSYITzPE)

View File

@ -0,0 +1,33 @@
---
title: configmap-conf
description:
published: true
date: 2023-11-07T15:24:00.435Z
tags:
editor: markdown
dateCreated: 2023-11-07T15:24:00.435Z
---
```yaml
---
kind: ConfigMap
apiVersion: v1
metadata:
name: openresty-conf
data:
default.conf: |
server {
listen 80;
server_name localhost;
location / {
root /usr/local/openresty/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/openresty/nginx/html;
}
}
```

View File

@ -0,0 +1,50 @@
---
title: configmap-html
description:
published: true
date: 2023-11-07T15:28:08.083Z
tags:
editor: markdown
dateCreated: 2023-11-07T15:28:08.083Z
---
```yaml
---
kind: ConfigMap
apiVersion: v1
metadata:
name: openresty-html
data:
index.html: |
<html>
<head>
<title>Тестовая страница</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Тестовая страница</h1>
</body>
</html>
50x.html: |
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>
```

View File

@ -0,0 +1,73 @@
---
title: deployment
description:
published: true
date: 2023-11-07T15:33:44.714Z
tags:
editor: markdown
dateCreated: 2023-11-07T15:33:44.714Z
---
```yaml
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: openresty
labels:
k8s-app: openresty
annotations:
reloader.stakater.com/auto: "true"
configmap.reloader.stakater.com/reload: "openresty"
spec:
replicas: 2
revisionHistoryLimit: 3
selector:
matchLabels:
k8s-app: openresty
template:
metadata:
labels:
k8s-app: openresty
spec:
containers:
- name: openresty
image: openresty/openresty:centos-rpm
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: http
readinessProbe:
httpGet:
path: /index.html
port: http
initialDelaySeconds: 5
periodSeconds: 15
livenessProbe:
httpGet:
path: /index.html
port: http
initialDelaySeconds: 5
periodSeconds: 15
timeoutSeconds: 5
resources:
limits:
cpu: "0.2"
memory: "400Mi"
requests:
cpu: "0.1"
memory: "200Mi"
volumeMounts:
- name: html
mountPath: /usr/local/openresty/nginx/html/
- name: config
mountPath: /etc/nginx/conf.d/
volumes:
- name: html
configMap:
name: openresty-html
- name: config
configMap:
name: openresty-conf
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB