GCP를 이용해서 여러 서버로 구성된 쿠버네티스 클러스터 설치하기 , kubelet 설치 에러 해결하기 (feat. 에러때문에 설치 네시간 실화냐?)

All We Need is Data, itself !·2022년 1월 24일
1

Docker/Kubernetes

목록 보기
2/7

진짜 미친거같다 GCP랑 쿠버랑 잘 맞는다며? 뭐 같은 뭐라며? 왜 안되는데 와 진짜 네시간동안 설치하는데만 진짜... 하 말을 말자 빨리 자야된다

시작하세요 도커/쿠버네티스 책을 참고하여 썼습니다!
근데 제 상황에 맞게 AWS가 아닌 GCP 등의 툴을 이용하느라 코드가 조금씩 차이가 있을 수 있으니 참고하시기 전에 꼭 확인해주세요!!!


GCP instance 만들기

kube-master
kube-worker1
kube-worker2
kube-worker3

이렇게 구성

책에서는 메모리 2GB, CPU 2개를 권하지만 나는 무료 크레딧을 써야 하므로 CPU 하나로 타협을 본다.

❗️라고 했는데 망했다. 이거 혹시 참고하시는 분 있으면 그냥 책에 나온대로 CPU 2개, 2GB 하세요 왜냐면 나중에 최소 사양이라면서 에러뜸.

선생님 말을 잘 들읍시다.

이거 꼭 확인하기!


IP가 모두 다른 것까지 확인했으면 이제 각각의 인스턴스에
kubeadm 과 docker, kubernetes를 설치해줘야한다.

kubeadm, docker, kubernetes 설치하기

모든 서버에서 메모리 스왑(Swap)을 비활성화 해야한다.
이게 활성화 되어 있으면 컨테이너의 성능이 일관되지 않을 수 있다고 한다.
따라서 대부분의 쿠버네티스 설치 도구는 메모리 스왑을 허용하지 않음.


swapoff -a

이제 이렇게 설치해주는데, 문제는, 책에 있는 그대로 하면 root 권한 문제가 뜬다.

자고로 권한 문제가 발생했을 때는 sudo를 넣으면 돌아간다고 배웠다는 거지.

그래서 해봤더니 다 됨.


  • gpg 라는 권한? 허가를 해줘야 한다고 합니다. 도커도 마찬가지
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  • 이거는 저장소 추가해주는 코드
sudo bash -c 'cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF'
  • 이거는 도커 다운로드 받는 코드
wget -qO- https://get.docker.com | sh
  • 이거는 쿠버네티스 설치하는 코드
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni

master node 설정하기


클러스터 초기화하려는데 그냥 넘어가주지 않는다.

역시나 권한문제

그냥 root로 로그인해야겠다 싶어서 root로 로그인함

sudo passwd root
su - root
kubeadm init --apiserver-advertise-address 10.138.0.9 --pod-network-cidr=192.168.0.0/16

그리고 다시 했더니 또 에러 펑 ㅋ...zㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

아 최소 사양이 안된대요 ㅋㅋㅋㅋㅋㅋ 아 .. 쉣.. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
.. 낼 마저 하고 책에 나온대로 합시다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ



자 이렇게
최소사양 맞춰주고 다시 깔아주면 잘 다운로드가 되는 듯 해 보였으나..

정말 하나도 그냥 해주는 법이 없다.


음.. 한시간쯤 걸려서 뭔가 해결을 하긴 했다.

은인....: https://syhwang.tistory.com/50

감사합니다.. 감사합니다.. 엉엉

와ㅏㅏ아아ㅏㅇ 드디어 !!!!! 성공함❗️❗️

이거 뜨면 성공 ㅠ_ㅠ 고생했다

kubelet 설치 에러

http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused

이런 에러가 뜨면 kubelet 설치가 제대로 안된 것 같다.

journalctl -xeu kubelet

위의 코드로 status 확인을 할 수 있다.

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

위의 코드를 실행하고

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

이거를 순서대로 하고 나서

