init
This commit is contained in:
@@ -3,5 +3,5 @@
|
|||||||
что нам понадобиться:
|
что нам понадобиться:
|
||||||
|
|
||||||
1. развернутый [proxmox](https://www.proxmox.com/en/downloads) (подойдет любой гипервизор на вашей машине, vmware workstation например)
|
1. развернутый [proxmox](https://www.proxmox.com/en/downloads) (подойдет любой гипервизор на вашей машине, vmware workstation например)
|
||||||
2. ISO-образ ubuntu [20.04](https://releases.ubuntu.com) (можно 22.04)
|
2. Cloud ISO-образ ubuntu [22.04](https://cloud-images.ubuntu.com) (можно 20.04)
|
||||||
3. [Lens](https://k8slens.dev)
|
3. [Lens](https://k8slens.dev)
|
||||||
|
@@ -6,3 +6,18 @@
|
|||||||
2. Настраиваем сеть и необходимые пакеты
|
2. Настраиваем сеть и необходимые пакеты
|
||||||
3. Шаблонизируем
|
3. Шаблонизируем
|
||||||
4. Разворачиваем из шаблона 3 ВМ, прописываем имена хостов и статичную сеть
|
4. Разворачиваем из шаблона 3 ВМ, прописываем имена хостов и статичную сеть
|
||||||
|
|
||||||
|
## Готовим шаблон (действия на гипере)
|
||||||
|
|
||||||
|
1. wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
|
||||||
|
2. qm create 1000 --memory 4096 --net0 virtio,bridge=vmbr20 --agent 1
|
||||||
|
3. qm importdisk 1000 jammy-server-cloudimg-amd64.img data
|
||||||
|
4. qm set 1000 --scsihw virtio-scsi-pci --scsi0 data:vm-1000-disk-0
|
||||||
|
5. qm set 1000 --ide2 data:cloudinit
|
||||||
|
6. qm set 1000 --boot c --bootdisk scsi0
|
||||||
|
|
||||||
|
7. настраиваем базовый CloudInit (логин, пароль, ключ, dhcp)
|
||||||
|
8. запускаем машину
|
||||||
|
9. ставим пакеты, украшаем консоль
|
||||||
|
10. не забываем `apt install qemu-guest-agent`
|
||||||
|
11. шаблонизируем
|
||||||
|
104
3.RKE2/README.md
104
3.RKE2/README.md
@@ -4,16 +4,106 @@
|
|||||||
|
|
||||||
* [helm](https://helm.sh)
|
* [helm](https://helm.sh)
|
||||||
|
|
||||||
План действий:
|
## План действий
|
||||||
|
|
||||||
1. В чем разница между RKE <> RKE2
|
1. В чем разница между RKE <> RKE2
|
||||||
2. Снапшотим наши ноды, чтоб можно было откатиться к началу
|
2. Снапшотим наши ноды, чтоб можно было откатиться к началу
|
||||||
3. Запускаем RKE2 через комм строку
|
3. Запускаем RKE2 через комм строку
|
||||||
4. Тестируем кластер в линзе
|
4. Тестируем кластер в линзе
|
||||||
5. Восстанавливаемся из снепшотов
|
5. Восстанавливаемся из снепшотов
|
||||||
6. Запускаем +1 ВМ для ранчера, ставим на ней docker
|
|
||||||
7. Поднимаем rancher
|
## Выполнение
|
||||||
8. Разворачиваем кластер rke через rancher, проверяем его в линзе
|
|
||||||
9. Запускаем контейнер для NFS
|
на первой ноде:
|
||||||
10. Запускаем в кластере SNI для NFS-сервера
|
|
||||||
11. Подключаем метрики от линзы
|
```bash
|
||||||
|
curl -sfL https://get.rke2.io | sh -
|
||||||
|
systemctl enable --now rke2-server.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Подключаем "кластер" к линзе, взяв конфиг из `/etc/rancher/rke2/rke2.yaml` и поправив там
|
||||||
|
верный ip-адрес.
|
||||||
|
|
||||||
|
на второи и третьей:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /etc/rancher/rke2/ && nano /etc/rancher/rke2/config.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
и заполняем его конфигом:
|
||||||
|
(токен берем из первой ноды в файле `/var/lib/rancher/rke2/server/node-token`)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
server: https://192.168.20.2:9345
|
||||||
|
token: K10a251c5c4fc92ca9d08d3aa534e232bd9cf1f6c192d42551c98020ffec17464cc::server:1b306239dd7e878eda35084137aa9626
|
||||||
|
tls-san:
|
||||||
|
- rke.bildme.ru
|
||||||
|
node-taint:
|
||||||
|
- "CriticalAddonsOnly=true:NoExecute"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Траефик
|
||||||
|
|
||||||
|
запускаем траефик, балансирую только на первую cp-ноду
|
||||||
|
|
||||||
|
траефик у меня будет висеть на адресе 192.168.20.2, от сюда этот адрес указан и в конфиге в разделе server
|
||||||
|
|
||||||
|
## Подключаем 2\3 ноды
|
||||||
|
|
||||||
|
активируем сервис, ждем подключения нод в кластер
|
||||||
|
|
||||||
|
`systemctl enable --now rke2-server.service`
|
||||||
|
|
||||||
|
## Правим подключение
|
||||||
|
|
||||||
|
1. идем на первую ноду, так же создаем конфиг, сохраняем и перезапускаем машину
|
||||||
|
2. перенастраиваем подключение в линзе по доменному имени
|
||||||
|
3. открываем балансировку в траефике на все три ноды
|
||||||
|
|
||||||
|
## Добавляем воркер-ноду
|
||||||
|
|
||||||
|
1. качаем бинари - `curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -`
|
||||||
|
2. создаем более простой конфиг:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /etc/rancher/rke2/ && nano /etc/rancher/rke2/config.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
заполняем:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
server: https://192.168.20.2:9345
|
||||||
|
token: K10a251c5c4fc92ca9d08d3aa534e232bd9cf1f6c192d42551c98020ffec17464cc::server:1b306239dd7e878eda35084137aa9626
|
||||||
|
```
|
||||||
|
|
||||||
|
запускаем службу:
|
||||||
|
|
||||||
|
`systemctl enable --now rke2-agent.service`
|
||||||
|
|
||||||
|
ждем адопта, затем добавляем в лейбы ноды значение (исключительно для красоты):
|
||||||
|
|
||||||
|
`node-role.kubernetes.io/worker: 'true'`
|
||||||
|
|
||||||
|
## Со стороны кластера
|
||||||
|
|
||||||
|
1. поправим taints на первой ноде, так, что бы на нее не пошла боевая нагрузка
|
||||||
|
2. поправим nginx ingress controller, что бы он работал только на CP-нодах
|
||||||
|
|
||||||
|
меняем селектор нод:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
nodeSelector:
|
||||||
|
node-role.kubernetes.io/control-plane: 'true'
|
||||||
|
```
|
||||||
|
|
||||||
|
добавляем разрешение на запуск на CP-нодах:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
tolerations:
|
||||||
|
- key: CriticalAddonsOnly
|
||||||
|
operator: Exists
|
||||||
|
- operator: Exists
|
||||||
|
effect: NoExecute
|
||||||
|
```
|
||||||
|
|
||||||
|
проверяем, что у нас запущены 3 реплики rke2-ingress-nginx-controller
|
||||||
|
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
ssh node1 apt install -y nfs-common
|
|
||||||
ssh node1 systemctl enable rpcbind
|
|
||||||
ssh node1 systemctl start rpcbind
|
|
||||||
|
|
||||||
ssh node2 apt install -y nfs-common
|
|
||||||
ssh node2 systemctl enable rpcbind
|
|
||||||
ssh node2 systemctl start rpcbind
|
|
||||||
|
|
||||||
ssh node3 apt install -y nfs-common
|
|
||||||
ssh node3 systemctl enable rpcbind
|
|
||||||
ssh node3 systemctl start rpcbind
|
|
||||||
|
|
||||||
|
|
||||||
#helm upgrade --install --create-namespace nfs-provisioner -n nfs-provisioner nfs-provisioner
|
|
1
3.RKE2/traefik/.env.example
Normal file
1
3.RKE2/traefik/.env.example
Normal file
@@ -0,0 +1 @@
|
|||||||
|
HOSTNAME=traefik.domain.ru
|
1
3.RKE2/traefik/.gitignore
vendored
Normal file
1
3.RKE2/traefik/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.env
|
0
3.RKE2/traefik/.gitkeep
Normal file
0
3.RKE2/traefik/.gitkeep
Normal file
17
3.RKE2/traefik/data/custom/example/app.yaml
Normal file
17
3.RKE2/traefik/data/custom/example/app.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
http:
|
||||||
|
routers:
|
||||||
|
app-domain-ru-route:
|
||||||
|
entryPoints:
|
||||||
|
- https
|
||||||
|
service: app-domain-ru-service
|
||||||
|
rule: Host(`$APP_HOSTNAME`)
|
||||||
|
tls:
|
||||||
|
certResolver: letsEncrypt
|
||||||
|
services:
|
||||||
|
app-domain-ru-service:
|
||||||
|
loadBalancer:
|
||||||
|
passHostHeader: true
|
||||||
|
servers:
|
||||||
|
- url: http://192.168.20.101
|
||||||
|
- url: http://192.168.20.102
|
||||||
|
- url: http://192.168.20.103
|
29
3.RKE2/traefik/data/custom/rke-custom.yaml
Normal file
29
3.RKE2/traefik/data/custom/rke-custom.yaml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
tcp:
|
||||||
|
routers:
|
||||||
|
rke2-api:
|
||||||
|
entryPoints:
|
||||||
|
- k8s-api
|
||||||
|
rule: "HostSNI(`*`)"
|
||||||
|
service: rke2-api-service
|
||||||
|
tls:
|
||||||
|
passthrough: true
|
||||||
|
rke2-connect:
|
||||||
|
entryPoints:
|
||||||
|
- rke2-connect
|
||||||
|
rule: "HostSNI(`*`)"
|
||||||
|
service: rke2-connect-service
|
||||||
|
tls:
|
||||||
|
passthrough: true
|
||||||
|
services:
|
||||||
|
rke2-api-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- address: 192.168.20.101:6443
|
||||||
|
# - address: 192.168.20.102:6443
|
||||||
|
# - address: 192.168.20.103:6443
|
||||||
|
rke2-connect-service:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- address: 192.168.20.101:9345
|
||||||
|
# - address: 192.168.20.102:9345
|
||||||
|
# - address: 192.168.20.103:9345
|
39
3.RKE2/traefik/data/traefik.yaml
Normal file
39
3.RKE2/traefik/data/traefik.yaml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
global:
|
||||||
|
checkNewVersion: true
|
||||||
|
|
||||||
|
log:
|
||||||
|
level: error
|
||||||
|
filePath: /data/stdout.log
|
||||||
|
format: common
|
||||||
|
|
||||||
|
serversTransport:
|
||||||
|
insecureSkipVerify: true
|
||||||
|
|
||||||
|
api:
|
||||||
|
dashboard: true
|
||||||
|
|
||||||
|
entryPoints:
|
||||||
|
http:
|
||||||
|
address: ":80"
|
||||||
|
https:
|
||||||
|
address: ":443"
|
||||||
|
k8s-api:
|
||||||
|
address: ":6443"
|
||||||
|
rke2-connect:
|
||||||
|
address: ":9345"
|
||||||
|
|
||||||
|
providers:
|
||||||
|
docker:
|
||||||
|
endpoint: "unix:///var/run/docker.sock"
|
||||||
|
exposedByDefault: false
|
||||||
|
file:
|
||||||
|
directory: /custom
|
||||||
|
watch: true
|
||||||
|
|
||||||
|
certificatesResolvers:
|
||||||
|
letsEncrypt:
|
||||||
|
acme:
|
||||||
|
email: mail@gmail.com
|
||||||
|
storage: acme.json
|
||||||
|
httpChallenge:
|
||||||
|
entryPoint: http
|
44
3.RKE2/traefik/docker-compose.yml
Normal file
44
3.RKE2/traefik/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
version: '3.9'
|
||||||
|
services:
|
||||||
|
traefik:
|
||||||
|
image: traefik
|
||||||
|
container_name: traefik
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
- 6443:6443
|
||||||
|
- 9345:9345
|
||||||
|
extra_hosts:
|
||||||
|
kubernetes.default: 127.0.0.1
|
||||||
|
cap_add:
|
||||||
|
- NET_BIND_SERVICE
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ./data/traefik.yml:/traefik.yml:ro
|
||||||
|
- ./data/custom/:/custom/:ro
|
||||||
|
- ./data/acme.json:/acme.json
|
||||||
|
- ./logs/stdout.log:/data/stdout.log:rw
|
||||||
|
- ./logs/access.log:/data/access.log:rw
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.traefik.entrypoints=https"
|
||||||
|
- "traefik.http.routers.traefik.rule=Host(`$HOSTNAME`)"
|
||||||
|
- "traefik.http.routers.traefik.tls=true"
|
||||||
|
- "traefik.http.routers.traefik.tls.certresolver=letsEncrypt"
|
||||||
|
- "traefik.http.routers.traefik.service=api@internal"
|
||||||
|
- "traefik.http.services.traefik-traefik.loadbalancer.server.port=888"
|
||||||
|
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||||
|
# global redirect to https
|
||||||
|
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
|
||||||
|
- "traefik.http.routers.http-catchall.entrypoints=http"
|
||||||
|
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
||||||
|
networks:
|
||||||
|
- webproxy
|
||||||
|
|
||||||
|
networks:
|
||||||
|
webproxy:
|
||||||
|
name: webproxy
|
7
3.RKE2/traefik/init.sh
Normal file
7
3.RKE2/traefik/init.sh
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
touch data/acme.json
|
||||||
|
chmod 600 data/acme.json
|
||||||
|
|
||||||
|
touch logs/stdout.log
|
||||||
|
touch logs/access.log
|
18
4.NFS/README.md
Normal file
18
4.NFS/README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# подключаем NFS и StorageClass
|
||||||
|
|
||||||
|
1. разворачиваем контейнер
|
||||||
|
2. поднимаем на нем nfs-server
|
||||||
|
3. на нодах просаживаем пакет для работы с маунтингом дисков
|
||||||
|
4. в кластере запускаем helm
|
||||||
|
5. деплоим метрики в линзе
|
||||||
|
6. правим толерантность в node-exporter, добавляя:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
tolerations:
|
||||||
|
- key: CriticalAddonsOnly
|
||||||
|
operator: Exists
|
||||||
|
- operator: Exists
|
||||||
|
effect: NoExecute
|
||||||
|
```
|
||||||
|
|
||||||
|
done.
|
5
4.NFS/nfs/nfs-install.sh
Executable file
5
4.NFS/nfs/nfs-install.sh
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ssh root@192.168.20.110 "apt install -y nfs-common && systemctl enable --now rpcbind"
|
||||||
|
|
||||||
|
#helm upgrade --install --create-namespace nfs-provisioner -n nfs-provisioner nfs-provisioner
|
@@ -7,7 +7,7 @@ image:
|
|||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
nfs:
|
nfs:
|
||||||
server: 192.168.9.99
|
server: 192.168.20.99
|
||||||
path: /mnt/data
|
path: /mnt/data
|
||||||
mountOptions:
|
mountOptions:
|
||||||
|
|
@@ -7,6 +7,6 @@ FOLDER=/mnt/data
|
|||||||
apt update && apt install -y nfs-kernel-server
|
apt update && apt install -y nfs-kernel-server
|
||||||
chown nobody:nogroup $FOLDER
|
chown nobody:nogroup $FOLDER
|
||||||
|
|
||||||
echo "$FOLDER 192.168.9.0/24(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports
|
echo "$FOLDER 192.168.20.0/24(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports
|
||||||
|
|
||||||
systemctl restart nfs-kernel-server
|
systemctl restart nfs-kernel-server
|
Reference in New Issue
Block a user