init
This commit is contained in:
@@ -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)
|
||||
|
@@ -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. шаблонизируем
|
||||
|
104
3.RKE2/README.md
104
3.RKE2/README.md
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
nfs:
|
||||
server: 192.168.9.99
|
||||
server: 192.168.20.99
|
||||
path: /mnt/data
|
||||
mountOptions:
|
||||
|
@@ -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
|
Reference in New Issue
Block a user