Kubernetes node-local volume

Kubernetes mempunyai dua tipe didalam node-local volume, yaitu EmptyDir dan HostPath

  • EmptyDir

EmptyDir adalah sebuah volume yang akan dibuat pada node tertentu, jika pod yang memiliki konfigurasi EmptyDir dipetakan di node tertentu. volume ini akan terus ada selama pod berjalan di node tersebut. seperti namanya, EmptyDir mempunyai isi yang kosong. Kontainer yang berada didalam satu pod berbagi volume EmptyDir yang sama.

Buat sebuah pod dengan dua container :

apiVersion:          v1
kind:                Pod
metadata:
  name:              share-emptydir
spec:
  containers:
  - name:            c1
    image:           centos:7
    command:
      - "bin/bash"
      - "-c"
      - "sleep 10000"
    volumeMounts:
      - name:        xchange
        mountPath:   "/tmp/xchange"
  - name:            c2
    image:           centos:7
    command:
      - "bin/bash"
      - "-c"
      - "sleep 10000"
    volumeMounts:
      - name:        xchange
        mountPath:   "/tmp/data"
  volumes:
  - name:            xchange
    emptyDir:        {}

lalu eksekusi dan verifikasi, tambahkan data pada container c1 :

ubuntu@master:~$ kubectl create -f emptydir.yaml 
pod "share-emptydir" created
ubuntu@master:~$ kubectl get pod
NAME                            READY     STATUS    RESTARTS   AGE
nginx-with-pv-b8c9966d5-vhb26   1/1       Running   0          5h
share-emptydir                  2/2       Running   0          21s
ubuntu@master:~$ kubectl exec share-emptydir -c c1 -it -- bash
[root@share-emptydir /]# mount | grep xchange 
/dev/sda1 on /tmp/xchange type ext4 (rw,relatime,errors=remount-ro,data=ordered)
[root@share-emptydir /]# cd /tmp/xchange/
[root@share-emptydir xchange]# ls
[root@share-emptydir xchange]# echo 'somedata' > data
[root@share-emptydir xchange]# ls
data
[root@share-emptydir xchange]# cat data 
somedata
[root@share-emptydir xchange]# exit
exit
ubuntu@master:~$

Verifikasi pada container c2 :

ubuntu@master:~$ kubectl exec share-emptydir -c c2 -it -- bash
[root@share-emptydir /]# cd /tmp/data/
[root@share-emptydir data]# ls
data
[root@share-emptydir data]# cat data 
somedata
[root@share-emptydir data]#
  • HostPath

HostPath adalah sebuah tipe volume yang mengalokasikan sebuah folder atau file didalam sebuah node kedalam pod, dengan terlebih dahulu membuat folder tersebut didalam sebuah node. Bagaimana jika ada banyak node didalam sebuah cluster kubernetes? folder dinode mana yang akan dipilih? ada sebuah fitur yang bernama nodeSelector.

lihat node yang tersedia didalam kubernetes cluster

ubuntu@master:~$ kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    6d        v1.10.4
node0     Ready     <none>    6d        v1.10.4

buat folder didalam node node0

ubuntu@node0:~$ mkdir /tmp/node0-share
ubuntu@node0:~$ cd /tmp/node0-share/
ubuntu@node0:/tmp/node0-share$ echo "node0 node files" > files
ubuntu@node0:/tmp/node0-share$

Buat script untuk podnya

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
spec:
  nodeSelector: 
    kubernetes.io/hostname: node0
  containers:
  - image: centos:7 
    command: 
    - "bin/bash" 
    - "-c" 
    - "sleep 10000"
    name: test-container
    volumeMounts:
    - mountPath: /tmp/nodefolder
      name: node0-volume
  volumes:
  - name: node0-volume 
    hostPath: 
      path: /tmp/node0-share 
      type: Directory 

lakukan deploy :

ubuntu@master:~$ kubectl create -f hostpath.yaml 
pod "hostpath-pod" created
ubuntu@master:~$ kubectl get pod
NAME                            READY     STATUS    RESTARTS   AGE
hostpath-pod                    1/1       Running   0          59s
nginx-with-pv-b8c9966d5-vhb26   1/1       Running   0          6h
share-emptydir                  2/2       Running   0          52m
ubuntu@master:~$ kubectl describe pod hostpath-pod
Name:         hostpath-pod
Namespace:    default
Node:         node0/10.101.101.20
Start Time:   Thu, 28 Jun 2018 09:25:08 -0400
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.244.1.25

pod tersebut dideploy di node0, sesuai dengan nodeSelectornya. Lalu coba masuk terminal dan lakukan verifikasi :

ubuntu@master:~$ kubectl exec hostpath-pod -it -- bash
[root@hostpath-pod /]# cd /tmp/nodefolder/
[root@hostpath-pod nodefolder]# ls
files
[root@hostpath-pod nodefolder]# cat files 
node0 node files
[root@hostpath-pod nodefolder]#

 

Comments are closed.