Kita akan mencoba membuat pod menggunakan YAML file pada Kubernetes. Kubernetes biasanya menggunakan YAML file untuk membuat suatu objek-objek konfigurasi terkait PODs, replica, deployment, service dan lainnya.
Struktur dari YAML file pada Kubernetes itu secara umum memiliki kesamaan dalam 4 level fields paling atas yaitu:
1apiVersion:
2kind:
3metadata:
4
5
6spec:4 fields level ini pasti ada saat kita membuat konfigurasi YAML pada Kubernetes.
Berikut ini beberapa Kind ada perbedaan dalam pengisian apiVersion.
| Kind | apiVersion |
|---|---|
| POD | v1 |
| Service | v1 |
| ReplicaSet | apps/v1 |
| Deployment | apps/v1 |
Sehingga ketika kita ingin membuat suatu POD menggunakan YAML file maka akan seperti dibawah ini.
1apiVersion: v1
2kind: Pod
3metadata:
4
5
6spec:Selanjutnya kita akan mencoba membuat file dengan nama pod-definition.yaml file pada folder code/pod/pod-definition.yaml lalu isi YAML file tersebut seperti dibawah ini.
1apiVersion: v1
2kind: Pod
3metadata:
4 name: myapp-pod
5 labels:
6 app: myapp
7 type: backend
8spec:
9 containers:
10 - name: nginx-container
11 image: nginxBerikut ini definisi dari setiap fields:
metadataini berisikannamedanlabelsyang mana ini bisa kita isi sesuai dengan kebutuhannya yang mana pengisiannya pun dengan strukturkeydanvalue.specini kita set listcontainersyang akan kita buat dalam satu POD tersebut. Pada file tersebut kita hanya satu container saja yang diset dengannamenginx-container denganimagenginx.
Setelah selesai file tersebut dibuat maka kita coba eksekusi file tersebut dengan perintah dibawah ini.
1➜ kubectl apply -f code/pod/pod-definition.yaml
2pod/myapp-pod createdLalu kita lihat apakah sudah terbuat dengan perintah
1➜ kubectl get pods
2NAME READY STATUS RESTARTS AGE
3myapp-pod 0/1 ContainerCreating 0 3sJika kita ingin melihat lebih detail POD yang sudah kita buat bisa dengan perintah dibawah ini
1➜ kubectl describe pod myapp-pod
2Name: myapp-pod
3Namespace: default
4Priority: 0
5Service Account: default
6Node: minikube/192.168.49.2
7Start Time: Sun, 03 Mar 2024 20:19:23 +0700
8Labels: app=myapp
9 type=backend
10Annotations: <none>
11Status: Running
12IP: 10.244.0.23
13IPs:
14 IP: 10.244.0.23
15Containers:
16 nginx-container:
17 Container ID: docker://fdb7680e1a75ab77bdf200d4c17086af2a6604e18d22abc5ea2e26258d80775f
18 Image: nginx
19 Image ID: docker-pullable://nginx@sha256:c26ae7472d624ba1fafd296e73cecc4f93f853088e6a9c13c0d52f6ca5865107
20 Port: <none>
21 Host Port: <none>
22 State: Running
23 Started: Sun, 03 Mar 2024 20:19:26 +0700
24 Ready: True
25 Restart Count: 0
26 Environment: <none>
27 Mounts:
28 /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bfkcl (ro)
29Conditions:
30 Type Status
31 Initialized True
32 Ready True
33 ContainersReady True
34 PodScheduled True
35Volumes:
36 kube-api-access-bfkcl:
37 Type: Projected (a volume that contains injected data from multiple sources)
38 TokenExpirationSeconds: 3607
39 ConfigMapName: kube-root-ca.crt
40 ConfigMapOptional: <nil>
41 DownwardAPI: true
42QoS Class: BestEffort
43Node-Selectors: <none>
44Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
45 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
46Events:
47 Type Reason Age From Message
48 ---- ------ ---- ---- -------
49 Normal Scheduled 64s default-scheduler Successfully assigned default/myapp-pod to minikube
50 Normal Pulling 65s kubelet Pulling image "nginx"
51 Normal Pulled 62s kubelet Successfully pulled image "nginx" in 3.201s (3.201s including waiting)
52 Normal Created 62s kubelet Created container nginx-container
53 Normal Started 62s kubelet Started container nginx-containerInformasi detail dari PODs diatas sangat lengkap sekali sampai kita bisa melihat event dari PODs tersebut ketika ada perubahan yang terjadi pada POD tersebut.