5.1 쿠버네티스에서 오브젝트란?
모두 상태를 가지고 있는 오브젝트
오브젝트는 추구하는 상태를 기술해 둔 것
추구하는(Spec) 형태와 현재 상태(Status) 확인
[root@m-k8s ~]
- 위의 명령어를 통해 오브젝트의 상태를 변경한다.
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 ~]
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 ~]
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
5.2 쿠버네티스 기본 오브젝트
파드
서비스
- 노드 포트로 서비스를 만들어보기도 하고 로드밸런스 타입으로도 만들어봤음.
네임스페이스
볼륨
- 영속적인 데이터를 보존하기 위해 만들어짐
- 파드는 언제든지 삭제, 생성이 될 수 있다. 즉, 데이터를 올리거나 지우거나 또는 데이터를 추가한다고 했을 때, 파드가 여러 군데에 돌아다니면 저장이 어려움. 볼륨을 이를 위한 저장 공간이라고 생각하면 된다.
볼륨 실습
nfs-exporter 설치
[root@m-k8s ~]
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@m-k8s ~]
/nfs_shared/log 192.168.1.0/24(rw,sync,no_root_squash)
[root@m-k8s ~]
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 ~]
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
deployment 배포
[root@m-k8s ~]
deployment.apps/dpy-chk-log created
[root@m-k8s ~]
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 ~]
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 ~]
pod_n: dpy-chk-log-658658f78c-2nzvs | ip_dest: 172.16.132.14
- 접속을 시도하면 host_name | 도달하는 IP가 출력이 된다.
[root@m-k8s ~]
pod_n: dpy-chk-log-658658f78c-2nzvs | ip_dest: 172.16.132.14
[root@m-k8s ~]
root@dpy-chk-log-658658f78c-2nzvs:/
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:/
11/Sep/2022:16:36:43 +0900 172.16.132.14 GET
- 쿠버네티스는 생성한 파드를 접속할 수 있게 exec 명령어를 제공한다.
- curl로 접속한 로그가 audit에 저장이 되어 있다.
root@dpy-chk-log-658658f78c-2nzvs:/
exit
[root@m-k8s ~]
deployment.apps "dpy-chk-log" deleted
root@dpy-chk-log-658658f78c-2nzvs:/
exit
- 디플로이먼트 삭제
[root@m-k8s ~]
deployment.apps "dpy-chk-log" deleted
- 디플로이먼트 재배포
[root@m-k8s ~]
- audit 체크
[root@m-k8s ~]
root@dpy-chk-log-658658f78c-4vkhf:/
audit_dpy-chk-log-658658f78c-2nzvs.log
- 볼륨의 영속적을 증명하기 위해 dpy-chk-log deployment를 삭제하고 재생성한다.
- audit의 로그를 확인해보면 이전에 삭제가 되어있던 dpy-chk-log-658658f78c-2nzvs의 접속 기록이 그대로 남아있다.