[kubernetes] 쿠버네티스 오브젝트

DaeHoon·2022년 9월 11일
0

kubernetes

목록 보기
5/6
post-custom-banner

5.1 쿠버네티스에서 오브젝트란?

모두 상태를 가지고 있는 오브젝트

오브젝트는 추구하는 상태를 기술해 둔 것

  • 추구하는 상태를 기술하는 것 == 오브젝트

추구하는(Spec) 형태와 현재 상태(Status) 확인

[root@m-k8s ~]# kubectl edit deployment del-deploy
  • 위의 명령어를 통해 오브젝트의 상태를 변경한다.
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"del-deploy"},"name":"del-deploy","namespace":"default"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"del-deploy"}},"template":{"metadata":{"labels":{"app":"del-deploy"}},"spec":{"containers":[{"image":"nginx","name":"nginx"}]}}}}
  creationTimestamp: "2022-09-11T05:19:23Z"
  generation: 3
  labels:
    app: del-deploy
  name: del-deploy
  namespace: default
  resourceVersion: "27436"
  uid: 2d7cd1d7-cfe0-4968-82c4-c7016b804cd6
spec:
  progressDeadlineSeconds: 600
  replicas: 3 // 9에서 3으로 변경
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: del-deploy
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: del-deploy
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
  • 명령어를 쳤을 때 나오게 되는 창. 추구하고자 하는 spec에서 (위의 개념에서 오브젝트) replicas를 3으로 변경한다
[root@m-k8s ~]# kubectl get pods
NAME                          READY   STATUS        RESTARTS   AGE
del-deploy-57f68b56f7-5wrpq   0/1     Terminating   0          64m
del-deploy-57f68b56f7-b7pzc   1/1     Running       0          68m
del-deploy-57f68b56f7-c9gql   0/1     Terminating   0          64m
del-deploy-57f68b56f7-jc4gw   0/1     Terminating   0          68m
del-deploy-57f68b56f7-jp7gc   1/1     Running       0          75m
del-deploy-57f68b56f7-pxs75   1/1     Running       0          75m
del-deploy-57f68b56f7-s5mtb   1/1     Terminating   0          64m
del-deploy-57f68b56f7-vn9kx   1/1     Terminating   0          64m
del-deploy-57f68b56f7-zlnxb   0/1     Terminating   0          68m

