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:
-
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 imagenginx:1.14.2
:apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
-
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/
- 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
- 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
- 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.