대시보드 설치 https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
1 2 3 4 5 $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml $ kubectl proxy
토큰 생성 1 $ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}' )
대시보드 접속 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
쿠버네티스 주요 개념
노드: 컨테이너가 배치되는 서버
네임스페이스: 쿠버네티스 클럿 터 안의 가상 클러스터
파드: 컨테이너의 집합 중 가장 작은 단위, 컨테이너의 실행 방법을 정의
레플리카세트: 같은 스팩을 갖는 파드를 여러개 생성하고 관리하는 역할
디플로이먼트: 레플리카 세트의 리비전을 관리
서비스: 파드의 집합에 접근하기 위한 경로 정의
인그레스: 서비스를 쿠버네티스 클러스터 외부로 노출
컨피그맵: 설정 정보를 정의하고 파드에 전달
퍼시스턴트 볼륨: 파드가 사용할 스토리지의 크기 및 종류 정의
퍼시스턴트볼륨클레임: 포시스턴트 볼륨을 동적으로 확보
스토리지클래스: 퍼시스턴트 볼륨이 확보하는 스토리지의 종류를 정의
스테이트풀세트: 같은 스팩으로 모두 동일한 파드를 여러개 생성하고 관리
잡: 상주 실행을 목적으로 하지 않는 파드를 여러개 생성하고 정상적인 종료를 보장
크론잡: 크론 문법으로 스케줄링되는 잡
시크릿: 인증 정보 같은 기밀 데이터 정의
롤: 네임스페이스 안에서 조작 가능한 쿠버네티스 리소스의 규칙 정의
롤바인딩: 쿠버네티스 리소스 사용자와 롤을 연결
클러스터롤: 클러스터 전체적으로 조작 가능한 쿠버니테스 로스싕 규칙 정의
클러스터롤바인딩: 쿠버니테스 리소스 사용자와 클러스터 롤 연결
서비스 계저이: 파드가 쿠버네티스 리소스를 조작할 때 사용하는 계정
클러스터와 노드 클러스터는 여러 리소스를 관리하기 위한 집합체 입니다. 리소스중 가장 큰 개념은 노드 입니다. 노드는 클러스터 관리대상으로 등록된 도커 호스트로 컨테이너가 배치되는 대상입니다.
기본적으로 전체 클러스터를 관리하는 마스터가 적어도 하나 이상 있어야 하며 마스터와 노드의 구릅으로 구성된다고 볼수있습니다.
1 2 3 4 5 6 7 8 9 Cluster { Master Node { kube apiserver etcd kube scheduler kube controller manager } Nodes... }
네임스페이스 클러스터 안에 가상 클러스터를 만들 수 있는데 이를 네임스페이스라고 합니다. 현재 존재하는 네임스페이스 조회
1 2 3 4 5 6 7 8 $ kubectl get namespace NAME STATUS AGE default Active 69m docker Active 68m kube-node-lease Active 69m kube-public Active 69m kube-system Active 69m kubernetes-dashboard Active 62m
파드 생성 및 배포 파드 생성은 kubectl 로도 가능하지만 버젼관리 관점에서도 yaml 파일로 정의하는것이 좋다. 쿠버네티스의 여러가지 리소스를 정의하는 파일을 매니페스트 파일 이라고 한다.
simple-echo-pod.yaml
1 2 3 4 5 6 7 8 9 10 apiVersion: v1 kind: Pod metadata: name: simple-echo spec: containers: - name: goecho image: lejewk/goecho:latest ports: - containerPort: 80
파드 생성 및 확인
1 2 3 4 5 6 7 8 9 10 11 12 $ kubectl apply -f simple-echo-pod.yaml $ kubectl get pod NAME READY STATUS RESTARTS AGE simple-echo 1/1 Running 0 4m19s $ kubectl delete pod simple-echo pod "simple-echo" deleted $ kubectl get pod No resources found in default namespace.
레플리카세트 파드를 정의한 매니페스트 파일로는 파드 1개밖에 생성할 수 없습니다. 이런 경우 레플리카세트를 통해 동일한 파드를 여러개 관리할 수있습니다.
파드를 정의한 매니페스트까지 포함한 레플리카세트의 매니페스트를 정의할 수 있습니다.
simple-echo-replicaset.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 apiVersion: apps/v1 kind: ReplicaSet metadata: name: simple-echo labels: app: simple-echo spec: replicas: 3 selector: matchLabels: app: simple-echo template: metadata: labels: app: simple-echo spec: containers: - name: goecho image: lejewk/goecho:latest ports: - containerPort: 80
리플리카 생성 및 파드 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ kubectl apply -f simple-echo-replicaset.yaml replicaset.apps/simple-echo created $ kubectl get pods NAME READY STATUS RESTARTS AGE simple-echo-9tpxb 1/1 Running 0 48s simple-echo-xfk5c 1/1 Running 0 48s simple-echo-zkfkt 1/1 Running 0 48s $ kubectl delete -f simple-echo-replicaset.yaml replicaset.apps "simple-echo" deleted
디플로이먼트 레플리카세트보다 상위에 해당하는 리소스이며, 애플리케이션 배포의 기본단위가 되는 리소스 입니다.
레플리카세트는 똑같은 파드의 레플리케이션 개수 관리에 집중하지만, 디플로이먼트는 레플리카세트를 관리하고 다루기 위한 요소입니다.
관계를 정리하면
1 2 3 Deployment --create--> ReplicaSet --create--> Pod (echo -1a) (echo ) (echo -1) --create--> Pod (echo -1b) --create--> Pod (echo -1c)
디플로이먼트를 정의한 매니페스트 파일은 다음과 같습니다.
simple-echo-deployment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 apiVersion: apps/v1 kind: Deployment metadata: name: simple-echo labels: app: simple-echo spec: replicas: 3 selector: matchLabels: app: simple-echo template: metadata: labels: app: simple-echo spec: containers: - name: goecho image: lejewk/goecho:latest ports: - containerPort: 80
디플로이먼트 반영
1 2 3 4 $ kubectl apply -f simple-echo-deployment.yaml --record deployment.apps/simple-echo created
리소스를 확인해보자
1 2 3 4 5 6 7 8 9 10 11 $ kubectl get pod,replicaset,deployment --selector app=simple-echo NAME READY STATUS RESTARTS AGE pod/simple-echo-66f7fffb-792bk 1/1 Running 0 4m44s pod/simple-echo-66f7fffb-p2fbv 1/1 Running 0 4m44s pod/simple-echo-66f7fffb-x4ztb 1/1 Running 0 4m44s NAME DESIRED CURRENT READY AGE replicaset.apps/simple-echo-66f7fffb 3 3 3 4m44s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/simple-echo 3/3 3 3 4m44s
디플로이먼트의 리비전을 확인해보자
1 2 3 4 $ kubectl rollout history deployment simple-echo deployment.apps/simple-echo REVISION CHANGE-CAUSE 1 kubectl.exe apply --filename=simple-echo-deployment.yaml --record=true
현재 리비전은 1이다.
결과적으로 쿠버네티스는 디플로이먼트를 활용해 애플리케이션을 배포합니다.