systemctl status kubelet

이 코드로 실행중인지 확인
나는 root로 로그인해서 앞에 sudo 없어도 된당..

이렇게 대충 초록이가 뜨면 실행중인 거고, 실행중이 아니라면

systemctl start kubelet

이거를 입력해서 띄우면 되는 것 같다.

이후 restart를 해주는데 커맨드가 restart는 아니고 커맨드는

kubeadm reset
systemctl restart kubelet

이다. reboot은 하는 게 좋기는 한데, 나는 했다가 포트 연결이 안돼서 또 애먹었다.
일단 한번 그냥 해보고 안되면 reboot 고고

reboot

그럼 이렇게 책에서 말한 바와 같이 세 줄의 명령어가 뜬다.

중간의 세 줄은 마스터 노드에서,
마지막의 한 줄은 워커 노드들에서 실행하면 된다고 한다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

위의 코드는 마스터 노드에서,

kubeadm join 10.138.0.13:6443 --token 6pa5oj.qhy0g8zcl15363wn \
        --discovery-token-ca-cert-hash sha256:377f1xxxx....

맨 마지막 줄에 있는 코드는 (사진엔 잘렸다) 위 코드랑 비슷한 게 있을 것..
이거는 워커 노드에서 실행시켜주면 된다.


라고 했더니 역시나 바로 안되기

워커 노드들에게도 똑같은 에러가 뜬다.
역시 kubelet 설치 과정에서 뭔가 핀트가 안맞아서 설치가 잘 안되는 것 같다.
위와 마찬가지로 시도해본다.

모든 워커노드들에게 똑같이 해준다.

워커 노드들도 잘 돌아간다...^^ 노가다의 연속



컨테이너 네트워크 애드온 설치

쿠버네티스의 컨테이너 간 통신을 위해 flannel, weaveNet 등 여러 오버레이 네트워크가 있지만, 책에서는 calico를 기준으로 한다고 한다.

  • 마스터노드에 아래 코드로 calico 설치해주기
kubectl apply -f https://docs.projectcalio.org/v3.8/manifests/calico.yaml

만일 kubeadm init 명령어의 --pod-network-cidr에서 다른 IP대역을 사용한 경우, calico.yaml 파일을 사용하는 위의 명령어를 다음과 같이 사용해야 함.

#wget https://docs.projectcalio.ort/v3.8/manifests/calico.yaml
#sed -i -e 's?192.168.0.0/16?{입력한IP대역}?g' calico.yaml
#kubectl apply -f clico.yaml

이건 뭐.. 그냥 yaml파일 내의 디폴트 IP대역을 {입력한 IP대역}으로 바꾸겠다는 것


  • 아래의 코드를 찍었을 때 모두 running으로 잘 나온다면 설치가 정상적으로 된 것 !
kubectl get pods --namespace kube-system


우와 ㅠㅠㅠ 드디어 쿠버에 노드 등록했다 ㅠㅠㅠㅠㅠ

어라 여기까지 읽으니까 책에 kubeadm reset이 있었네..^^ 구글링하며 허비한 나의 시간이여 ^ㅠ 
낼 출근인데 ㅋㅋㅋ.. 쿠버만 시작하면 시간이 날아간다 ㅋㅋㅋ 하 .... 난 죽었다 ^_^

수정) nodes notready 상태 에러 해결

참고: https://nirsa.tistory.com/292

나는 다행히 그냥 첫번째 방법으로 해결함



GCP 가격 및 인스턴스 사용량 리뷰

인스턴스를 이렇게, 아까 말했다시피 E2로 CPU 2개, 메모리 2GB를 열었다.
최소사양임. 책 말을 잘 듣자.

크레딧으로 치면 이만큼바께 안썼음 진짜 째끔이네

알차다. ^^


결론: 생각보다 많이 안나오니까 잘 쓰자!

근데 일단 그래도 stop 시켜 두는 거 잊지 말기

profile
분명히 처음엔 데린이었는데,, 이제 개린이인가..

0개의 댓글