Container Infrastructure/Side Project_202108

6. 쿠버네티스 클러스터 구성하기 - CNI

11mia 2021. 8. 27. 00:48

※ 간단 개념 정리

 □ CNI : 쿠버네티스 클러스터의 통신을 위해선 네트워크 플러그인을 선택하고 구성해야하며, 일반적으로 CNI(Container Network Interface, 컨테이너 네트워크 인터페이스)로 구성. 주로 사용하는 CNI로는 Calico, Flannel, Cilium, Kube-router, Romana, WeaveNet 등이 있으며, 이번 프로젝트에선 간단하게 WeaveNet으로 진행. CNI 마다 구성방식, 지원기능, 성능 등이 각기 다르기때문에 목적에 맞게 선택하면된다.

 □ 쿠버네티스 클러스터 : 컨트롤 플레인에서 관리하는 쿠버네티스 에이전트를 실행하는 노드의 집합

노드(node) : 쿠버네티스에서 워커 머신을 말하며, 클러스터에 따라 가상 또는 물리머신일 수 있음. 각 노드는 컨트롤플레인에 의해 관리된다. 하나의 노드는 여러 개의 파드를 가질 수 있고, 쿠버네티스 컨트롤 플레인은 클러스터 내 노드를 통해서 파드에 대한 스케쥴링을 자동으로 처리한다. 

kubelet : 쿠버네티스 컨트롤 플레인과 노드 간 통신을 책임지는 프로세스로, 하나의 머신 상에서 동작하는 파드와 컨테이너를 관리함

 파드(pod) : 쿠버네티스에서 실행되는 최소 단위. 파드는 언제나 노드상에서 동작한다. 독립적인 공간과 사용 가능한 ip를 갖고있음. 하나의 파드는 1개 이상의 컨테이너를 갖기 때문에 여러 기능을 묶어 하나의 목적으로 사용 가능

  컨테이너 : 의존성과 함께 애플리케이션을 패키징하는 기술

컨테이너 이미지 : 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 실행할 준비가 되어있는(ready-to-run) 소프트웨어 패키지. 여기에는 실행하는데 필요한 코드와 모든 런타임, 애플리케이션 및 시스템 라이브러리, 그리고 모든 필수 설정에 대한 기본값이 포함됨. 설계상, 컨테이너는 변경할 수 없고, 이미 실행중인 컨테이너의 코드를 변경할 수도 없다. 컨테이너화된 애플리케이션에 대해 변경하려는 경우, 변경사항이 포함된 새 이미지를 빌드한 다음, 업데이트된 이미지에서 시작하도록 컨테이너를 다시 생성해야함.

 컨테이너 런타임 : 컨테이너 실행을 담당하는 SW. 레지스트리에서 컨테이너 이미지를 가져와 묶여있는 것을 풀고, 애플리케이션을 동작시킴. ex) 도커, containered, CRI-O 등 kubernetes CRI(컨테이너 런타임 인터페이스)를 구현한 모든 SW

 

앞서 노드들을 조인한 후 Status도 모두 not ready이며, worker노드들은 role마저도 없는 상태

단순히 연결만 된 상태

이는 공식문서의 kubeadm 설명을 보면 이해할 수 있는 부분. kubeadm은 실행가능한 최소 클러스터를 시작하고 실행하는데 필요한 작업을 수행하며, 시스템 프로비저닝이 아닌 부트스트랩만 다루고 있음. 따라서 추가적으로 애드온을 설치하여 구성해나가야한다.

(특히, kubeadm init은 쿠버네티스 컨트롤 플레인 노드를 부트스트랩하는 명령이며,

kubeadm join은 쿠버네티스 워커 노드를 부트스트랩하고 클러스터에 조인하는 명령)

 

클러스터를 완성하기 위해 쿠버네티스 CNI 애드온인 weave net을 설치한다.

https://www.weave.works/docs/net/latest/kubernetes/kube-addon/

 

Integrating Kubernetes via the Addon

The following topics are discussed: Installation Before installing Weave Net, you should make sure the following ports are not blocked by your firewall: TCP 6783 and UDP 6783/6784. For more details, see the FAQ. Weave Net can be installed onto your CNI-ena

www.weave.works

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

쿠버네티스 클러스터가 정상적으로 생성되었다. (이때, 모든 노드의 전원이 on이어야함)

  ※ 노트북 메모리 문제로 워커3은 제거하고, 2개의 워커노드로 진행하기로 하였다

 

쿠버네티스 클러스터가 정상적으로 설치되었는지 확인하기 위해 nginx를 배포해보자

# --image=nginx 로 생성할 이미지 이름 지정
kubectl create deploy nginx-deploy --image=nginx

# 어디까지했나

# 참고

https://kubernetes.io/ko/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

https://kubernetes.io/ko/docs/reference/setup-tools/kubeadm/

 

Kubeadm

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/

 

파드와 노드 보기

목표 쿠버네티스 파드에 대해 배운다. 쿠버네티스 노드에 대해 배운다. 배포된 애플리케이션의 문제를 해결한다. 쿠버네티스 파드 모듈 2에서 배포를 생성했을 때, 쿠버네티스는 여러분의 애플

kubernetes.io

https://kubernetes.io/ko/docs/concepts/containers/_print/

 

컨테이너

런타임 의존성과 함께 애플리케이션을 패키징하는 기술

kubernetes.io

https://kubernetes.io/ko/docs/concepts/overview/components/#컨트롤-플레인-컴포넌트