본문 바로가기
Recent Study/Kubernetes 학습과정

2. 쿠버네티스 클러스터 실습(Mac Intel) - 여러 오류를 만나며

by Thinking 2024. 1. 2.

 저는 Mac Intel을 사용한 맥북을 사용하고 있습니다. 쿠버네티스 클러스터를 처음 접해보아서 엄청난 삽질, 실습을 진행하는 과정에서 mac m series로 잘못 따라가고, pw 접근 불가 등 여러 문제가 있었는데요.. 계속 꼬이고 안되었는데 애초에 m1을 위한 것이라 7시간을...허비 하루정도 깊게 파고 들어가보니 원하는 결과물을 얻어서 뿌듯했습니다!!! 혹시 실습해보시다가 안되는거 있으시면 답들 달아주세요!! 도움드릴 수 있다면 최대한 노력하겠습니다~  

 

1. XShell 

: [ 터미널로 Master, Wokred 노드에 접속이 가능해서 설치하지 않았습니다. ]

 

 

2. VirtualBox 설치 (VM 및 내부 네트워크 생성 툴)

 : VirtualBox (7.0.8 버전)

 

 

3. Vagrant 설치 및 k8s 설치 스크립트 실행 -> 자동으로 VirtualBox를 이용해 VM들을 생성하고, k8s 관련 설치 파일들이 실행됩니다.

: Vagrant (2.3.4 버전) 저는 맥북 에어라서 스크립트 파일 다운로드와 가상머신 생성하는데 4,50분은 걸린 것 같아요.. 취업해서 꼭 맥북 프로를 가지겠어요..!!!

 (위와 같이 최상위 디렉토리에 k8s 폴더를 만들어 실습을 진행해보았습니다)

 

 이후 Vagrant의 스크립트 다운로드, Rocky Linux Repo 세팅, Vagrant Disk 설정 및 Plugin 설치 후 마지막 vagrant up 했습니다. 이후 터미널을 통해 master에 접속하였고, cat 명령을 통해 master에 접근하여 token 확인 후 이를 worker node1, 2에 접속 후 토큰을 붙여 넣어줬습니다. 결과!!! 아래와 같이 성공적인 클러스터를 확인할 수 있었습니다.

 

 참고로 k8s 클러스터에 워커 노드를 추가할 때, 마스터 노드의 인증 정보를 사용하여 워커 노드가 클러스터에 가입하게 됩니다. 이를 위해서는 토큰을 사용하여 노드를 인증하고, 클러스터에 가입하는 과정을 거치게 됩니다. 토큰은 클러스터에 새로운 노드를 추가할 때 사용되는 보안 인증 수단 중 하나입니다. 토큰은 일종의 비밀 코드이며, 새로운 노드가 클러스터에 가입할 때 이를 제공함으로써 인증을 받습니다.

일반적으로 다음과 같은 과정을 거쳐 새로운 워커 노드를 클러스터에 추가합니다:

 

  1. 마스터 노드에서 kubeadm token create 또는 kubeadm init 명령을 사용하여 토큰을 생성합니다.
  2. 이 토큰을 사용하여 워커 노드를 추가하기 위해 kubeadm join 명령을 실행합니다.
  3. kubeadm join 명령에는 마스터 노드의 IP 주소와 포트, 그리고 토큰과 함께 클러스터에 참여하기 위한 인증 정보가 포함됩니다.
  4. 워커 노드는 토큰을 사용하여 마스터 노드의 인증을 획득하고, 클러스터에 가입합니다.

 

 이러한 과정을 통해 워커 노드는 클러스터의 일부가 되며, 마스터 노드는 해당 노드를 인식하고 관리할 수 있습니다. 이는 Kubernetes 클러스터가 노드 간의 통신과 리소스 관리를 위해 필요한 것입니다. 새로운 워커 노드를 추가하거나 기존 노드를 클러스터에서 제거할 때마다 이러한 절차를 따라야 합니다.

 

 

4. Worker Node 연결 : Worker Node들을 Master에 연결하여 쿠버네티스 클러스터 구축

 

 

5. 설치 확인 : Node와 Pod 상태 조회 (어떤 내용을 얘기하고 있는지 궁금하니 잠깐 자세하게 들어가볼게요~)


