kubernetes4

post subtitle

By widehyo
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ cat pvc.yml 
apiVersion: v1  ##「표1PersistentVolumeClaim v1 core」
kind: PersistentVolumeClaim
metadata:       ##「표2 ObjectMeta v1 meta」
  name: data1
spec:           ##「표3 PersistentVolumeClaimSpec v1 core」
  accessModes:
  - ReadWriteOnce
  storageClassName: standard
  resources:
    requests:
      storage: 2Gi
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  volumes:               ##「표5 Volume v1 core」참고
  - name: pvc1
    persistentVolumeClaim:
      claimName: data1   ## <-- PVC의 이름 설정
  containers:
  - name: ubuntu
    image: ubuntu:16.04
    volumeMounts:        ## 「표6 VolumeMount v1 core」참고
    - name: pvc1
      mountPath: /mnt    ## <-- 컨테이너 상 마운트 경로
    command: ["/usr/bin/tail","-f","/dev/null"]      

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl apply -f pod.yml 
pod/pod1 created
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get po
NAME   READY   STATUS    RESTARTS   AGE
pod1   0/1     Pending   0          5s
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl apply -f pvc.yml 
persistentvolumeclaim/data1 created
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get po
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     ContainerCreating   0          32s
^C ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get all
NAME       READY   STATUS    RESTARTS   AGE
pod/pod1   1/1     Running   0          60s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   28h
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get storageclass
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
standard (default)   k8s.io/minikube-hostpath   Delete          Immediate           false                  28h
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get po -o wide
NAME   READY   STATUS    RESTARTS   AGE    IP           NODE           NOMINATED NODE   READINESS GATES
pod1   1/1     Running   0          104s   10.244.1.2   minikube-m02   <none>           <none>
 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl exec -it pod1 -- bash
root@pod1:/# lsblk
NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdd    8:48   0     1T  0 disk /etc/hosts
sdb    8:16   0   186M  1 disk 
sdc    8:32   0     2G  0 disk [SWAP]
sda    8:0    0 388.6M  1 disk 
root@pod1:/# df
Filesystem      1K-blocks      Used Available Use% Mounted on
overlay        1055762868 138765852 863293544  14% /
tmpfs               65536         0     65536   0% /dev
/dev/sdd       1055762868 138765852 863293544  14% /mnt
shm                 65536         0     65536   0% /dev/shm
tmpfs             8003792        12   8003780   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs             4001896         0   4001896   0% /proc/acpi
tmpfs             4001896         0   4001896   0% /proc/scsi
tmpfs             4001896         0   4001896   0% /sys/firmware
root@pod1:/# mount
/dev/sdd on /mnt type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM           STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-a9034bc9-d9c3-43c9-815f-d7316fba34cf   2Gi        RWO            Delete           Bound    default/data1   standard       <unset>                          7m38s

NAME                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/data1   Bound    pvc-a9034bc9-d9c3-43c9-815f-d7316fba34cf   2Gi        RWO            standard       <unset>                 7m38s
  • NFS persistentVolume
    • install nfs
 ~ $ sudo apt install nfs-kernel-server
 ~ $ sudo mkdir -p /srv/nfs/shared
 ~ $ sudo chown nobody:nogroup !$
sudo chown nobody:nogroup /srv/nfs/shared
 ~ $ echo "/srv/nfs/shared client_ip_address(rw,sync,no_subtree_check)" | tee -a /etc/exports 
tee: /etc/exports: Permission denied
/srv/nfs/shared client_ip_address(rw,sync,no_subtree_check)
 ~ $ kubectl get node -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION                     CONTAINER-RUNTIME
minikube       Ready    control-plane   29h   v1.35.1   192.168.49.2   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
minikube-m02   Ready    <none>          29h   v1.35.1   192.168.49.3   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
minikube-m03   Ready    <none>          29h   v1.35.1   192.168.49.4   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
 ~ $ echo "/srv/nfs/shared 192.168.49.0/24(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
/srv/nfs/shared 192.168.49.0/24(rw,sync,no_subtree_check,no_root_squash)
 ~ $ tail !$
tail /etc/exports
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/srv/nfs/shared 192.168.49.0/24(rw,sync,no_subtree_check,no_root_squash)

 ~ $ sudo exportfs -a
 ~ $ sudo systemctl restart nfs-kernel-server
 ~ $ sudo exportfs -v
/srv/nfs/shared
                192.168.49.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

 ~ $ sudo ufw allow from 192.168.49.2 to any port nfs
Rules updated
 ~ $ sudo ufw allow from 192.168.49.3 to any port nfs
Rules updated
 ~ $ sudo ufw allow from 192.168.49.4 to any port nfs
Rules updated

 ~ $ sudo ufw status
Status: inactive


 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ minikube ssh
Linux minikube 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun  5 18:30:46 UTC 2025 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
docker@minikube:~$ ip route
default via 192.168.49.1 dev eth0 
10.244.0.2 dev vethb327c39a scope host 
10.244.1.0/24 via 192.168.49.3 dev eth0 
10.244.2.0/24 via 192.168.49.4 dev eth0 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.49.0/24 dev eth0 proto kernel scope link src 192.168.49.2 


