homelab-k3s/HELP/Пример.MD
2024-11-02 01:42:32 +03:00

4.2 KiB
Raw Permalink Blame History

Инструкция по установке Planka в K3s с использованием Traefik и MetalLB

1. Установка MetalLB

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml

2. Настройка пула IP-адресов для MetalLB

Создайте файл metallb-config.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

Примените конфигурацию:

kubectl apply -f metallb-config.yaml

3. Создание пространства имен

kubectl create namespace planka

4. Развертывание PostgreSQL

Создайте файл postgres.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

Примените манифест:

kubectl apply -f postgres.yaml

5. Создание секрета с учетными данными администратора

Создайте файл planka-admin-secret.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=

Примените секрет:

kubectl apply -f planka-admin-secret.yaml

6. Развертывание Planka

Создайте файл planka.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

Примените манифест:

kubectl apply -f planka.yaml

7. Настройка Ingress для доступа через Traefik

Создайте файл ingress.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

Примените манифест:

kubectl apply -f ingress.yaml

8. Настройка DNS

Убедитесь, что ваш домен planka.your-domain.com указывает на IP-адрес, выделенный MetalLB.

Готово! Теперь Planka установлена и доступна через ваш домен в кластере K3s.