1. Control Plain 구성(마스터 노드에서만 진행)
1-1) 클러스터 초기화
Kubernetes의 마스터 노드가 설정되고, 지정된 네트워크 범위와 API 서버 주소를 사용하여 클러스터가 구성됨, 이후에는 클러스터에 노드를 추가하고 필요한 Kubernetes 구성 요소와 애플리케이션을 배포할 수 있음
kubeadm init --pod-network-cidr=10.11.0.0/16 --apiserver-advertise-address=192.168.108.100
kubeadm init
- Kubernetes 클러스터를 새로 초기화
- kubeadm은 Kubernetes 클러스터를 쉽게 부트스트랩할 수 있도록 도와주는 도구
- init 명령은 마스터 노드를 설정하고 필요한 모든 구성 요소를 실행
--pod-network-cidr=10.11.0.0/16
- 클러스터 내의 pod 네트워크에 사용될 ip 범위(cidr 표기법)를 지정
- 각 Pod에 고유한 ip 주소가 할당되며, 이 옵션을 통해 해당 ip 주소의 범위를 정의
--apiserver-advertise-address=192.168.108.100
- Kubernetes API 서버가 광고(advertise) IP 주소를 설정
- 이 주소는 클러스터 내부 또는 외부의 다른 컴퓨터가 API 서버와 통신하는데 사용(클러스터를 구성하는데 사용하는 네트워크 인터페이스에 할당된 IP 주소여야 함)
1-2) 토큰 생성
Kubernetes 클러스터에 새 노드를 추가하기 위한 명령어를 생성하고 출력
kubeadm token create --print-join-command > ~/token
kubeadm token create
- 새로운 접근 토큰을 생성, 이 토큰은 새로운 노드가 클러스터에 합류(join)할 때 사용됨
--print-join-command
- 실제로 새 노드를 클러스터에 추가하는데 사용할 수 있는 완전한 kubeadm join 명령어를 출력
- 이 토큰을 포함하여 클러스터에 합류하기 위해 필요한 전체 명령어를 출력
- 'kubeadm join [API 서버 주소] --token [토큰] --discovery-token-ca-cert-hash [해시]'의 형태를 갖게됨
- 이 명령을 다른 노드에서 실행하면 해당 노드는 제공된 토큰을 사용하여 클러스터의 마스터 노드에 인증하고 클러스터에 합류함
-> 해당 명령은 큰 클러스터를 운영하거나 여러 노드를 자동으로 추가할 때 유용함, 이 명령어를 사용해 쉽고 빠르게 새 노드를 클러스터에 추가할 수 있음
1-3) scp를 이용하여 worker node로 파일 보내기
scp 명령어가 원격 시스템으로 연결 시 패스워드 입력을 요구하는데, 이를 ssh 공개키 인증으로 대체함
a="yes"; for num in {1..2..3}; do echo $a | scp token node$num:/root/; done;
a="yes"
- a라는 변수에 문자열 "yes"를 할당
for num in {1..3..1}
- 1부터 3까지 1씩 증가시키며 반복
echo $a | scp token node$num:/root/
- 반복문의 각 반복마다 실행
- 변수 a의 값을 출력하고, 출력된 값은 파이프를 통해 scp 명령으로 전달됨
- scp 명령을 이용해 원격지로 파일을 복사(로컬 시스템의 token 파일을 node1:/root/token, node2:/root/token, node3:/root/token으로 각각 복사
2. kube 환경 설정하기
3. kubectl 자동완성 기능 설치
4. CNI 설치(이 실습에서는 Calico를 설치)
Tigera Calico 연산자 및 사용자 지정 리소스 정의
1-1) 클러스터 초기화에서 지정한 Pod-Network
# [참고] weave를 설치할 때
kubectl apply -f
https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
5. 충분히 기다린 후(약 3분 이상) 아래 명령으로 확인
# 쿠버네티스 초기화 명령 실행
만약 containerd를 패키지(RPM, .deb 등)를 통해 설치하였다면, CRI integration 플러그인은 기본적으로 비활성화 되어 있음
쿠버네티스에서 containerd를 사용하기 위해서는 CRI support가 활성화되어 있어야 함
cri가 /etc/containerd/config.toml 파일 안에 있는 disabled_plugin 목록에 포함되지 않도록 주의해야 함
만약 해당 파일을 변경하였으면, containerd를 다시 시작함
6. 마스터에 조인(워커노드(node1.labs.local, node2.labs.local, node3.labs.local)에서 작업)
아까 복사해놓은 token 파일을 이용해 master.labs.local의 클러스터에 합류(join) 시킴
7. 조인 확인하기(관리노드(master.labs.local)에서 작업)
대략 1분 정도 기다린 후 정상적으로 Ready 올라오는 것 확인
* 오래 기다려도 Ready가 안 올라올 경우 master 노드에서 아래와 같이 taint를 제거
kubectl taint nodes node1.labs.local
node-role.kubernetes.io/control-plane:NoSchedule-
kubectl taint nodes node2.labs.local
node-role.kubernetes.io/control-plane:NoSchedule-
kubectl taint nodes node3.labs.local
node-role.kubernetes.io/control-plane:NoSchedule-
8. kubectl describe nodes master.labs.local
이렇게 올라오지 않는 경우
sudo -i; kubectl get nodes |
도커 서비스가 마스터 노드에서 활성화되지 않은 경우 [해결] sudo systemctl enable --now docker sudo systemctl restart --now containerd |
아래와 같이 NotReady인 경우 [원인] kubectl describe node master.labs.local | egrep 'error' error: cni plugin not initialized [해결] kubectl get pods -o wide -n kube-system | awk '$1 ~ /calico-node/ {print $1}' 위에 나타나는 모든 노드 이름을 지움 kubectl delete pod [NODENAME] -n kube-system [참고사이트] https://platform9.com/kb/kubernetes/cni-plugin-not-initialized-on-master-node Due to an bug in the Platform9 Managed Kubernetes Stack the CNI config is not reloaded when a partial restart of the stack takes place (Platform9 Managed Kubernetes 스택의 버그로 인해 스택을 부분적으로 다시 시작할 때 CNI 구성이 다시 로드되지 않음) |
9. 지우고 다시 설치할 때
# All Node
sudo systemctl stop kubelet
sudo kubeadm reset -f
sudo rm -rf ~/.kube
sudo rm -rf /root/.kube
sudo rm -rf /var/lib/etcd
으로 모두 삭제 후 Control Plain 구성을 다시 진행
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] Windows에 kubectl을 설치해 Control Plain에 접속하지 않고 클러스터 작업 (0) | 2024.04.01 |
---|---|
[K8S] 쿠버네티스 설치(3)_kubelet, kubeadm, kubectl 설치 (0) | 2024.03.26 |
[K8S] 쿠버네티스 설치(2)_도커 설치 (0) | 2024.03.26 |
[K8S] 쿠버네티스 설치(1)_VMware 노드 구성 (0) | 2024.03.25 |
개인 공부 목적으로 사용하는 블로그입니다 :)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!