`nfs-pvc.yml`
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-1
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: "" ## PV를 라벨로 매치하기 위해 Null을 설정
  resources:
    requests:
      storage: "100Mi"
  selector:            ## 대응하는 PV의 라벨을 설정 
    matchLabels:
      name: pv-nfs-1

`nfs-pv.yml`
## 「표7  PersistentVolume v1 core」참고
apiVersion: v1
kind: PersistentVolume
metadata:       ## 표8 참고
  name: nfs-1
  labels:
    name: pv-nfs-1
spec:           ## 표9 참고
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteMany
  nfs:          ## 표10참고
    server: 192.168.49.1  ## Vagrant상의 NFS서버 IP주소
    path: /srv/nfs/shared         ## NFS서버 공개 경로 

`nfs-client.yml`
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ubuntu
  template:
    metadata:
      labels:
        app: ubuntu
    spec:
      containers:
      - name: ubuntu
        image: ubuntu:16.04
        volumeMounts:
        - name: nfs
          mountPath: /mnt
        command: ["/usr/bin/tail","-f","/dev/null"]
      volumes:
      - name: nfs
        persistentVolumeClaim:
          claimName: nfs-1



# ~ $ sudo vi /etc/exports # /srv/nfs/shared 192.168.49.*(rw,sync,no_subtree_check,no_root_squash)
# ~ $ sudo exportfs -a
# ~ $ sudo systemctl restart nfs-kernel-server
# ~ $ sudo exportfs -v 
# /srv/nfs/shared
#                 192.168.49.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) # fails

 ~ $ minikube ssh
docker@minikube:~$ sudo mkdir /mnt/test
docker@minikube:~$ sudo mount -t nfs 192.168.49.1:/srv/nfs/shared /mnt/test
Created symlink /run/systemd/system/remote-fs.target.wants/rpc-statd.service → /lib/systemd/system/rpc-statd.service.
mount.nfs: access denied by server while mounting 192.168.49.1:/srv/nfs/shared

# ~ $ sudo vi /etc/exports # /srv/nfs/shared 192.168.49.0/24(rw,sync,no_subtree_check,no_root_squash)
# ~ $ sudo exportfs -a
# ~ $ sudo systemctl restart nfs-kernel-server
# ~ $ sudo exportfs -v 
# /srv/nfs/shared
#                 192.168.49.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

 ~ $ minikube ssh
docker@minikube:~$ ls /mnt
test
docker@minikube:~$ sudo mount -t nfs 192.168.49.1:/srv/nfs/shared /mnt/test
docker@minikube:~$ df -h
Filesystem                    Size  Used Avail Use% Mounted on
overlay                      1007G  133G  824G  14% /
tmpfs                          64M     0   64M   0% /dev
shm                            64M   84K   64M   1% /dev/shm
tmpfs                         3.9G  8.0K  3.9G   1% /tmp
tmpfs                         3.9G   12M  3.9G   1% /run
/dev/sdd                     1007G  133G  824G  14% /var
none                          3.9G     0  3.9G   0% /usr/lib/modules/6.6.87.2-microsoft-standard-WSL2
tmpfs                         5.0M     0  5.0M   0% /run/lock
192.168.49.1:/srv/nfs/shared 1007G  133G  824G  14% /mnt/test

docker@minikube:~$ sudo umount /mnt/test
docker@minikube:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay        1007G  133G  824G  14% /
tmpfs            64M     0   64M   0% /dev
shm              64M   84K   64M   1% /dev/shm
tmpfs           3.9G  8.0K  3.9G   1% /tmp
tmpfs           3.9G   12M  3.9G   1% /run
/dev/sdd       1007G  133G  824G  14% /var
none            3.9G     0  3.9G   0% /usr/lib/modules/6.6.87.2-microsoft-standard-WSL2
tmpfs           5.0M     0  5.0M   0% /run/lock

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ kubectl get po,pv,pvc
NAME                              READY   STATUS    RESTARTS   AGE
pod/nfs-client-6688d767bf-9s4dw   1/1     Running   0          12m
pod/nfs-client-6688d767bf-b2zk4   1/1     Running   0          12m

NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM           STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/nfs-1   100Mi      RWX            Retain           Bound    default/nfs-1                  <unset>                          12m

NAME                          STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/nfs-1   Bound    nfs-1    100Mi      RWX                           <unset>                 12m


 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ kubectl exec -it pod/nfs-client-6688d767bf-9s4dw -- bash
