K8s/N8N

From Chorke Wiki
Jump to navigation Jump to search

K8s » Config

K8s » Config

export KUBECONFIG=${HOME}/.kube/aws-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/dev-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/gcp-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/shahed-aa-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/shahed-ab-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/shahed-ac-kubeconfig.yaml
export KUBECONFIG=${HOME}/.kube/shahed-ae-kubeconfig.yaml
kubectl config get-contexts
kubectl config view

K8s » Storage

K8s » Storage

cat <<'EXE'| sudo bash
          mkdir -p /var/minikube/pvc/n8n/data-n8n-0/
  chown -R 1000:1000 /var/minikube/pvc/n8n/
# chown -R 1000:3000 /var/minikube/pvc/n8n/
EXE
cat <<'YML'| kubectl apply -f -
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: n8n-data-n8n-0
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: hostpath
  hostPath:
    path: /var/hostpath_pv/n8n/data-n8n-0
    type: DirectoryOrCreate
YML



K8s » Database

K8s » Database

ssh -qt shahed@shahed-ae.local.or.tunnel.ip bash
echo -n 'Password: ';read -s N8N_PASSWORD;export N8N_PASSWORD;echo
# Password: sadaqah!

cat << DDL | psql
\! printf '\n'
SELECT 'CREATE DATABASE shahed_n8n' 
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'shahed_n8n')\gexec
CREATE USER shahed_n8n WITH ENCRYPTED PASSWORD '${N8N_PASSWORD}';

GRANT ALL PRIVILEGES ON DATABASE shahed_n8n TO shahed_n8n;
ALTER DATABASE shahed_n8n OWNER TO shahed_n8n;
DDL
echo -n 'Password: ';read -s PGBOUNCER_PASSWORD;export PGBOUNCER_PASSWORD;echo
# Password: sadaqah!

cat << DDL | psql
\! printf '\n'
SELECT 'CREATE DATABASE bouncer' 
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'bouncer')\gexec
CREATE USER bouncer WITH ENCRYPTED PASSWORD '${PGBOUNCER_PASSWORD}';

GRANT ALL PRIVILEGES ON DATABASE bouncer TO bouncer;
ALTER DATABASE bouncer OWNER TO bouncer;
DDL

K8s » Deploy

K8s » Deploy

kubectl config get-contexts
kubectl config view
kubectl create ns   n8n
kubectl get ns|grep n8n
cat <<'ENV'| kubectl -n n8n create configmap n8n --from-env-file=/dev/stdin
N8N_PORT=5678
N8N_HOST=n8n.shahed.biz
N8N_RUNNERS_ENABLED=true
GENERIC_TIMEZONE=Asia/Kuala_Lumpur
WEBHOOK_URL=https://n8n.shahed.biz/
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
ENV

cat <<'ENV'| kubectl -n n8n create secret generic n8n --from-env-file=/dev/stdin
DB_TYPE=postgresdb
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_USER=shahed_n8n
DB_POSTGRESDB_PASSWORD=sadaqah!
DB_POSTGRESDB_DATABASE=shahed_n8n
DB_POSTGRESDB_HOST=pgbouncer.pgbouncer
ENV
cat <<'YML'| kubectl apply -n n8n -f -
---
apiVersion: v1
kind: Service
metadata:
  name: n8n
  namespace: n8n
  labels:
    app.kubernetes.io/name: n8n
    app.kubernetes.io/instance: n8n
    app.kubernetes.io/version: 1.0.0
    app.kubernetes.io/managed-by: kubectl
spec:
  selector:
    app: n8n
  ports:
    - targetPort: 5678
      protocol: TCP
      port: 5678
      name: n8n
  type: ClusterIP
YML
cat <<'YML'| kubectl apply -n n8n -f -
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-n8n-0
  namespace: n8n
  labels:
    app.kubernetes.io/name: n8n
    app.kubernetes.io/instance: n8n
    app.kubernetes.io/version: 1.0.0
    app.kubernetes.io/managed-by: kubectl
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: hostpath
  volumeName: n8n-data-n8n-0

