Halo, kalau kamu merasa tulisan saya ngebantu, kamu bisa ucapkan terima kasih lewat saweria .

If you feel this website help you, you can donate at saweria .



Di part 1 ini saya bakal share cara deployment di Kubernetes dengan K3s. Yang bakal kita lakukan:

  1. Deploy image trafex/docker-php-nginx

  2. Deploy traefik

  3. Berpusing ria..


Tips Sebelum Memulai Belajar Kubernetes dengan K3s

  1. Belajar docker basic

  2. Baca traefik for beginner

  3. Karena saya belajar docker & traefik pake dockerswarm.rocks , bisa juga belajar di dockerswarm.rocks


Tutorial yang Beneran Minimalis

Tutorial di yang lain suka aneh, bilangnya setup minimalis tapi pake 3 server. Minimalis tapi pake load balancer external. Minimalis tapi pake Kubernetes engine bawaan cloud provider, dll

Ga semua punya akses itu, contohnya saya yang cuma punya server dengan spek rendah.

Dengan semua “kekesalan” itu akhirnya saya menulis tutorial Kubernetes dengan beneran “minimalis” setup.

Berikut server dan tools yang saya gunakan:

  1. K3s

  2. 1 server dengan spek 1 CPU core dan 2 GB RAM

  3. Docker sebagain container runtime (defaultnya K3s pake containerd). Kenapa di ganti? Biar tahu cara kerja K3s, karena saya familiar dengan command-command docker, jadi bisa saya dalami cara kerja K3s.

Semua script di tutorial ini saya modifikasi dari script k3s.rocks , saya modifikasi dengan harapan lebih mudah dipahami.


Install K3s dengan Docker as Container Runtime

  1. Install & setup K3s
# PLEASE USING THIS VERSION (NOT LATEST VERSION)
# IT WAS PAIN TO DEBUG, IF YOU USING OTHER VERSION THAN THIS 
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.26.1+k3s1 sh -s server \
--cluster-init \
--write-kubeconfig-mode 644 \
--docker && \
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
  1. Kita bakal nyiapin traefik sebagai webserver/reverse proxy di K3s kita, buat file traefik-config.yml.

Jalankan kubectl apply -f traefik-config.yml

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    image:
      name: traefik
      tag: v2.9.9
    logs:
      general:
        level: INFO
      access:
        enabled: true

    #dashboard:
    #  enabled: true

    deployment:
      kind: DaemonSet
    hostNetwork: true

    #updateStrategy:
    #  type: RollingUpdate
    #  rollingUpdate:
    #    maxUnavailable: 2

    #additionalArguments:
    #  - "--entryPoints.web.proxyProtocol.insecure"
    #  - "--entryPoints.websecure.proxyProtocol.insecure"    

Deploy App Pertama di K3s

Untuk app pertama kita di K3s, kita akan deploy trafex/docker-php-nginx .

Image nya ini akan buka file php dengan isi phpinfo();

  1. Buat 1 file trafex-deployment.yml, jalankan dengan kubectl apply -f trafex-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: trafex
spec:
  selector:
    matchLabels:
      app: trafex
  replicas: 1
  template:
    metadata:
      labels:
        app: trafex
    spec:
      containers:
        - name: trafex
          image: trafex/php-nginx:latest
          ports:
            - containerPort: 8080
  1. Buat service nya, trafex-service.yml, jalankan dengan kubectl apply -f trafex-service.yml
apiVersion: v1
kind: Service
metadata:
  name: trafex
spec:
  type: ClusterIP
  ports:
    - port: 5678
      targetPort: 8080
  selector:
    app: trafex
  1. Buat ingress nya, trafex-ingress.yml, jalankan dengan kubectl apply -f trafex-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: trafex-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: php.ipang.my.id
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: trafex
                port:
                  number: 5678
Trafex Deploy Sukses

Trafex Deploy Sukses


Traefik Dashboard

  1. Buat file traefik-dashboard-service.yml, jalankan kubectl apply -f traefik-dashboard-service.yml
apiVersion: v1
kind: Service
metadata:
  name: traefik-dashboard
  namespace: kube-system
  labels:
    app.kubernetes.io/instance: traefik
    app.kubernetes.io/name: traefik-dashboard
spec:
  type: ClusterIP
  ports:
  - name: traefik
    port: 9000
    targetPort: traefik
    protocol: TCP
  selector:
    app.kubernetes.io/instance: traefik
    app.kubernetes.io/name: traefik
  1. Buat traefik-dashboard-ingress.yml, jalankan kubectl apply -f traefik-dashboard-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: trepik.ipang.my.id
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: traefik-dashboard
                port:
                  number: 9000

Buka dashboardnya pake domainkamu.com/dashboard/ (JANGAN LUPA path /dashboard/)

Traefik Dashboard

Traefik Dashboard