Development, Architecture/Docker, k8s

[쿠버네티스] k8s 기본 개념 정리

ggyongi 2022. 10. 4. 21:37
반응형

참고 도서: 그림과 실습으로 배우는 도커&쿠버네티스

저자: 오가사와라 시게타카

옮긴이: 심효섭

출판사: 위키북스

 

 

* kubernetes는 k와 s 사이에 8개의 문자가 들어간다고 해서 k8s로 많이 부름

 

------- 목차 ---------------------

쿠버네티스란?

마스터 노드와 워커 노드

쿠버네티스 용어 정리

매니페스트 파일 작성

쿠버네티스 명령어

----------------------------------

쿠버네티스란?

컨테이너 오케스트레이션 도구의 일종.

이때 오케스트레이션이란 시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일을 의미함

쿠버네티스는 번거로운 컨테이너 생성이나 관리의 수고를 덜어주는 기구

 

마스터 노드와 워커 노드

마스터 노드: 전체적인 제어를 담당. 컨테이너를 실행하지는 않으며 워커 노드에서 실행되는 컨테이너를 관리하는 역할, 따라서 도커엔진 같은 컨테이너 엔진이 설치되지 않는다.

워커 노드: 실제 서버에 해당하는 부분. 컨테이너가 실제 동작하는 서버, 따라서 컨테이너 엔진이 설치되어야 한다.

마스터 노드와 워커 노드로 구성된 일군의 시스템을 클러스터라고 한다.

 

마스터 노드는 컨트롤 플레인을 통해 워커 노드를 관리하며 컨트롤 플레인은 다섯 가지의 컴포넌트로 구성됨

kube-apiserver : 외부와 통신하는 프로세스. kubectl로부터 명령을 전달받아 실행함

kube-controller-manager : 컨트롤러 관리, 실행

kube-scheduler : 파드를 워커 노드에 할당

cloud-controller-manager : 클라우드 서비스와 연동하여 서비스를 생성

etcd : 클러스터 관련 정보 전반을 관리하는 데이터베이스

 

워커 노드 구성

kube-let : kube-scheduler와 연동하여 워커 노드에 파드를 배치하고 실행. 실행 중인 파드의 상태를 정기적으로 모니터링하며 kube-scheduler에 통지

kube-proxy : 네트워크 통신의 라우팅 메커니즘

 

쿠버네티스 용어 정리

파드: 컨테이너가 관리되는 단위. 파드는 컨테이너와 볼륨을 함께 묶은 것으로, 기본적으로 파드 하나가 컨테이너 하나지만 컨테이너가 여러 개일 수도 있다. (볼륨이 없는 경우도 많음)

서비스: 파드를 모은 것. 여러 개의 파드를 이끈다. 로드밸런서의 역할을 한하여 통신을 적절히 배분해준다.

레플리카세트: 서비스가 요청을 배분하는 역할을 한다면, 레플리카세트는 파드의 수를 관리한다.

디플로이먼트: 파드의 배포를 관리, 파드가 사용하는 이미지 등의 정보를 갖고 있음. 레플리카세트가 반장이라면 디플로이먼트는 반장 위의 상사다.

 

 

매니페스트 파일 작성

매니페스트는 파드나 서비스에 대한 설정을 의미한다. yaml이나 json형식으로 기재

매니페스트 파일은 리소스 단위로 작성하며, 초보자 수준에서 다루게 될 리소스는 '서비스'와 '디플로이먼트' 정도이다.

한 파일에 여러 리소스 단위를 합쳐 작성할 수 있으며 이때 '---'로 구분해주면 된다.

 

매니페스트 파일의 주 항목 4가지

apiVersion : API 그룹 및 버전

kind : 리소스 유형

metadata : 메타데이터

spec : 리소스 내용

 

*자주 사용되는 리소스의 API그룹 및 리소스 유형(추후 변경 가능)

파드: core/v1, Pod

서비스: core/v1, Service

디플로이먼트: apps/v1 Deployment

레플리카세트: apps/v1 ReplicaSet

 

 

*실습: 파드의 매니페스트 파일 작성 예시

*실습: 디플로이먼트 매니페스트 파일 작성 예시

*실습: 서비스 매니페스트 파일 작성 예시

 

쿠버네티스 명령어(계속 추가)

형식: kubectl <커맨드> <옵션>

주요 커맨드: create/delete/get/set/apply/scale ...

 

디플로이먼트 매니페스트 파일 읽어들이기: kubectl apply -f /Users/taki/Documents/kube_folder/apa000dep.yml

서비스 매니페스트 파일 읽어들이기: kubectl apply -f /Users/taki/Documents/kube_folder/apa000ser.yml

 

네임스페이스 리스트 확인

kubectl get namespace

 

네임스페이스 설정

kubectl config set-context --current --namespace=<insert-namespace-name-here>

 

설정된 네임스페이스 확인

kubectl config view --minify | grep namespace:

 

 

시크릿 목록 확인 

kubectl get secrets

 

시크릿 생성

kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'

 

 

tls)

openssl 설치: https://nobacking.tistory.com/63

key, crt 발급: https://namjackson.tistory.com/24

 

kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --save-config

kubectl create secret tls taki-secret-tls --key tls.key --cert tls.crt -n nautilus --save-config


시크릿 삭제

kubectl delete secret db-user-pass