Mengenal Beberapa Objek pada Kubernetes

Objek kubernetes merupakan entitas yang bersifat persitent didalam sistem kubernetes. Kubernetes menggunakan entitas untuk merepresentasikan state cluster. Secara spesifik mendeskripsikan tentang:
a. Aplikasi kontainer mana yang sedang berjalan dan di node berapa
b. Resource yang tersedia dalam aplikasi tersebut
c. Policy yang terdapat pada aplikasi tersebut termasuk restart policy, upgrade dan fault-tolerance.

Untuk menggunakan objek kubernetes, Anda akan tetap membutuhkan kubernetes API untuk berkomunikasi dengan objek kubernetes. Ketika Anda membuat suatu objek Kubernetes, Anda harus menyediakan spec untuk objek tersebut. Misalnya ketika membuat objek deployment, jumlah spec replica sets berapa yang ingin digunakan.
Berikut salah satu contoh konfigurasi file .yaml nya:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Diatas terlihat replica set yang didefine berjumlah 2.

Berikut beberapa penjelasan terkait dengan objek kubernetes:

  1. Pod
    Adalah objek kubernetes yang terkecil, dimana pod merupakan grup berisi satu kontainer atau lebih dan bersifat share storage dan network dengan kontainer yang lainnya. Berikut salah satu file konfigurasi Pod dengan image nginx:1.14.2:

    apiVersion: v1
    kind: Pod
    metadata:
    name: nginx
    spec:
    containers:
    - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
  2. Deployment
    Deployment merupakan objek yang cocok untuk mengelola sebuat workload aplikasi yang stateless pada sebuah cluster. Dimana setiap pod yang berada di dalam deployment bisa ditukar dan diganti sesuai dengan kebutuhan.

Deployment menyediakan update secara deklaratif pada objek Pod dan ReplicaSets.
Anda mendeskripsikan state yang diinginkan pada sebuah deployment, dan deployment controller merubah state yang sebenarnya ke state yang diinginkan. Anda juga bisa mendefinisikan deployment untuk membuat ReplicaSets baru atau menghapus existing deployment dan membuat semua resource pada deployment baru.

Berikut salah satu contoh file konfigurasi objek deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Referensi: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

  1. ReplicaSet
    ReplicaSet bertujuan untuk menjaga agar set replica pod tetap berjalan. Oleh karena itu, sering digunakan untuk menjamin ketersediaan sejumlah Pod yang telah ditentukan.

Berikut salah satu contoh file konfigurasi ReplicaSet:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redisMemahami objek kubernetes
  1. DaemonSet
    DaemonSet mendefinisikan Pod yang menyediakan fasilitas node-local. Hal ini mungkin penting untuk pengoperasian cluster Anda seperti tool networking, atau bagian dari add-onnya.
    Setiap kali Anda menambahkan sebuah node ke cluster Anda yang sesuai dengan spesifikasi dalam sebuah DaemonSet, control plane menjadwalkan sebuah Pod untuk DaemonSet tersebut ke dalam node yang baru.

Berikut contoh salah satu file konfigurasi (.yaml) untuk menjalankan image docker fluentd-elasticsearch:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      # this toleration is to have the daemonset runnable on master nodes
      # remove it if your masters can't run pods
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
  1. Jobs
    Sebuah Job membuat satu Pod atau lebih dan akan terus mencoba mengeksekusi Pod hingga sejumlah Pod yang ditentukan berhasil dihentikan. Saat Pod berhasil diselesaikan, Job akan melacak penyelesaian yang sudah berhasil. Ketika jumlah tertentu dari penyelesaian yang berhasil tercapai, maka job telah selesai.

Sebuah contoh sederhana adalah membuat objek Job untuk deploy satu Pod. Sebuah objek Job akan membuat baru jika Podnya gagal semisal karena kegagalan hardware node atau node mengalami reboot.
Selain itu, Anda juga bisa membuat objek Pod untuk deploy beberapa Pod secara paralel.

Apabila Anda ingin menjalankan objek Pod baik satu atau lebih bahkan secara paralel secara terjadwal bisa memanfaatkan fitur CronJob.

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

Untuk mengenal objek-objek kubernetes yang lain, Anda bisa melihat pada dokumentasi resminya pada link berikut:
Referensi: https://kubernetes.io/docs/concepts/workloads/

Sekian dan terima kasih.

Leave a Reply