root@nfs-client-6688d767bf-9s4dw:/# df -h
Filesystem                    Size  Used Avail Use% Mounted on
overlay                      1007G  133G  824G  14% /
tmpfs                          64M     0   64M   0% /dev
192.168.49.1:/srv/nfs/shared 1007G  133G  824G  14% /mnt
shm                            64M     0   64M   0% /dev/shm
/dev/sdd                     1007G  133G  824G  14% /etc/hosts
tmpfs                         7.7G   12K  7.7G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                         3.9G     0  3.9G   0% /proc/acpi
tmpfs                         3.9G     0  3.9G   0% /proc/scsi
tmpfs                         3.9G     0  3.9G   0% /sys/firmware
root@nfs-client-6688d767bf-9s4dw:/# touch /mnt/from_nfs-client-6688d767bf-9s4dw
root@nfs-client-6688d767bf-9s4dw:/# exit

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ ls -l /srv/nfs/shared/
total 0
-rw-r--r-- 1 root root 0 Mar 23 21:16 from_nfs-client-6688d767bf-9s4dw

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ kubectl exec -it pod/nfs-client-6688d767bf-b2zk4 -- bash
root@nfs-client-6688d767bf-b2zk4:/# ls /mnt 
from_nfs-client-6688d767bf-9s4dw
root@nfs-client-6688d767bf-b2zk4:/# touch /mnt/from_nfs-client-6688d767bf-b2zk4
root@nfs-client-6688d767bf-b2zk4:/# ls -l /mnt
total 0
-rw-r--r-- 1 root root 0 Mar 23 12:16 from_nfs-client-6688d767bf-9s4dw
-rw-r--r-- 1 root root 0 Mar 23 12:18 from_nfs-client-6688d767bf-b2zk4

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ ls -l /srv/nfs/shared/
total 0
-rw-r--r-- 1 root root 0 Mar 23 21:16 from_nfs-client-6688d767bf-9s4dw
-rw-r--r-- 1 root root 0 Mar 23 21:18 from_nfs-client-6688d767bf-b2zk4

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/nfs $ kubectl exec -it pod/nfs-client-6688d767bf-9s4dw -- bash
root@nfs-client-6688d767bf-9s4dw:/# ls -l /mnt 
total 0
-rw-r--r-- 1 root root 0 Mar 23 12:16 from_nfs-client-6688d767bf-9s4dw
-rw-r--r-- 1 root root 0 Mar 23 12:18 from_nfs-client-6688d767bf-b2zk4

 ~/gitclone/playground/reading/57_15_step_de_shutoku_docker_kara_hairu_kubernetes/15_DandK/step11/minikube-pvc $ kubectl get po -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
nfs-client-6688d767bf-9s4dw   1/1     Running   0          36m   10.244.2.2   minikube-m03   <none>           <none>
nfs-client-6688d767bf-b2zk4   1/1     Running   0          36m   10.244.1.3   minikube-m02   <none>           <none>


 ~ $ sudo systemctl status nfs-kernel-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2026-03-23 21:10:08 KST; 16min ago
    Process: 39651 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Process: 39652 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
   Main PID: 39652 (code=exited, status=0/SUCCESS)
        CPU: 22ms

Mar 23 21:10:10 Win11-01 systemd[1]: Starting NFS server and services...
Mar 23 21:10:08 Win11-01 systemd[1]: Finished NFS server and services.
 ~ $ sudo systemctl disable !$
sudo systemctl disable nfs-kernel-server
Synchronizing state of nfs-kernel-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable nfs-kernel-server
Removed /etc/systemd/system/multi-user.target.wants/nfs-server.service.
 ~ $ sudo systemctl status nfs-kernel-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/lib/systemd/system/nfs-server.service; disabled; vendor preset: enabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
             └─order-with-mounts.conf
     Active: active (exited) since Mon 2026-03-23 21:10:08 KST; 16min ago
   Main PID: 39652 (code=exited, status=0/SUCCESS)
        CPU: 22ms

Mar 23 21:10:10 Win11-01 systemd[1]: Starting NFS server and services...
Mar 23 21:10:08 Win11-01 systemd[1]: Finished NFS server and services.

 ~ $ cat mysql-sts.yml 
apiVersion: v1
kind: Service
metadata:
  name: mysql        ## 이 이름이 k8s내 DNS에 등록됨. 
  labels:
    app: mysql-sts
spec:
  ports:
  - port: 3306
    name: mysql
  clusterIP: None    ## 특징① 헤드리스 서비스 설정
  selector:
    app: mysql-sts   ## 후술하는 스테이트풀셋과 연결시키는 라벨
---
## MySQL 스테이트풀셋
#
apiVersion: apps/v1         ## 표1 스테이트풀셋 참고
kind: StatefulSet
metadata:
  name: mysql
spec:                       ## 표2 스테이트풀셋 사양
  serviceName: mysql        ## 특징② 연결할 서비스의 이름 설정
  replicas: 1               ## 파드 기동 개수
  selector:
    matchLabels:
      app: mysql-sts
  template:                 ## 표3 파드의 템플릿
    metadata:
      labels:
        app: mysql-sts
    spec:
      containers:           
      - name: mysql
        image: mysql:5.7    ## Docker Hub MySQL 리포지터리 지정
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: qwerty
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:       ## 특징③ 컨테이너상의 마운트 경로 설정 
        - name: pvc
          mountPath: /var/lib/mysql
          subPath: data     ## 초기화 시 빈 디렉터리가 필요
        livenessProbe:      ## MySQL 기동 확인 
          exec:
            command: ["mysqladmin","-p$MYSQL_ROOT_PASSWORD","ping"]
          initialDelaySeconds: 60
          timeoutSeconds: 10
  volumeClaimTemplates:     ## 특징④볼륨 요구 템플릿
  - metadata:
      name: pvc
    spec:                   ## 표4 퍼시스턴트볼륨 요구 스펙
      accessModes: [ "ReadWriteOnce" ]
      ## 환경에 맞게 선택하여, sotrage의 값을 편집
      #storageClassName: ibmc-file-bronze   # 용량 20Gi IKS
      #storageClassName: gluster-heketi     # 용량 12Gi GlusterFS
      storageClassName: standard            # 용량 2Gi  Minikube/GKE
      resources:
        requests:
          storage: 2Gi

 ~ $ kubectl describe pod !$