[root@m-k8s ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
del-deploy-57f68b56f7-b7pzc   1/1     Running   0          70m
del-deploy-57f68b56f7-jp7gc   1/1     Running   0          76m
del-deploy-57f68b56f7-pxs75   1/1     Running   0          76m
  • 파드가 삭제되고 3개만 남은 모습.

5.2 쿠버네티스 기본 오브젝트

  • 쿠버네티스는 4개의 기본 오브젝트가 존재

파드

  • 파드를 기본 골자로 해서 만들어지는 것들

서비스

  • 노드 포트로 서비스를 만들어보기도 하고 로드밸런스 타입으로도 만들어봤음.

네임스페이스

  • default, kube-system

볼륨

  • 영속적인 데이터를 보존하기 위해 만들어짐
  • 파드는 언제든지 삭제, 생성이 될 수 있다. 즉, 데이터를 올리거나 지우거나 또는 데이터를 추가한다고 했을 때, 파드가 여러 군데에 돌아다니면 저장이 어려움. 볼륨을 이를 위한 저장 공간이라고 생각하면 된다.

볼륨 실습

  • nfs 서버 구현 실습
nfs-exporter 설치

[root@m-k8s ~]# ~/_Lecture_k8s_starter.kit/ch5/5.2/nfs-exporter.sh log
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

[root@m-k8s ~]# cat /etc/exports
/nfs_shared/log 192.168.1.0/24(rw,sync,no_root_squash)

[root@m-k8s ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  nfs_shared  opt  proc  root  run  sbin  srv  sys  tmp  usr  vagrant  var

[root@m-k8s ~]# ls /nfs_shared/
log
  • 마스터 서버, 워커 노드에서 전부 같이 볼 수 있는 192.168.1.0/24에 nfs-shared를 만들었다.
- 볼륨이 있는 del yaml 파일

[root@m-k8s ~]# cat ~/_Lecture_k8s_starter.kit/ch5/5.2/dpy-chk-log.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dpy-chk-log
spec:
  replicas: 3
  selector:
    matchLabels:
      app: dpy-chk-log
  template:
    metadata:
      labels:
        app: dpy-chk-log
    spec:
      containers:
      - name: dpy-chk-log
        image: sysnet4admin/chk-log
        volumeMounts:
        - name: nfs-vol
          mountPath: /audit
      volumes:
      - name: nfs-vol
        nfs:
          server: 192.168.1.10
          path: /nfs_shared/log 
          
  • volumes이 구성되어 있음
deployment 배포

[root@m-k8s ~]# kubectl apply -f ~/_Lecture_k8s_starter.kit/ch5/5.2/dpy-chk-log.yaml
deployment.apps/dpy-chk-log created

[root@m-k8s ~]# kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
dpy-chk-log-658658f78c-2nzvs   1/1     Running   0          75s
dpy-chk-log-658658f78c-d2k4t   1/1     Running   0          75s
dpy-chk-log-658658f78c-x26rp   1/1     Running   0          75s
  • dpy-chk-log 디플로이먼트는 접속이 일어나면 접속 기록을 /audit에 저장한다.

curl로 접속
[root@m-k8s ~]# kubectl get pods -o wide
NAME                           READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
dpy-chk-log-658658f78c-2nzvs   1/1     Running   0          100s   172.16.132.14    w3-k8s   <none>           <none>
dpy-chk-log-658658f78c-d2k4t   1/1     Running   0          100s   172.16.221.145   w1-k8s   <none>           <none>
dpy-chk-log-658658f78c-x26rp   1/1     Running   0          100s   172.16.103.143   w2-k8s   <none>           <none>
[root@m-k8s ~]# curl 172.16.132.14

pod_n: dpy-chk-log-658658f78c-2nzvs | ip_dest: 172.16.132.14
  • 접속을 시도하면 host_name | 도달하는 IP가 출력이 된다.
[root@m-k8s ~]# curl 172.16.132.14
pod_n: dpy-chk-log-658658f78c-2nzvs | ip_dest: 172.16.132.14

[root@m-k8s ~]# kubectl exec dpy-chk-log-658658f78c-2nzvs -it -- /bin/bash
root@dpy-chk-log-658658f78c-2nzvs:/# ls
audit  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@dpy-chk-log-658658f78c-2nzvs:/# cat audit/audit_dpy-chk-log-658658f78c-2nzvs.log 
11/Sep/2022:16:36:43 +0900  172.16.132.14  GET
  • 쿠버네티스는 생성한 파드를 접속할 수 있게 exec 명령어를 제공한다.
  • curl로 접속한 로그가 audit에 저장이 되어 있다.
root@dpy-chk-log-658658f78c-2nzvs:/# exit 
exit
[root@m-k8s ~]# kubectl delete -f ~/_Lecture_k8s_starter.kit/ch5/5.2/dpy-chk-log.yaml 
deployment.apps "dpy-chk-log" deleted
root@dpy-chk-log-658658f78c-2nzvs:/# exit 
exit
- 디플로이먼트 삭제
[root@m-k8s ~]# kubectl delete -f ~/_Lecture_k8s_starter.kit/ch5/5.2/dpy-chk-log.yaml 
deployment.apps "dpy-chk-log" deleted

- 디플로이먼트 재배포
[root@m-k8s ~]# kubectl apply -f ~/_Lecture_k8s_starter.kit/ch5/5.2/dpy-chk-log.yaml 

- audit 체크
[root@m-k8s ~]# kubectl exec dpy-chk-log-658658f78c-4vkhf  -it -- /bin/bash                        
root@dpy-chk-log-658658f78c-4vkhf:/# ls /audit
audit_dpy-chk-log-658658f78c-2nzvs.log
  • 볼륨의 영속적을 증명하기 위해 dpy-chk-log deployment를 삭제하고 재생성한다.
  • audit의 로그를 확인해보면 이전에 삭제가 되어있던 dpy-chk-log-658658f78c-2nzvs의 접속 기록이 그대로 남아있다.
profile
평범한 백엔드 개발자
post-custom-banner

0개의 댓글