CKA 획득을 하려 Udemy 쿠버네티스 강의를 등록했는데,
쿠버네티스 지식이 없으면 Beginner 코스가 있는데 이를 듣고 CKA 강의를 들으면 된다.
나는 쿠버네티스에 대한 지식이 거의 없어 Beginner부터 등록했고, 열심히 수강해보려 한다 :)
[Kubernetes 정의와 등장 이유]
- Kubernetes = k8s 라고도 불리며, 이는 k와 s 사이에 8개 알파벳이 있어 이렇게 표기
- 서비스에 필요한 웹서버, DB에서 호환되는 OS, 필요한 라이브러리 버전 다양화의 이슈로 인해 등장
- k8s = container orchestration 기술 = container 배포, 개수 조절 등 기능
[Docker의 구조]
- Docker = lxc container
>> 하위 level 컨테이너라 설정 어려움
- 구성: OS kernel + software set
>> 단인 HW에서 여러 SW가 돌아가는 것
>> SW의 경우 각 OS를 구별하게 하는 다양한 요소를 지니고 있음
>> Linux 커널에 SW set이 달라 Ubuntu, Debian, Red hat 등으로 구별되는 것(= 다른 Linux 배포판)
= Windows는 커널을 공유하지 않기 때문에 Linux 위의 container로 실행 불가능
왜? Docker는 sw 부분에서 나누는 것이고 아래는 같아야 하기 때문
VM은 커널 단계부터 분리하기 때문에 Linux, Window 같이 가능
[가상화의 장점]
- 기존 dev > ops로 이동시 관련 dependency 등 전달해야 하나 docker image 전달로 ops에서 쉽게 설정 및 배포 가능
[Node]
- Node = k8s가 설치된 vm 혹은 hw, 그 안에 여러 container 띄워짐
>> Node 죽으면 container 다 죽음 = 서비스 장애 발생, 따라서 2개 이상이어야 하고 이런 Node 집합을 Cluster라 부름
- Master Node = k8s 설치된 또 다른 노드로 cluster 관리하는 역할
- Worker Node = 실제 서비스 등이 올라간 Node
[k8s 구성 요소]
- 실제 구성 요소 = 설치할 때
- API 서버 = front-end 같은 서버
- etcd = Cluster 관리에 필요한 데이터 저장
- Scheduler = 새로 배포된 container 찾아 Node에 할당
- Controller = 죽은 자원 있는지 확인 후 해당 자원 새로 올릴지 결정
- Container Runtime = container 실행을 위한 sw, e.g: Docker
- kubelet = 각 Node에서 실행되는 Agent, container가 Node에서 실행되는지 확인하는 역할
(빨강은 Mater-Node, 파랑은 Worker-Node)
[기본 명령어]
kubectl run = cluster에 app 배포
kubectl cluster-info = cluster 정보를 보는데 사용
kubectl get nodes = node 모두 열거
[Docker vs Container d]
- cri(container runtime interface) : 어떤 container runtime이든 지원(oci 사양 충족하는 경우)
- oci(open container initiative): imagespec과 runtimespec으로 구별
>>imagespec: image 만드는 spec = image 빌드되는 사양, runtimespec: container runtime이 개발되어야 하는 사양
- dockershim: oci 기준 전 개발된 docker가 k8s 사용 가능하도록 지원하는 임시 툴
>> 이를 위한 관리가 불필요하여 관련 지원 중단, 그 부분이 container c
- oci 기준 준수하는 container d, 이는 docker와 별개이며 ctr이라는 명령어 사용 (디버깅 위해서만 사용하는 명령어)
- nerdctl: container d에서 사용하는 명령어로 기존 docker 명령어와 유사, 신규 기능에 접근 가능한 장점이 있음
- crictl: cri와 상호작용을 위함 = k8s와 관련된 것으로 볼 수 있음, container runtime 관리 및 디버깅에 사용