kubectl describe pod mysql-0
Name:             mysql-0
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube-m03/192.168.49.4
Start Time:       Mon, 23 Mar 2026 21:57:56 +0900
Labels:           app=mysql-sts
                  apps.kubernetes.io/pod-index=0
                  controller-revision-hash=mysql-85c4b895c5
                  statefulset.kubernetes.io/pod-name=mysql-0
Annotations:      <none>
Status:           Pending
IP:               10.244.2.3
IPs:
  IP:           10.244.2.3
Controlled By:  StatefulSet/mysql
Containers:
  mysql:
    Container ID:   
    Image:          mysql:5.7
    Image ID:       
    Port:           3306/TCP (mysql)
    Host Port:      0/TCP (mysql)
    State:          Waiting
      Reason:       CreateContainerConfigError
    Ready:          False
    Restart Count:  0
    Liveness:       exec [mysqladmin -p$MYSQL_ROOT_PASSWORD ping] delay=60s timeout=10s period=10s #success=1 #failure=3
    Environment:
      MYSQL_ROOT_PASSWORD:  qwerty
    Mounts:
      /var/lib/mysql from pvc (rw,path="data")
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mqbtj (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  pvc:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pvc-mysql-0
    ReadOnly:   false
  kube-api-access-mqbtj:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  35s                default-scheduler  0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. not found
  Warning  FailedScheduling  34s (x2 over 35s)  default-scheduler  0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. not found
  Normal   Scheduled         34s                default-scheduler  Successfully assigned default/mysql-0 to minikube-m03
  Normal   Pulled            4s (x5 over 35s)   kubelet            spec.containers{mysql}: Container image "mysql:5.7" already present on machine and can be accessed by the pod
  Warning  Failed            4s (x5 over 35s)   kubelet            spec.containers{mysql}: Error: stat /tmp/hostpath-provisioner/default/pvc-mysql-0: no such file or directory

 $ kubectl get po,pv,pvc,svc
NAME          READY   STATUS                       RESTARTS   AGE
pod/mysql-0   0/1     CreateContainerConfigError   0          2m56s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            Delete           Bound    default/pvc-mysql-0   standard       <unset>                          2m56s

NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/pvc-mysql-0   Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 2m56s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    30h
service/mysql        ClusterIP   None         <none>        3306/TCP   2m57s



 ~ $ kubectl get node -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION                     CONTAINER-RUNTIME
minikube       Ready    control-plane   30h   v1.35.1   192.168.49.2   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
minikube-m02   Ready    <none>          30h   v1.35.1   192.168.49.3   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
minikube-m03   Ready    <none>          30h   v1.35.1   192.168.49.4   <none>        Debian GNU/Linux 12 (bookworm)   6.6.87.2-microsoft-standard-WSL2   docker://29.2.1
 ~/gitclone/15_DandK/step11/nfs $ minikube ssh --node minikube-m02
Linux minikube-m02 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun  5 18:30:46 UTC 2025 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
docker@minikube-m02:~$ ls /tmp/hostpath-provisioner/default/pvc-mysql-0
ls: cannot access '/tmp/hostpath-provisioner/default/pvc-mysql-0': No such file or directory
docker@minikube-m02:~$ 
logout
ssh: Process exited with status 2
 ~ $ minikube ssh --node minikube-m03
Linux minikube-m03 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun  5 18:30:46 UTC 2025 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
docker@minikube-m03:~$ ls /tmp/hostpath-provisioner/default/pvc-mysql-0
ls: cannot access '/tmp/hostpath-provisioner/default/pvc-mysql-0': No such file or directory
docker@minikube-m03:~$ 
logout
ssh: Process exited with status 2
 ~ $ minikube ssh
Linux minikube 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun  5 18:30:46 UTC 2025 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
docker@minikube:~$ ls /tmp/hostpath-provisioner/default/pvc-mysql-0
docker@minikube:~$ 



 ~ $ cat mysql-sts-nfs-pv.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-nfs-pv
  labels:
    app: mysql
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.49.1
    path: /srv/nfs/shared
 ~ $ cat mysql-sts-nfs-pvc.yml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      app: mysql

 ~ $ kubectl apply -f mysql-sts-nfs-pv.yml 
persistentvolume/mysql-nfs-pv created
 ~ $ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                 STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
mysql-nfs-pv                               2Gi        RWX            Retain           Available                                        <unset>                          6s
pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            Delete           Bound       default/pvc-mysql-0   standard       <unset>                          13m
 ~ $ kubectl get pvc
NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
pvc-mysql-0   Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 13m
 ~ $ kubectl apply -f mysql-sts-nfs-pvc.yml 
persistentvolumeclaim/mysql-nfs-pvc created
 ~ $ kubectl get pvc
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
mysql-nfs-pvc   Bound    mysql-nfs-pv                               2Gi        RWX                           <unset>                 5s
pvc-mysql-0     Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 14m


 ~ $ kubectl apply -f mysql-sts.yml
service/mysql unchanged
The StatefulSet "mysql" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'revisionHistoryLimit', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds
' are forbidden
 ~ $ cat mysql-sts.yml 
apiVersion: v1
kind: Service
metadata:
  name: mysql        ## 이 이름이 k8s내 DNS에 등록됨. 
  labels:
    app: mysql-sts
spec:
  ports:
  - port: 3306
    name: mysql
  clusterIP: None    ## 특징① 헤드리스 서비스 설정
  selector:
    app: mysql-sts   ## 후술하는 스테이트풀셋과 연결시키는 라벨
---
## MySQL 스테이트풀셋
#
apiVersion: apps/v1         ## 표1 스테이트풀셋 참고
kind: StatefulSet
metadata:
  name: mysql
spec:                       ## 표2 스테이트풀셋 사양
  serviceName: mysql        ## 특징② 연결할 서비스의 이름 설정
  replicas: 1               ## 파드 기동 개수
  selector:
    matchLabels:
      app: mysql-sts
  template:                 ## 표3 파드의 템플릿
    metadata:
      labels:
        app: mysql-sts
    spec:
      containers:           
      - name: mysql
        image: mysql:5.7    ## Docker Hub MySQL 리포지터리 지정
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: qwerty
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:       ## 특징③ 컨테이너상의 마운트 경로 설정 
        - name: mysql-storage
          mountPath: /var/lib/mysql
          subPath: data     ## 초기화 시 빈 디렉터리가 필요
        livenessProbe:      ## MySQL 기동 확인 
          exec:
            command: ["mysqladmin","-p$MYSQL_ROOT_PASSWORD","ping"]
          initialDelaySeconds: 60
          timeoutSeconds: 10
      volumes:
      - name: mysql-storage
        persistentVolumeClaim:
          claimName: mysql-nfs-pvc

 ~ $ kubectl delete sts mysql
statefulset.apps "mysql" deleted from default namespace
 ~ $ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    30h
service/mysql        ClusterIP   None         <none>        3306/TCP   20m
 ~ $ kubectl get po,pv,pvc,sts
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/mysql-nfs-pv                               2Gi        RWX            Retain           Bound    default/mysql-nfs-pvc                  <unset>                          7m14s
persistentvolume/pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            Delete           Bound    default/pvc-mysql-0     standard       <unset>                          20m

NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/mysql-nfs-pvc   Bound    mysql-nfs-pv                               2Gi        RWX                           <unset>                 6m44s
persistentvolumeclaim/pvc-mysql-0     Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 20m
 ~ $ kubectl apply -f !$
kubectl apply -f mysql-sts.yml
service/mysql unchanged
statefulset.apps/mysql created

 ~ $ kubectl get po,pv,pvc,svc,sts
NAME          READY   STATUS    RESTARTS   AGE
pod/mysql-0   1/1     Running   0          54s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/mysql-nfs-pv                               2Gi        RWX            Retain           Bound    default/mysql-nfs-pvc                  <unset>                          8m26s
persistentvolume/pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            Delete           Bound    default/pvc-mysql-0     standard       <unset>                          21m

NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/mysql-nfs-pvc   Bound    mysql-nfs-pv                               2Gi        RWX                           <unset>                 7m56s
persistentvolumeclaim/pvc-mysql-0     Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 21m

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    30h
service/mysql        ClusterIP   None         <none>        3306/TCP   21m

NAME                     READY   AGE
statefulset.apps/mysql   1/1     54s

 ~ $ kubectl exec -it mysql-0 -- bash
bash-4.2# mysql -u root -pqwerty
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database hello;
Query OK, 1 row affected (0.03 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hello              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> ^DBye
bash-4.2# exit

 ~ $ kubectl delete -f mysql-sts.yml 
service "mysql" deleted from default namespace
statefulset.apps "mysql" deleted from default namespace
 ~ $ kubectl get svc,sts,po,pvc,pv
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   30h

NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/mysql-nfs-pvc   Bound    mysql-nfs-pv                               2Gi        RWX                           <unset>                 10m
persistentvolumeclaim/pvc-mysql-0     Bound    pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            standard       <unset>                 24m

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/mysql-nfs-pv                               2Gi        RWX            Retain           Bound    default/mysql-nfs-pvc                  <unset>                          10m
persistentvolume/pvc-65a320a5-e98a-4091-88d6-6e6d41e76901   2Gi        RWO            Delete           Bound    default/pvc-mysql-0     standard       <unset>                          24m
 ~ $ ls /srv/nfs/shared/
data/                             from_nfs-client-6688d767bf-9s4dw  from_nfs-client-6688d767bf-b2zk4  
 ~ $ ls /srv/nfs/shared/data/
auto.cnf  ca-key.pem  ca.pem  client-cert.pem  client-key.pem  hello  ib_buffer_pool  ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.sock  performance_schema  private_key.pem  public_key.pem  server-cert.pem  server-key.pem  sys


 ~ $ !?exec
kubectl exec -it mysql-0 -- bash
bash-4.2# mysql -u root -pqwerty
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hello              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

 ~ $ kubectl get po -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
mysql-0   1/1     Running   0          67s   10.244.2.4   minikube-m03   <none>           <none>
 ~/gitclone/15_DandK/step12 $ kubectl drain minikube-m03
node/minikube-m03 cordoned
error: unable to drain node "minikube-m03" due to error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/kindnet-bg6xj, kube-system/kube-proxy-2ldz2, continuing command...
There are pending nodes to be drained:
 minikube-m03
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/kindnet-bg6xj, kube-system/kube-proxy-2ldz2

# WARNING: transaction on mysql will be canceled and rollback.
#          plan carefully.
 ~ $ kubectl drain minikube-m03 --ignore-daemonsets
node/minikube-m03 already cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/kindnet-bg6xj, kube-system/kube-proxy-2ldz2
evicting pod default/mysql-0
pod/mysql-0 evicted
node/minikube-m03 drained
 ~ $ kubectl get po -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
mysql-0   1/1     Running   0          11s   10.244.1.5   minikube-m02   <none>           <none>


 ~/gitclone/15_DandK/step12/liberator $ kubectl apply -f daemonset.yml 
daemonset.apps/liberator created
 ~/gitclone/15_DandK/step12/liberator $ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   31h
 ~/gitclone/15_DandK/step12/liberator $ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS              RESTARTS      AGE
kube-system   coredns-7d764666f9-8698l           1/1     Running             2 (29m ago)   31h
kube-system   etcd-minikube                      1/1     Running             2 (28m ago)   31h
kube-system   kindnet-bg6xj                      1/1     Running             2 (29m ago)   31h
kube-system   kindnet-dwdnx                      1/1     Running             0             28m
kube-system   kindnet-k8ztd                      1/1     Running             2 (29m ago)   31h
kube-system   kube-apiserver-minikube            1/1     Running             2 (28m ago)   31h
kube-system   kube-controller-manager-minikube   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-2ldz2                   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-l6k6z                   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-vgct6                   1/1     Running             0             28m
kube-system   kube-scheduler-minikube            1/1     Running             2 (29m ago)   31h
kube-system   storage-provisioner                1/1     Running             4 (28m ago)   31h
tkr-system    liberator-ghpxv                    0/1     ContainerCreating   0             11s
tkr-system    liberator-rl5q9                    0/1     ContainerCreating   0             11s
tkr-system    liberator-skznw                    0/1     ContainerCreating   0             11s
 ~/gitclone/15_DandK/step12/liberator $ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS              RESTARTS      AGE
kube-system   coredns-7d764666f9-8698l           1/1     Running             2 (29m ago)   31h
kube-system   etcd-minikube                      1/1     Running             2 (29m ago)   31h
kube-system   kindnet-bg6xj                      1/1     Running             2 (29m ago)   31h
kube-system   kindnet-dwdnx                      1/1     Running             0             28m
kube-system   kindnet-k8ztd                      1/1     Running             2 (29m ago)   31h
kube-system   kube-apiserver-minikube            1/1     Running             2 (29m ago)   31h
kube-system   kube-controller-manager-minikube   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-2ldz2                   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-l6k6z                   1/1     Running             2 (29m ago)   31h
kube-system   kube-proxy-vgct6                   1/1     Running             0             28m
kube-system   kube-scheduler-minikube            1/1     Running             2 (29m ago)   31h
kube-system   storage-provisioner                1/1     Running             4 (28m ago)   31h
tkr-system    liberator-ghpxv                    0/1     ContainerCreating   0             19s
tkr-system    liberator-rl5q9                    0/1     ContainerCreating   0             19s
tkr-system    liberator-skznw                    0/1     ContainerCreating   0             19s
 ~/gitclone/15_DandK/step12/liberator $ kubectl get po -n tkr-system -o wide
NAME              READY   STATUS              RESTARTS   AGE   IP       NODE           NOMINATED NODE   READINESS GATES
liberator-ghpxv   0/1     ContainerCreating   0          36s   <none>   minikube-m02   <none>           <none>
liberator-rl5q9   0/1     ContainerCreating   0          36s   <none>   minikube       <none>           <none>
liberator-skznw   0/1     ContainerCreating   0          36s   <none>   minikube-m03   <none>           <none>
 ~/gitclone/15_DandK/step12/liberator $ kubectl get po -n tkr-system -o wide -w
NAME              READY   STATUS              RESTARTS   AGE   IP       NODE           NOMINATED NODE   READINESS GATES
liberator-ghpxv   0/1     ContainerCreating   0          40s   <none>   minikube-m02   <none>           <none>
liberator-rl5q9   0/1     ContainerCreating   0          40s   <none>   minikube       <none>           <none>
liberator-skznw   0/1     ContainerCreating   0          40s   <none>   minikube-m03   <none>           <none>
^C ~/gitclone/15_DandK/step12/liberator $ kubectl describe liberator-ghpxv -n tkr-system
error: the server doesn't have a resource type "liberator-ghpxv"
 ~/gitclone/15_DandK/step12/liberator $ kubectl describe po liberator-ghpxv -n tkr-system
Name:             liberator-ghpxv
Namespace:        tkr-system
Priority:         0
Service Account:  high-availability
Node:             minikube-m02/192.168.49.3
Start Time:       Mon, 23 Mar 2026 23:19:45 +0900
Labels:           controller-revision-hash=b55cf7f88
                  name=liberator
                  pod-template-generation=1
Annotations:      <none>
Status:           Running
IP:               10.244.1.2
IPs:
  IP:           10.244.1.2
Controlled By:  DaemonSet/liberator
Containers:
  liberator:
    Container ID:   docker://2119af8f39d37c21bebf49d48984d4fa995927698ef8156b661ec1709a62307d
    Image:          maho/liberator:0.1
    Image ID:       docker-pullable://maho/liberator@sha256:798767cf3d54910b349ca0208b4c534f95a12ec09bf236341273ec021cdc1122
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Mon, 23 Mar 2026 23:20:46 +0900
    Ready:          True
    Restart Count:  0
    Limits:
      memory:  200Mi
    Requests:
      cpu:        100m
      memory:     200Mi
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-m2ggl (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       True 
  ContainersReady             True 
  PodScheduled                True 
Volumes:
  kube-api-access-m2ggl:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    Optional:                false
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/disk-pressure:NoSchedule op=Exists
                             node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists
                             node.kubernetes.io/pid-pressure:NoSchedule op=Exists
                             node.kubernetes.io/unreachable:NoExecute op=Exists
                             node.kubernetes.io/unschedulable:NoSchedule op=Exists
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  70s   default-scheduler  Successfully assigned tkr-system/liberator-ghpxv to minikube-m02
  Normal  Pulling    70s   kubelet            spec.containers{liberator}: Pulling image "maho/liberator:0.1"
  Normal  Pulled     9s    kubelet            spec.containers{liberator}: Successfully pulled image "maho/liberator:0.1" in 1m4.826s (1m4.826s including waiting). Image size: 455549158 bytes.
  Normal  Created    9s    kubelet            spec.containers{liberator}: Container created
  Normal  Started    9s    kubelet            spec.containers{liberator}: Container started
 ~/gitclone/15_DandK/step12/liberator $ kubectl get po -n tkr-system -o wide -w
NAME              READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
liberator-ghpxv   1/1     Running   0          76s   10.244.1.2   minikube-m02   <none>           <none>
liberator-rl5q9   1/1     Running   0          76s   10.244.0.3   minikube       <none>           <none>
liberator-skznw   1/1     Running   0          76s   10.244.2.2   minikube-m03   <none>           <none>


32093  2026-03-23 22:57:15 cat gfs-sc.yml 
32094  2026-03-23 22:57:17 ls
32095  2026-03-23 22:57:19 cd liberator/
32096  2026-03-23 22:57:19 ls
32097  2026-03-23 22:57:22 cd container/
32098  2026-03-23 22:57:22 ls
32099  2026-03-23 22:57:25 cat main.py 
32100  2026-03-23 23:02:18 ls
32101  2026-03-23 23:02:20 cat Dockerfile 
32102  2026-03-23 23:06:29 cd ..
32103  2026-03-23 23:06:29 ls
32104  2026-03-23 23:06:33 cat daemonset.yml 
32105  2026-03-23 23:06:48 cd container/
32106  2026-03-23 23:06:52 docker build . -t maho/liberator:0.1
32107  2026-03-23 23:08:48 cd ..
32108  2026-03-23 23:08:49 ls
32109  2026-03-23 23:08:50 cd k8s-rbac/
32110  2026-03-23 23:08:51 ls
32111  2026-03-23 23:08:53 cat namespace.yml 
32112  2026-03-23 23:08:59 cat role-base-access-ctl.yml 
32113  2026-03-23 23:10:07 ls
32114  2026-03-23 23:10:09 cat service-account.yml 
32115  2026-03-23 23:11:51 kubectl get all
32116  2026-03-23 23:12:16 kubectl apply -f namespace.yml 
32117  2026-03-23 23:12:21 kubectl apply -f service-account.yml 
32118  2026-03-23 23:12:26 kubectl apply -f role-base-access-ctl.yml 
32119  2026-03-23 23:12:31 kubectl get clusterrole
32120  2026-03-23 23:12:47 ls
32121  2026-03-23 23:12:53 kubectl get ns
32122  2026-03-23 23:13:08 kubectl get crb
32123  2026-03-23 23:13:14 kubectl get clusterrolebinding
32124  2026-03-23 23:13:39 kubectl get serviceaccount
32125  2026-03-23 23:13:45 kubectl get all
32126  2026-03-23 23:14:01 kubectl describe clusterrole admin -n kube-system
32127  2026-03-23 23:15:01 ls
32128  2026-03-23 23:15:03 cat role-base-access-ctl.yml 
32129  2026-03-23 23:15:11 kubectl get clusterrole nodes
32130  2026-03-23 23:15:31 kubectl get clusterrole nodes -n tkr-system
32131  2026-03-23 23:15:41 kubectl get clusterrole nodes -n tkr-system -o wide
32132  2026-03-23 23:16:03 kubectl get po -n ktr-system
32133  2026-03-23 23:16:15 cd ..
32134  2026-03-23 23:16:15 ls
32135  2026-03-23 23:16:20 kubectl -f k8s-rbac/
32136  2026-03-23 23:16:28 kubectl apply -f k8s-rbac/
32137  2026-03-23 23:16:47 ls
32138  2026-03-23 23:16:49 cat daemonset.yml 
32139  2026-03-23 23:19:44 kubectl apply -f daemonset.yml 
32140  2026-03-23 23:19:48 kubectl get all
32141  2026-03-23 23:19:56 kubectl get po -A
32142  2026-03-23 23:20:20 kubectl get po -n tkr-system -o wide
32143  2026-03-23 23:20:25 kubectl get po -n tkr-system -o wide -w
32144  2026-03-23 23:20:49 kubectl describe liberator-ghpxv -n tkr-system
32145  2026-03-23 23:20:55 kubectl describe po liberator-ghpxv -n tkr-system
32146  2026-03-23 23:21:01 kubectl get po -n tkr-system -o wide -w
32147  2026-03-23 23:21:47 kubectl get node
32148  2026-03-23 23:22:01 kubectl cordon minikube-m03
32149  2026-03-23 23:22:08 kubectl get no
32150  2026-03-23 23:22:19 kubectl recordon minikube-m03
32151  2026-03-23 23:23:12 kubectl uncordon minikube-m03
32152  2026-03-23 23:23:17 kubectl get no
32153  2026-03-23 23:23:37 kubectl get sts
32154  2026-03-23 23:23:38 ls
32155  2026-03-23 23:23:37 cd ..
32156  2026-03-23 23:23:37 ls
32157  2026-03-23 23:23:50 kubectl apply mysql-sts.yml 
32158  2026-03-23 23:23:55 kubectl apply -f mysql-sts.yml 
32159  2026-03-23 23:24:00 kubectl get all
32160  2026-03-23 23:24:15 kubectl get po -o wide
32161  2026-03-23 23:24:38 kubectl exec -it mysql-0 -- bash
32162  2026-03-23 23:25:23 minikube stop --help
32163  2026-03-23 23:25:46 minikube start --help
32164  2026-03-23 23:26:05 ls
32165  2026-03-23 23:26:08 kubectl get no
32166  2026-03-23 23:26:18 kubectl get po -o wide
32167  2026-03-23 23:26:29 kubectl delete node minikube-m02
32168  2026-03-23 23:26:44 kubectl get sts
32169  2026-03-23 23:26:53 watch -n 5 "kubectl get sts"
32170  2026-03-23 23:27:21 kubectl get po -o wide
32171  2026-03-23 23:28:02 minikube start
32172  2026-03-23 23:29:26 kubectl get no
32173  2026-03-23 23:29:40 ls
32174  2026-03-23 23:29:48 kubectl delete -f mysql-sts.yml 
32175  2026-03-23 23:29:52 kubectl delete -f mysql-sts-nfs-pv.yml 
32176  2026-03-23 23:29:56 kubectl delete -f mysql-sts-nfs-pvc.yml 
32177  2026-03-23 23:29:58 ls
32178  2026-03-23 23:30:01 cd liberator/
32179  2026-03-23 23:30:01 ls
32180  2026-03-23 23:30:10 kubectl delete -f daemonset.yml 
32181  2026-03-23 23:30:13 kubectl delete -f k8s-rbac/
32182  2026-03-23 23:30:21 kubectl get po -A
32183  2026-03-23 23:30:33 kubectl get po -A -w
32184  2026-03-23 23:30:42 kubectl get po 
32185  2026-03-23 23:30:44 kubectl get po -A
32186  2026-03-23 23:31:10 kubectl get pv,pvc,svc,sts,no,clusterrole,clusterrolebinding
32187  2026-03-23 23:31:23 ls
32188  2026-03-23 23:31:31 kubectl get pv,pvc
32189  2026-03-23 23:31:51 kubectl delte pvc pvc-mysql-0
32190  2026-03-23 23:31:55 kubectl delete pvc pvc-mysql-0
32191  2026-03-23 23:32:04 kubectl get pvc
32192  2026-03-23 23:32:11 kubectl get pv
32193  2026-03-23 23:32:18 kubectl delete pv pvc-65a320a5-e98a-4091-88d6-6e6d41e76901
32194  2026-03-23 23:32:35 minikube stop
32195  2026-03-23 23:33:15 sudo systemctl status nfs-kernel-server
32196  2026-03-23 23:33:26 sudo systemctl stop nfs-kernel-server
32197  2026-03-23 23:33:42 sudo systemctl status nfs-kernel-server
32198  2026-03-23 23:33:48 history 200
Tags: tag