위는 Kubernetes 클러스터 내에서 실행 중인 여러 Pod들의 상태와 정보를 보여주는 것입니다. 각 줄은 하나의 Pod를 나타내며, 각 컬럼에는 해당 Pod의 정보가 표시됩니다. 여기서 주요 컬럼은 다음과 같습니다.

 

NAMESPACE: Pod가 속한 네임스페이스입니다.

NAME: Pod의 이름입니다.

READY: Pod 내의 컨테이너 중 실행 가능한 컨테이너 수를 나타냅니다. 예를 들어, 1/1은 한 개의 컨테이너가 실행 중이고, 전체 컨테이너가 준비 상태에 있다는 것을 의미합니다.

STATUS: Pod의 현재 상태를 나타냅니다. Running, Pending, Init, ContainerCreating 등이 있습니다.

RESTARTS: Pod 내의 컨테이너가 재시작된 횟수입니다.

AGE: Pod가 시작된 이후의 경과 시간입니다.

 

예를 들어, calico-apiserver-9d9b68487-nnxzs Pod는 calico-apiserver 네임스페이스 안에 있으며, 하나의 컨테이너가 실행 중이고, 현재 Running 상태에 있으며, 재시작은 없으며 66분이 경과했습니다.

 

 

6. 대시보드 접근 : Host OS에서 웹 브라우저를 이용해 클러스터 Dashboard에 접근합니다. 원래 Dashboard를 사용하려면 추가적인 설정이 필요한데요, 위에 Dashboard Pod가 존재해서 바로 접근이 가능하더라구요. 그런데... 실습과 다르게 아래에는 skip 표시가 없었어요. ㅂㄷㅂㄷ..

 

 여러 방법을 찾아봤는데 해결되지 않아 결국 인프런의 질문을 전부 훑어보았는데.. 그 중에서 나와 똑같은 사람을 발견하게 되었습니다! 그분도 설치 파일이 저랑 같았는데 원래는 저어기 image : 위에 login skip 내용이 있어야 하는데 없더라구요. 그래서 삭제 후 재설치!!

[root@k8s-master ~]# kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

 

 결국 쿠버네티스 대시보드에 접속을 성공하였습니다 ㅎㅎ 자꾸 생각나서 다른 것에 집중이 안되더라구요!! 혹시나 DashBoard에 아무것도 안나온다면 맨위 모든 네임스페이스가 default로 되어있을 수 있으니 수정해주시면 보일것 입니다~

 

 

 

마무리 네트워크 구성도

네트워크 구성도

 위 실습 네트워크 구성도에 대해 말씀드리겠습니다. 먼저 Vagrant 스크립트 안에 VirtualBox를 이용해서 어떤 내부 네트워크를 설정하라는 부분이 있고, 이를 통해 VirtualBox는 Host-Only 네트워크랑 nat을 만들어주는데, nat의 역할은 각 VM들의 10.0.2.15 IP를 할당하고 모든 각각의 VM에 이 IP를 다 똑같이 할당해줘서, 이 IP가 nat과 연결되어서 외부 인터넷과 연결이 됩니다. 위 스크립트가 도는 동안 필요한 설치 파일들을 다운로드 받을 수 있게 됩니다.

 

 그리고 Host-Only 네트워크는 각각의 VM에 192.168.56.30, 192.168.56.31, 192.168.56.32로 배정되었습니다. 각각의 VM에 이 IP 들을 할당해줘서 VM간에 통신을 하는 역할과 그리고 Host OS에서 XSHELL을 통해 IP로 접속을 하게 해주는 역할을 합니다.

 

또한 k8s 클러스터가 다 만들어지면 이렇게 서비스 네트워크파드 네트워크가 생성이 되는데 각각의 네트워크에 IP 대역이 있기 때문에, k8s 실습을 하면서 서비스를 만들 경우 해당 서비스의 IP는 10번대로 시작하는 IP가 할당이 될 것이고, 파드를 만들면 20번대로 시작하는 IP가 할당이 되도록 할 것 입니다.

 

이렇게 기초 실습을 마쳐보고 더욱 심화학습에서 봬요!!!