# Инструкция по установке Planka в K3s с использованием Traefik и MetalLB ## 1. Установка MetalLB ```bash kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml ``` ## 2. Настройка пула IP-адресов для MetalLB Создайте файл `metallb-config.yaml`: ```yaml apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: planka-pool namespace: metallb-system spec: addresses: - 192.168.1.240-192.168.1.250 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: planka-advertisement namespace: metallb-system spec: ipAddressPools: - planka-pool ``` Примените конфигурацию: ```bash kubectl apply -f metallb-config.yaml ``` ## 3. Создание пространства имен ```bash kubectl create namespace planka ``` ## 4. Развертывание PostgreSQL Создайте файл `postgres.yaml`: ```yaml apiVersion: v1 kind: Service metadata: name: postgres namespace: planka spec: ports: - port: 5432 selector: app: postgres --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres namespace: planka spec: containers: - name: postgres image: postgres:13 env: - name: POSTGRES_DB value: planka - name: POSTGRES_USER value: plankauser - name: POSTGRES_PASSWORD value: plankapassword volumeMounts: - name: postgres-storage mountPath: /var/lib/postgresql/data volumes: - name: postgres-storage persistentVolumeClaim: claimName: postgres-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc namespace: planka spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` Примените манифест: ```bash kubectl apply -f postgres.yaml ``` ## 5. Создание секрета с учетными данными администратора Создайте файл `planka-admin-secret.yaml`: ```yaml apiVersion: v1 kind: Secret metadata: name: planka-admin-secret namespace: planka type: Opaque data: DEFAULT_ADMIN_EMAIL: YWRtaW5AZXhhbXBsZS5jb20= DEFAULT_ADMIN_PASSWORD: WW91clNlY3VyZVBhc3N3b3Jk DEFAULT_ADMIN_NAME: QWRtaW4= DEFAULT_ADMIN_USERNAME: YWRtaW4= ``` Примените секрет: ```bash kubectl apply -f planka-admin-secret.yaml ``` ## 6. Развертывание Planka Создайте файл `planka.yaml`: ```yaml apiVersion: v1 kind: Service metadata: name: planka namespace: planka annotations: metallb.universe.tf/address-pool: planka-pool spec: type: LoadBalancer ports: - port: 80 targetPort: 1337 selector: app: planka --- apiVersion: apps/v1 kind: Deployment metadata: name: planka namespace: planka spec: containers: - name: planka image: meltyshev/planka:latest env: - name: DATABASE_URL value: postgres://plankauser:plankapassword@postgres.planka.svc.cluster.local:5432/planka - name: SECRET_KEY value: your-secret-key envFrom: - secretRef: name: planka-admin-secret ports: - containerPort: 1337 ``` Примените манифест: ```bash kubectl apply -f planka.yaml ``` ## 7. Настройка Ingress для доступа через Traefik Создайте файл `ingress.yaml`: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: planka-ingress namespace: planka annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: rules: - host: planka.your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: planka port: number: 80 ``` Примените манифест: ```bash kubectl apply -f ingress.yaml ``` ## 8. Настройка DNS Убедитесь, что ваш домен `planka.your-domain.com` указывает на IP-адрес, выделенный MetalLB. **Готово!** Теперь Planka установлена и доступна через ваш домен в кластере K3s.