init
This commit is contained in:
1 parent
9f310557f3
commit
6b5474a48d
30 files changed
+276
-26
No files matched your search
+1
-1
@@ -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. шаблонизируем
|
||||||
+97
-7
@@ -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
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
HOSTNAME=traefik.domain.ru
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.env
|
||||||
Whitespace-only changes.
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
touch data/acme.json
|
||||||
|
chmod 600 data/acme.json
|
||||||
|
|
||||||
|
touch logs/stdout.log
|
||||||
|
touch logs/access.log
|
||||||
@@ -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.
|
||||||
Executable
+5
@@ -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
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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