Compare commits
10 Commits
904e8b5e80
...
e8dba5bade
| Author | SHA1 | Date |
|---|---|---|
|
|
e8dba5bade | |
|
|
4a21f9f30a | |
|
|
56764dd9d4 | |
|
|
1ae5c320bf | |
|
|
9f4ed857ea | |
|
|
791b9106c9 | |
|
|
64d120764d | |
|
|
0451995fe2 | |
|
|
31d2980964 | |
|
|
ef27e8b47a |
|
|
@ -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&list=PLmxqUDFl0XM7e0d0ixZ82zlcBprpMfEpk&index=1">https://www.youtube.com/watch?v=vv8SSYITzPE&list=PLmxqUDFl0XM7e0d0ixZ82zlcBprpMfEpk&index=1</a></p>
|
||||||
|
|
@ -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)
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
@ -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>
|
||||||
|
```
|
||||||
|
|
@ -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 |
Loading…
Reference in New Issue