This commit is contained in:
2023-02-21 14:35:39 +07:00
parent 9f310557f3
commit 6b5474a48d
30 changed files with 276 additions and 26 deletions

View File

@@ -3,5 +3,5 @@
что нам понадобиться:
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)

View File

@@ -6,3 +6,18 @@
2. Настраиваем сеть и необходимые пакеты
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. шаблонизируем

View File

@@ -4,16 +4,106 @@
* [helm](https://helm.sh)
План действий:
## План действий
1. В чем разница между RKE <> RKE2
2. Снапшотим наши ноды, чтоб можно было откатиться к началу
3. Запускаем RKE2 через комм строку
4. Тестируем кластер в линзе
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

View File

@@ -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

View File

@@ -0,0 +1 @@
HOSTNAME=traefik.domain.ru

1
3.RKE2/traefik/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.env

0
3.RKE2/traefik/.gitkeep Normal file
View File

View 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

View 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

View 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

View 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
View 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
View 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
View 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

View File

@@ -7,7 +7,7 @@ image:
pullPolicy: IfNotPresent
nfs:
server: 192.168.9.99
server: 192.168.20.99
path: /mnt/data
mountOptions:

View File

@@ -7,6 +7,6 @@ FOLDER=/mnt/data
apt update && apt install -y nfs-kernel-server
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