YML
cat <<'YML'| kubectl apply -n n8n -f -
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n
  namespace: n8n
  labels:
    app: n8n
    app.kubernetes.io/name: n8n
    app.kubernetes.io/instance: n8n
    app.kubernetes.io/version: 1.0.0
    app.kubernetes.io/managed-by: kubectl
  annotations:
    kubernetes.io/change-cause: "CKI-1| Initial Deployment"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n
  template:
    metadata:
      labels:
        app: n8n
    spec:
      containers:
        - name: n8n
          image: docker.n8n.io/n8nio/n8n
          ports:
          - containerPort: 5678
            protocol: TCP
            name: n8n
          resources:
            requests:
              cpu: 100m
              memory: 256Mi
            limits:
              cpu: 250m
              memory: 512Mi
          envFrom:
            - secretRef:
                name: n8n
            - configMapRef:
                name: n8n
          volumeMounts:
          - mountPath: /home/node/.n8n
            name: data-n8n-0
      volumes:
        - name: data-n8n-0
          persistentVolumeClaim:
            claimName: data-n8n-0
YML

K8s » Ingress

K8s » Ingress

cat << YML | kubectl apply -n n8n -f -
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: n8n
  namespace: n8n
  labels:
    app.kubernetes.io/name: n8n
    app.kubernetes.io/instance: n8n
    app.kubernetes.io/version: 1.0.0
    app.kubernetes.io/managed-by: kubectl
spec:
  ingressClassName: nginx
  rules:
    - host: n8n.shahed.biz
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: n8n
                port:
                  number: 5678
YML

K8s » Verify

K8s » Verify

xdg-open https://www.cdn77.com/tls-test/result?domain=n8n.shahed.biz
xdg-open https://n8n.shahed.biz
kubectl -n n8n exec -it svc/n8n -c n8n -- ash
kubectl -n n8n exec -it svc/n8n -- ash
kubectl -n n8n logs -f  svc/n8n -c n8n
kubectl -n n8n logs -f  svc/n8n
---
Page: https://n8n.shahed.biz
user: tool.tech@shahed.biz
pass: sadaqah!

K8s » Scaling

K8s » Scaling

cat <<YML | kubectl -n n8n patch deploy/n8n --patch-file=/dev/stdin
---
spec:
  replicas: 0
YML

cat <<YML | kubectl -n n8n patch deploy/n8n --patch-file=/dev/stdin
---
spec:
  replicas: 1
YML

K8s » Rolling

K8s » Rollout

kubectl -n n8n rollout history deploy/n8n
kubectl -n n8n rollout pause   deploy/n8n

cat <<YML | kubectl -n n8n patch deploy/n8n --patch-file=/dev/stdin
---
metadata:
  annotations:
    kubernetes.io/change-cause: "CKI-2| Container Updated"
spec:
  template:
    spec:
      containers:
        - name: n8n
          image: edoburu/n8n:v1.24.1-p1
YML

kubectl -n n8n annotate        deploy/n8n --overwrite \
 kubernetes.io/change-cause="CKI-2| Image Updated"

kubectl -n n8n rollout resume  deploy/n8n
kubectl -n n8n rollout history deploy/n8n
kubectl -n n8n rollout undo    deploy/n8n --to-revision=1
kubectl -n n8n rollout history deploy/n8n

kubectl -n n8n annotate        deploy/n8n --overwrite \
 kubernetes.io/change-cause="CKI-3| Revert Back to CKI-1"

kubectl -n n8n rollout history deploy/n8n

K8s » Delete

K8s » Delete

kubectl delete svc    --all -n n8n
kubectl delete deploy --all -n n8n
kubectl delete pvc    --all -n n8n
kubectl delete pv     n8n-data-n8n-0
kubectl delete all    --all -n n8n
kubectl delete ns     n8n

Playground

Playground

kubectl -n n8n get secret n8n -o json|jq -r '.data."DB_POSTGRESDB_PASSWORD"'|base64 -d;echo
kubectl -n n8n get cm     n8n -o json|jq -r '.data."GENERIC_TIMEZONE"';echo
kubectl -n n8n rollout history deploy/n8n
kubectl -n n8n rollout restart deploy/n8n
kubectl -n n8n rollout undo    deploy/n8n
kubectl -n n8n rollout pause   deploy/n8n
kubectl -n n8n rollout resume  deploy/n8n
kubectl -n n8n rollout status  deploy/n8n
kubectl delete svc    --all -n n8n
kubectl delete deploy --all -n n8n
kubectl delete pvc    --all -n n8n
kubectl delete pv     n8n-data-n8n-0
kubectl delete all    --all -n n8n
kubectl delete ns     n8n
kubectl -n n8n exec -it svc/n8n -c n8n -- ash
kubectl -n n8n exec -it svc/n8n -- ash

kubectl -n n8n logs -f  svc/n8n -c n8n
kubectl -n n8n logs -f  svc/n8n

References

References