From 433a3b102f8d1e97ed079d6bc665fb0674053bdf Mon Sep 17 00:00:00 2001 From: erjemin Date: Fri, 28 Mar 2025 23:51:58 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=BF=D0=BE=D0=B4=20=D1=81=203X-UI=20.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/k3s--3x-ui-welcome.png | Bin 0 -> 59806 bytes kubernetes/k3s-3xui-pod.md | 123 ++++++++++++++++++++++++++++------ 2 files changed, 104 insertions(+), 19 deletions(-) create mode 100644 images/k3s--3x-ui-welcome.png diff --git a/images/k3s--3x-ui-welcome.png b/images/k3s--3x-ui-welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..82fccc0c0c1a84374a9f56085dd08f47265cfff6 GIT binary patch literal 59806 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 literal 0 HcmV?d00001 diff --git a/kubernetes/k3s-3xui-pod.md b/kubernetes/k3s-3xui-pod.md index 3a91c49..d65bf5b 100644 --- a/kubernetes/k3s-3xui-pod.md +++ b/kubernetes/k3s-3xui-pod.md @@ -52,8 +52,8 @@ nano ~/k3s/vpn/x-ui/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: - name: x-ui - namespace: x-ui + name: x-ui # имя развертывания (имя пода) + namespace: x-ui # пространство имён, в котором будет создан под spec: replicas: 1 selector: @@ -64,26 +64,21 @@ spec: labels: app: x-ui spec: - hostNetwork: true + hostNetwork: true # использовать сетевой стек хоста containers: - - name: x-ui + - name: x-ui # имя контейнера image: ghcr.io/mhsanaei/3x-ui:latest - # image: enwaiax/x-ui:latest # альтернативный облеченный: меньше способов шифрования и интерфейс на китайском + # image: enwaiax/x-ui:latest # альтернативный облегчённый: меньше способов шифрования и китайский интерфейс ``` В этом манифесте примечательно следующее: - `hostNetwork: true` — позволяет контейнеру использовать сетевой стек хоста и значит работать с сетевыми интерфейсами и портами хоста напрямую. Это полезно для приложений, которые требуют прямого доступа к сети, например, VPN-серверы. -- `replicas: 1` — это количество реплик (экземпляров) пода, которые будут запущены. В данном случае мы запускаем - только одну реплику, но при необходимости можно увеличить это число для обеспечения отказоустойчивости и - масштабируемости. -- `selector` — это селектор, который используется для выбора подов, которые будут управляться этим +- `spec.replicas: 1` — количество реплик (экземпляров) пода, которые будут запущены. В данном случае -- оин под. +- `spec.selector` — селектор, который используется для выбора подов, которые будут управляться этим развертыванием. Он определяет, какие поды будут обновлены или удалены при изменении конфигурации развертывания. -- `matchLabels` — это метки, которые должны совпадать с метками подов, чтобы они были выбраны селектором. +- `matchLabels` — метки, которые должны совпадать с метками подов, чтобы они были выбраны селектором. В данном случае мы используем метку `app: x-ui`, чтобы выбрать поды, которые относятся к приложению x-ui. -- `emptyDir: {}` — это временное хранилище SQLite, которое создаётся при запуске пода и удаляется при его завершении. - Оно используется для хранения настроек, включая настройки VPN-серверов и клиентских соединений ( 3x-ui. Это удобно для тестирования и разработки, но не рекомендуется - для продакшн-среды, так как данные будут потеряны при перезапуске пода. Применим манифест: @@ -104,7 +99,7 @@ x-ui-bb97f6894-h7zj8 1/1 Running 0 11s 10.42.1.50 opi5plus- Видим, что нода на которой запустился 3x-ui это `opi5plus-3`, а имя пода `x-ui-bb97f6894-h7zj8`. Проверим логи пода, используя его имя: ```bash -sudo kubectl logs -n x-ui x-ui-886dbc87-hdw4h +sudo kubectl logs -n x-ui x-ui-bb97f6894-h7zj8 ``` Увидим что-то вроде: @@ -119,15 +114,105 @@ WARNING - XRAY: core: Xray 25.3.6 started ``` Теперь мы знаем порт, на котором работает 3x-ui (`2053`), и значит можем получить доступ к веб-интерфейсу через браузер -по адресу `http://opi5plus-3:2053` или `http://:2053`. Можно настаивать VPN-подключения, создавать -пользователей , менять логин и пароль на вход и т.д. Веб-интерфейс 3x-ui интуитивно понятен, так что разбираться +по адресу `http://opi5plus-3:2053` или `http://:2053`. + +![k3s--3x-ui-welcome.png](../images/k3s--3x-ui-welcome.png) + +После первого логирования (по умолчанию логин и пароль `admin`/`admin`) можно настаивать VPN-подключения, создавать +пользователей, менять логин и пароль на вход и т.д. Веб-интерфейс 3x-ui интуитивно понятен, так что разбираться не составит труда. -Но есть один минус. При рестарте пода, все настройки будут сброшены, т.к. они храняться во внутреннем хранилище пода. +Есть, конечно, у 3x-ui под k3s минусы. В частности? внури пода не будет работать командный интерфейс +3x-ui (`x-ui admin`). Поды k3s работают на **Alpine**, а там некоторые команды отличаются (например, нет `bash`, +а только `ash`). Но web-панель работает, всё управление удобнее сделать через веб-интерфейс, и можно вообще не +лезть в консоль. + +Но есть вот другой минус более критичен. При рестарте пода, все настройки будут сброшены, так как они хранятся +во внутреннем хранилище пода. Чтобы этого избежать, нужно использовать постоянное хранилище (Persistent Volume). Для его работы нужно установить -`Longhorn` (или другой менеджер хранилищ). K3s на Orange Pi 5 поддерживает `Longhorn` из коробки, так как в операционной -системе нет поддержки `iSCSI`, и включение его потребует перекомпиляции ядра (если вы этого еще не сделали, [смотрите +`Longhorn` (или другой менеджер хранилищ). K3s поддерживает `Longhorn` из коробки, так как в операционной системе на +Orange Pi 5 нет поддержки `iSCSI`, включение его потребует компиляции ядра (если вы этого еще не сделали, [смотрите инструкцию](../raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md). +Если `Longhorn` уже установлен, создадим не его базе постоянное хранилище для -- _PersistentVolumeClaim_ (**PVC**). +Манифест PVC создадим в каталоге `~/k3s/vpn/x-ui/`, рядом с `deployment.yaml`: +```bash +nano ~/k3s/vpn/x-ui/pvc-db.yaml +``` + +Вставим в него следующий код: +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: x-ui-db-pvc + namespace: x-ui +spec: + storageClassName: longhorn # Указываем Longhorn как класс хранилища + accessModes: + - ReadWriteOnce # Доступ для чтения и записи одним подом + resources: + requests: + storage: 512Mi # Запрашиваемое хранилище, размер можно увеличить, если нужно +``` + +Обратите внимание: +- `metadata.name` и `metadata.namespace` — имя хранилища (и это имя мы должны использовать в манифесте + развертывания пода, чтобы указать, какое хранилище использовать) и пространство имён, в котором оно будет создано. +- `spec.storageClassName` — класс хранилища, который будет использоваться для создания постоянного хранилища. + В данном случае -- `longhorn`. +- `spec.accessModes` — режим доступа к хранилищу. `ReadWriteOnce` означает, что хранилище может быть смонтировано + только одним подом для чтения и записи. У нас один под и база на SQLite, так что этого достаточно. +- `spec.resources.requests.storage` — запрашиваемый размер хранилища. Мы запрашиваем 1 ГБ и не означает, что + хранилище будет занимать 1 ГБ на диске. Это предельный размер, который сможет занять хранилище. + +Применим pvc-манифест: +```bash +sudo kubectl apply -f ~/k3s/vpn/x-ui/pvc-db.yaml +``` + +После этого Longhorn создаст том, который будет привязан к этому PVC. + +Теперь нам нужно изменить манифест развертывания пода, и подключить к нему созданный PVC. Теперь наш +`~/k3s/vpn/x-ui/deployment.yaml` будет выглядеть так: +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: x-ui + namespace: x-ui +spec: + replicas: 1 + selector: + matchLabels: + app: x-ui + template: + metadata: + labels: + app: x-ui + spec: + hostNetwork: true + containers: + - name: x-ui + image: ghcr.io/mhsanaei/3x-ui:latest + # image: enwaiax/x-ui:latest # альтернативный облегчённый: меньше способов шифрования и китайский интерфейс + volumeMounts: + - name: db-storage + mountPath: /etc/x-ui # Путь к базе данных внутри контейнера + volumes: + - name: db-storage + persistentVolumeClaim: + claimName: x-ui-db-pvc # Ссылка на созданный PVC +``` + +Применим обновлённый манифест: +```bash +sudo kubectl apply -f ~/k3s/vpn/x-ui/deployment.yaml +``` + +Под перезапустится, и теперь база данных будет храниться в постоянном хранилище Longhorn. При перезапуске пода или его +"переезде" на другой узел, база данных останется доступной и не потеряется. + +