본문 바로가기

DevOps/CI|CD

커스터마이즈로 배포 간편화하기 (MetalLB 구성)

커스터마이즈의 작동 원리

커스터마이즈를 통한 배포는 kubectl에 구성돼 있는 매니페스트를 고정적으로 이용해야하는 기존 방식을 유연하게 만든다. 우선 커스터마이즈가 어떻게 작동하는지 간단하게 살펴보자.

 

커스터마이즈는 야믈파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다. 쿠버네티스에서 오브젝트에 대한 수정사항을 반영하려면 사용자가 직접 야믈 파일을 편집기 프로그램으로 수정해야한다.

일반적으로 이런 방식으로 수정했을 때 큰 문제가 발생하지 않는다. 그런데 만약 수정해야하는 야믈파일이 매우 많거나 하나의 야믈파일로 환경이 다른 여러 개의 쿠버네티스 클러스터에 배포해야해서 LABEL이나 NAME 같은 일부 항목을 수정해야 한다면 매번 일일이 고치는 데 많은 노력이 든다. 커스터마이즈는 이를 위해 kustomize 명령을 제공한다. kustomize 명령과 create 옵션으로 kustomization.yaml이라는 기본 매니페스트를 만들고, 이 파일에 변경해야하는 값들을 적용한다. 그리고 build 옵션으로 변경할 내용이 적용된 최종 야믈 파일을 저장하거나 변경된 내용이 바로 실행되도록 지정한다.

예를들어 MetalLB 0.9 버전부터는 쿠버네티스에서 MetalLB를 구성할 때 컨트롤러와 에이전트인 스피커가 통신할 때 보안을 위해 쿠버네티스의 시크릿(Secret) 오브젝트를 사용한다. 이에 따라서 기존에는 매니페스트 방법만 안내됐지만, 0.9 버전부터는 복잡한 설치 과정을 간편화할 수 있도록 커스터마이즈 방법을 추가로 안내한다. 편의성을 위해 시크릿을 사용하지 않은 0.8버전을 사용한다.

 

 

 

# 커스터마이즈로 MetalLB 한 번에 만들기

1. kustomize-install.sh 실행

$ sudo ./kustomize-install.sh

커스터마이즈 명령을 사용하시 위해서 kustomize-install.sh를 실행해 커스터마이즈 압축파일을 내려받은 후에 이를 해제하고 /usr/local/bin 으로 옮긴다. 이후 헬름도 동일한 과정을 통해서 배시 셸에서 바로 실행할 수 있게 만들것이다.

 

 

 

2. 파일 확인

커스터마이즈에서 리소스 및 주소 할당 영역(Pool)을 구성할 때 사용할 파일들을 확인한다. 이전에는 네임스페이스 설정 부분이 metallb.yaml 배포에 포함됐으나, 리소스에 여러가지 항목이 포함될 수 있음을 표현하기 위해 네임스페이스를 분리했다.

 

 

 

3. kustomization.yaml 생성

$ sudo kustomize create --namespace=metallb-system --resources namespace.yaml,metallb.yaml,metallb-l2config.yaml

커스터마이즈로 변경될 작업을 정의하기 위해서 kustomization.yaml을 생성한다. 이때 --namespace는 작업의 네임스페이스를 설정하며, --resources 명령은 커스터마이즈 명령을 이용해서 kustomization.yaml을 만들기 위한 소스 파일을 정의한다.

 

 

 

4. kustomization.yaml 파일 확인 

생성한 kustomization.yaml 파일을 확인해 보면, 리소스로 namespace.yaml, metallb.yaml, metallb-l2config.yaml이 설정됐고, 네임스페이스는 matallb-system으로 설정된 것을 확인할 수 있다.

 

 

 

5. 이미지 태그 지정

$ sudo kustomize edit set image metallb/controller:v0.8.2
$ sudo kustomize edit set image metallb/speaker:v0.8.2

설치된 이미지를 안정적인 버전으로 유지하기 위해서 kustomize edit set image 옵션을 이용해 MetalLB controller와 speaker의 이미지 태그를 v0.8.2 로 지정한다.

 

 

 

6. kustomization.yaml 파일 확인

이미지 태그 정보가 설정되었는지 확인

 

 

 

7. kustomize bulid 명령으로 MetalLB 설치를 위한 매니페스트 생성

$ kustomize build

 

 

 

8. 배포

$ sudo kustomize build | kubectl apply -f -

이를 파일로 저장해 MetalLB를 배포할 수도 있지만, 편의를 위해서 kubectl apply -f - 명령으로 빌드한 결과가바로 kubectl apply에 인자로 전달돼 배포되도록 한다.

 

 

 

9. MetalLB 정상 배포 확인

$ kubectl get pods -n metallb-system
$ kubectl get configmap -n metallb-system

 

 

 

10. MetalLB 태그 확인

$ kubectl describe pods -n metallb-system | grep Image:

 

 

 

11. IP가 정상적으로 할당됐는지 확인

# 디플로이먼트 생성
$ kubectl create deployment echo-ip --image=sysnet4admin/echo-ip

# LoadBalancer 타입으로 노출
$ kubectl expose deployment echo-ip --type=LoadBalancer --port=80

# IP 할당 확인
$ kubectl get service echo-ip

커스터마이즈를 통해서 MetalLB가 생성된 것을 확인했으니 간단하게 테스트 해보자. 디플로이먼트 1개를 배포한 다음 LoadBalancer 타입으로 노출하고 IP가 정상적으로 할당됐는지 확인한다.

 

 

 

12. echo-ip가 정상적으로 응답하는지 확인

# MetalLB 삭제
$ kustomize build | kubectl delete -f -

# echo-ip 서비스 삭제
$ kubectl delete service echo-ip

# echo-ip 디플로이먼트 삭제
$ kubectl delete deployment echo-ip

커스터마이즈를 이용하면 MetalLB의 다양한 설정을 사용자의 입맛에 맞게 변경하고 구현할 수 있다. 그러나 커스터마이즈는 여러 가지 변경할 부분을 사용자가 직접 kustomization.yaml 에 추가하고 최종적으로 필요한 매니페스트를 만들어 배포해야한다. 이러한 다소 수동적인 작성 방식이 아닌 선언적으로 필요한 내용을 제공하고 이에 맞게 배포하려면 어떻게 해야할까? 그리고 커스터마이즈를 통해서 변경할 수 없었던 주소 할당 영역과 같은 값도 배포시에 같이 변경하려면 어떻게 할까? 헬름은 이러한 제약 사항들을 없애고 편리성을 높일 수 있다.

 

 

 

 

 

 

 

 

 

출처:

"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 조훈,심근우,문성주 지음/길벗출판사" 책을 기반으로 실습한 내용입니다.

'DevOps > CI|CD' 카테고리의 다른 글

젠킨스 컨트롤러 설정하기(환경설정)  (0) 2022.06.13
젠킨스 살펴보기  (0) 2022.06.13
젠킨스 설치를 위한 간편화 도구  (0) 2022.06.13
컨테이너 인프라 환경에서 CI/CD  (0) 2022.06.13
통합 및 배포 자동화  (0) 2022.06.13