본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

[Kubernetes] Kubespray 로 kubernetes 구축하기

by 정민규 2023. 7. 27.
반응형

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

인프런을 통해 쿠버네티스를 학습하던 중...

강사님이 미리 준비해둔 이미지를 통해 쿠버네티스를 사용하다보니

깡통부터 해봐야겠다는 생각이 들어서 kubespray를 통해 구축해봤습니다! 

 

 

 

* 실습 환경

- Azure

 

* 서버 환경

- SKU : Standard B2s(2cpu/4mem)

- OS : Ubuntu 20.04 LTS

- Disk : 표준 SSD

 

* 네트워크 환경

- VNet(10.1.0.0/16)

- Subnet(10.1.0.0/24)

 

참고로만 봐주세요~!


kubespray 구축이 목적이기에, 환경 구성은 대부분 default 값으로 진행하였습니다.

VNet쪽에서 토폴로지 보여주는 새로운 기능이 생긴 것 같아서 넣어봤습니다 ㅎㅎ..

 

 

* 실습요약

1. SSH 키 배포

2. kubespray 설치

3. kubespray 설정

4. 실습 종료

 

 

 

* Kubespray 설치 전 주의사항

- 네트워크 통신 확인

  ㄴ OS 방화벽 혹은 클라우드 방화벽 등의 방해 요소를 사전에 확인하시기 바랍니다.

 

- Master node 는 홀수로 배포

  ㄴ 이중화를 위해 etcd 기능이 활용되는데, 일종의 투표 역할을 하여 primary를 선출하게 됩니다. 

       - 해당 링크에서 자세하게 다루고 있으니 참고하세요!

        https://velog.io/@numerok/Control-plane%EC%9D%80-%EC%99%9C-%ED%99%80%EC%88%98-%EA%B0%9C%EB%A1%9C-%ED%95%B4%EC%95%BC%ED%95%98%EB%82%98%EC%9A%94

 

- hostname 은 소문자랑 숫자만

  ㄴ 해당 내용은 확실하진 않지만.. 아래 3. kubespray 설정 내용에서 inventory.ini 파일 내 호스트네임이 대문자 혹은 특수문자가 들어갈 경우 오류가 발생하는 것으로 알고 있습니다.  

 

 

 

 

 

1. SSH 키 배포

 

master1 에서 다른 노드로의 접속이 가능하도록 SSH 키를 생성하고 각 서버별로 배포합니다.

 

 

SSH RSA 공개키를 생성합니다.

 

생성된 공개키를 확인합니다.

 

master1 을 포함한 모든 노드의 해당 경로에 생성된 공개키를 붙여넣습니다.

 

 

 

그렇다면, master1 에서 원격으로 명령이 실행되는지 확인해보겠습니다.

master2 노드의 hostname 명령어를 실행했을 때, 호스트네임이 정상적으로 출력되는 것을 확인할 수 있습니다. 

 

 

 

 

 

2. kubespray 설치

 

kubespray 설치 전 최신 패키지로 업데이트부터 해주겠습니다.

 

다음으로 파이썬 패키지 매니저를 설치합니다.

 

아래와 같이, python 3.8로 정상 설치되었습니다.

 

 

 

kubespray의 최신 release 버전은 2.22 로 확인됩니다.

https://github.com/kubernetes-sigs/kubespray.git

 

해당 명령어를 통해 clone 해주겠습니다.

 

/kubespray 아래로 많은 파일이 생성된 것을 확인할 수 있습니다.

 

kubespray를 설치하는데 필요한 모든 구성 파일은 requirements.txt 파일에 정의되어 있습니다.

 

 

해당 파일에 선언된 버전으로 설치가 됩니다.

 

 

정상적으로 설치가 되었습니다.

 

 

 

 

 

3. kubespray 설정

 

 

inventory/sample 경로에 있는 파일과 디렉토리를 모두 inventory/mycluster로 복사합니다.

 

복사된 inventory.ini 파일을 활용하여 kubespray 배포에 필요한 설정을 해줍니다.

 

자신의 노드 정보에 맞게 수정하고 저장합니다.

 

 

kubespray 경로로 가서 ansible-playbook 을 실행해주겠습니다.

하기 명령어에 의해 모든 노드들에 접근하여 설치가 진행되고 쿠버네티스 클러스터가 구성됩니다.

ansible-playbook -i inventory/mycluster/inventory.ini -v --become --become-user=root cluster.yml

 

 

설치까지는 약 15 ~ 20 분 정도의 시간이 소요되니 잠시 쉬고 오셔도 좋습니다!

 

 

failed=0 으로 뜨는 것 보니 정상 설치된 것 같죠??

 

 

노드들의 STATUS : Reday 로 정상적으로 쿠버네티스 클러스터링이 구성된 것을 확인하실 수 있습니다!

ROLES 도 inventory.ini 에 설정한 내용대로 control-plane 설정이 되었습니다.

 

 

 

 

설치만하고 삭제하면 아쉬우니 pod에 nginx 배포가 정상적으로 되는지 확인해보겠습니다.

 

worker2 노드에 nginx가 배포되었습니다.

 

해당 pod 내용이 정상적으로 출력되는 것을 확인할 수 있습니다!

 

참고로..... 정말정말 희한하게도 ip를 입력하면 아래와 같이 통신이 안되고....

복사 붙여넣기로 해야 통신이 되더라구요.....

파드를 삭제하고 다시 배포해서 새로운 IP로 해봤는데도 동일한 증상....

 

단순 버그같은데 이거 때문에 시간을 조금 날렸네요 ㅎㅎ 참고하세요!

 

 

 

고생하셨습니다!!!

반응형

댓글