진짜 미친거같다 GCP랑 쿠버랑 잘 맞는다며? 뭐 같은 뭐라며? 왜 안되는데 와 진짜 네시간동안 설치하는데만 진짜... 하 말을 말자 빨리 자야된다
시작하세요 도커/쿠버네티스 책을 참고하여 썼습니다!
근데 제 상황에 맞게 AWS가 아닌 GCP 등의 툴을 이용하느라 코드가 조금씩 차이가 있을 수 있으니 참고하시기 전에 꼭 확인해주세요!!!
kube-master
kube-worker1
kube-worker2
kube-worker3
이렇게 구성
책에서는 메모리 2GB, CPU 2개를 권하지만 나는 무료 크레딧을 써야 하므로 CPU 하나로 타협을 본다.
❗️라고 했는데 망했다. 이거 혹시 참고하시는 분 있으면 그냥 책에 나온대로 CPU 2개, 2GB 하세요 왜냐면 나중에 최소 사양이라면서 에러뜸.
선생님 말을 잘 들읍시다.
이거 꼭 확인하기!
IP가 모두 다른 것까지 확인했으면 이제 각각의 인스턴스에
kubeadm 과 docker, kubernetes를 설치해줘야한다.
모든 서버에서 메모리 스왑(Swap)을 비활성화 해야한다.
이게 활성화 되어 있으면 컨테이너의 성능이 일관되지 않을 수 있다고 한다.
따라서 대부분의 쿠버네티스 설치 도구는 메모리 스왑을 허용하지 않음.
swapoff -a
이제 이렇게 설치해주는데, 문제는, 책에 있는 그대로 하면 root 권한 문제가 뜬다.
자고로 권한 문제가 발생했을 때는 sudo를 넣으면 돌아간다고 배웠다는 거지.
그래서 해봤더니 다 됨.
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
역시나 권한문제
그냥 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
감사합니다.. 감사합니다.. 엉엉
와ㅏㅏ아아ㅏㅇ 드디어 !!!!! 성공함❗️❗️
이거 뜨면 성공 ㅠ_ㅠ 고생했다
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를 기준으로 한다고 한다.
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대역}으로 바꾸겠다는 것
kubectl get pods --namespace kube-system
우와 ㅠㅠㅠ 드디어 쿠버에 노드 등록했다 ㅠㅠㅠㅠㅠ
어라 여기까지 읽으니까 책에 kubeadm reset이 있었네..^^ 구글링하며 허비한 나의 시간이여 ^ㅠ
낼 출근인데 ㅋㅋㅋ.. 쿠버만 시작하면 시간이 날아간다 ㅋㅋㅋ 하 .... 난 죽었다 ^_^
나는 다행히 그냥 첫번째 방법으로 해결함
인스턴스를 이렇게, 아까 말했다시피 E2로 CPU 2개, 메모리 2GB를 열었다.
최소사양임. 책 말을 잘 듣자.
크레딧으로 치면 이만큼바께 안썼음 진짜 째끔이네
알차다. ^^
결론: 생각보다 많이 안나오니까 잘 쓰자!
근데 일단 그래도 stop 시켜 두는 거 잊지 말기