하위 태스크 1
Vagrantfile 확인
가상머신 구성 정의 확인 및 이해
Control Plane Node
config.vm.define "cp-k8s-#{k8s_V[0..5]}" do |cfg|:
Vagrant 내에서 관리할 가상 머신의 식별자를 선언한다. 해당 노드의 가상 머신 식별자는 cp-k8s-1.30.0이다.
vb.name = "cp-k8s-#{k8s_V[0..5]}(github_SysNet4Admin)":
VirtualBox에 표시될 가상 머신의 이름이다. 해당 노드의 가상 머신 이름은 cp-k8s-1.30.0(github_SysNet4Admin)이다.
vb.cpus = 2:
가상 머신이 사용할 CPU의 코어 수다. 해당 노드는 2개의 코어를 사용하도록 설정된다.
vb.memory = 2048:
가상 머신에 할당할 메모리 용량이다. 해당 노드는 2 GB의 메모리 용량이 할당된다.
cfg.vm.host_name = "cp-k8s":
가상 머신 내부에서 인식하는 호스트 이름이다. 해당 노드의 호스트 이름은 cp-k8s로 설정된다.
cfg.vm.network "private_network", ip: "192.168.1.10":
가상 머신에 할당되는 사설 네트워크 내 고정 IP다. 해당 노드는 192.168.1.10 IP를 부여받는다.
Worker Node
N의 값이 3이므로 3개의 워커 노드가 생성된다.
config.vm.define "w#{i}-k8s-#{k8s_V[0..5]}" do |cfg|:
해당 노드의 가상 머신 식별자는 i가 1일 때 w1-k8s-1.30.0이다.
vb.name = "w#{i}-k8s-#{k8s_V[0..5]}(github_SysNet4Admin)":
해당 노드의 가상 머신 이름은 i가 1일 때 w1-k8s-1.30.0(github_SysNet4Admin)이다.
vb.cpus = 1:
해당 노드는 1개의 코어를 사용하도록 설정된다.
vb.memory = 1024:
해당 노드는 1 GB의 메모리 용량이 할당된다.
cfg.vm.host_name = "w#{i}-k8s":
해당 노드의 호스트 이름은 i가 1일 때 w1-k8s로 설정된다.
cfg.vm.network "private_network", ip: "192.168.1.10#{i}":
해당 노드는 i가 1일 때 192.168.1.101 IP를 부여받는다.
하위 태스크 2
가상머신 생성
vagrant up 명령어로 3개 노드 생성
VirtualBox와 Vagrant를 설치한다.
brew install --cask virtualbox
brew install --cask vagrant가상 머신을 생성한다.
vagrant up생성된 가상 머신의 상태를 확인한다.
vagrant statusCurrent machine states:
cp-k8s-1.30.0 running (virtualbox)
w1-k8s-1.30.0 running (virtualbox)
w2-k8s-1.30.0 running (virtualbox)
w3-k8s-1.30.0 running (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
하위 태스크 3
환경 설정 스크립트 실행
k8s_env_build.sh로 기본 환경 설정
Vagrantfile 내 다음 문장으로 인해 k8s_env_build.sh 스크립트는 가상 머신에서 자동 실행된다.
cfg.vm.provision "shell", path: "k8s_env_build.sh", args: [ N, k8s_V[0..3] ]
하위 태스크 4
패키지 설치
k8s_pkg_cfg.sh로 쿠버네티스 패키지 설치
Vagrantfile 내 다음 문장으로 인해 k8s_env_build.sh 스크립트는 가상 머신에서 자동 실행된다.
cfg.vm.provision "shell", path: "k8s_env_build.sh", args: [ N, k8s_V[0..3] ]
하위 태스크 5
Control Plane 초기화
kubeadm init으로 클러스터 초기화
Control Plane 노드로 접속한다.
vagrant ssh cp-k8s-1.30.0클러스터를 초기화한다.
sudo kubeadm init \
--apiserver-advertise-address=192.168.1.10 \
--pod-network-cidr=10.244.0.0/16
하위 태스크 6
kubectl 설정
kubeconfig 파일 설정으로 kubectl 사용 가능하게 만들기
클러스터의 인증 정보를 홈 디렉터리에 복사해 쿠버네티스 명령어를 사용할 수 있게 한다.
Control Plane 노드에 접속한 상태에서 설정 디렉터리를 생성하고 파일을 복사한다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config클러스터 상태를 확인한다.
kubectl get nodesNAME STATUS ROLES AGE VERSION
cp-k8s NotReady control-plane 4m16s v1.30.0
하위 태스크 7
Worker Node 합류
kubeadm join으로 Worker Node들을 클러스터에 추가
워커 노드에 SSH로 접속한다.
vagrant ssh w1-k8s-1.30.0
vagrant ssh w2-k8s-1.30.0
vagrant ssh w3-k8s-1.30.0join 명령어를 사용해 클러스터에 합류시킨다.
sudo kubeadm join 192.168.1.10:6443 --token <토큰> \ --discovery-token-ca-cert-hash sha256:<해시>하위 태스크 8
클러스터 상태 확인
kubectl 명령어로 노드 및 파드 상태 확인
Control Plane 노드에 SSH로 접속한다.
vagrant ssh cp-k8s-1.30.0모든 노드 목록을 확인한다.
kubectl get nodesNAME STATUS ROLES AGE VERSION
cp-k8s NotReady control-plane 11m v1.30.0
w1-k8s NotReady <none> 3m12s v1.30.0
w2-k8s NotReady <none> 2m58s v1.30.0
w3-k8s NotReady <none> 2m42s v1.30.0
시스템 파드 상태를 확인한다.
kubectl get pods --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7db6d8ff4d-4jb47 0/1 Pending 0 12m
kube-system coredns-7db6d8ff4d-zzs4p 0/1 Pending 0 12m
kube-system etcd-cp-k8s 1/1 Running 0 12m
kube-system kube-apiserver-cp-k8s 1/1 Running 0 12m
kube-system kube-controller-manager-cp-k8s 1/1 Running 0 12m
kube-system kube-proxy-2hnsp 1/1 Running 0 12m
kube-system kube-proxy-bsc9r 1/1 Running 0 3m24s
kube-system kube-proxy-j9m2b 1/1 Running 0 3m54s
kube-system kube-proxy-xpqdq 1/1 Running 0 3m40s
kube-system kube-scheduler-cp-k8s 1/1 Running 0 12m
하위 태스크 9
트러블슈팅
발생한 문제를 해결하고 로그 분석
하위 태스크 2 진행 중, vagrant up 명령을 실행하면 다음 오류가 발생했다.
cp-k8s-1.30.0: curl: try 'curl --help' or 'curl --manual' for more information
cp-k8s-1.30.0: /tmp/vagrant-shell: line 25: -fsSL: command not found
cp-k8s-1.30.0: /tmp/vagrant-shell: line 27: syntax error near unexpected token `|'
cp-k8s-1.30.0: /tmp/vagrant-shell: line 27: ` | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg'
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
k8s_pkg_cfg.sh에서 여러 줄에 걸친 명령(curl, echo)를 단일 행으로 병합하여 해결하였다.