
출처: 시작하세요 도커/쿠버네티스 - 용찬호 지음

문제의 쿠버네티스
들어는 봤지만 뭔지는 잘모르고, 오케스트레이션 도구라고만 들음. 오케스트레이션이란 말도 낯설었지만 도커 공부하면서 정리해놨으니.. 패스
설치
1) 환경 및 도구
사용환경에 따라 설치가 다른것 같고.. 제공 기능도 다른거 같다.
나는 온프레미스 서버 2대로 진행하기 때문에 kubespray, kubeadm 등의 도구로 설치해야한다고 한다.
클라우드라면 인프라 관리는 AWS, GCP에서 하고, 쿠버네티스 설치 및 관리만 직접하면 된다고한다. kubespray, kubeadm, kops등이 도구
쿠버네티스 자체를 클라우드 서비스로서 사용하려면 AWS의 EKS, GCP의 GKE등의 매니지드 서비스를 통하면 설치부터 관리까지 다 해주니 운영비용이 줄어든다고 한다. 하지만 퍼블릭이니 회사에서 사용하려면 일단 사용목적이나 올라가는 컨테이너가 어떻게 구성될지를 좀 생각해보고, 문제가 없을 것 같아도 보안부서에 문의를 해봐야할 것 같다.
2) 버전
윈도우10에서 설치하면 kubernetes enable로 간단하게 되는것 같다. standalone모드라 기능 제약이 있다고 책에 있는것 같으나 차이는 잘모르겠고 어차피 로컬에서는 안쓸것 같아 패스. 여튼 로컬에 설치된 버전은 1.19.7 이었으나,
업무 환경이 1.17.11 기반이므로 이걸로 설치하기로 함.(책에서는 너무 최신이거나 너무 옛날 버전만 아니면 된다고하는데, 일단 1.16으로 책은 되어있는것 같음, kubectl version --short으로 버전 확인)
3) 준비
리눅스 온프레미스 서버 2대에 설치하려면 먼저 확인할 사항이 있는데.
- 모든 서버시간이 ntp 동기화 되었는지
- 모든 서버 맥주소가 다른지 (가상머신 복사할 경우 이런 경우가 있다고 함)
- 모든 서버가 2Gb 메모리 2CPU 이상의 충분한 자원을 보유하였는지 체크
- swapoff -a 로 각 서버에서 메모리 스왑을 비활성화
라고한다.
4) 설치
* kubeadm으로 설치
1. 쿠버네티스 저장소 추가 (모든 노드에서)
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
=> E: This command can only be used by root (23) Failed writing body 띠용..
관리자 권한이 아니라서 그런가
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
했지만 또 같은 에러 .. -_ㅜ
=> curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
OK
** 결론 curl은 관리자 권한 필요없고, 뒤에 apt-key add - 이부분에 관리자 권한이 필요한 것
- 이렇게 하나 배웁니다.. 윈도우 서버만 주구장창 쓴 나에게 이거슨 시련
- Permission deneid 뜨는 것들은 여기 저기 sudo 붙이니 해결
2. 도커 설치 (이전 포스트에서 이미 했으니 패스, 모든 노드)
3. 쿠버네티스 설치 (모든노드)
apt-get install kubelet kubeadm kubectl kubernetes-cni (최신버전 설치)
apt-get install kubelet=1.17.11-00 kubeadm kubectl kubernetes-cni (특정버전 설치) ==> 나중에 kubeadm init이 안되는 문제 발생함.. => 아래 삽질 시작. kubelet만 버전 세팅해서 나온 문제로 보인다. kubeadm, kubectl 도 동일버전 명시.. 고로 다시 아래꺼를 반복하게 됨.. ㅠㅠ
sudo 붙여서 설치 끝 중간에 Y/n물어보는데 쿨하게 노룩 Y 하고 나서 보니 뭐 용량큰거 설치하는데 괜찮냐는거니 ok
5) 쿠버네티스 클러스터 초기화 (매니저 노드)
kubeadm init --apiserver-advertise-address 172.16.xx.xx \ --pod-network-cidr=192.168.0.0/16
=> 안됨. 앞에 sudo 붙여도 안되고 https://kubernetes.io/docs/setup/cri/ 에서 가이드를 따르라고 메시지 나옴. 뭐 preflight excution error라고 함
<삽 to the 질 시작>
** https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 이거 따라하면 된다.
CRI-O로도 해보고..
$ cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
EOF
$ cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:VERSION=1.20:1.20.0.list deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/VERSION=1.20:1.20.0/xUbuntu_18.04/ /
EOF
$ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_18.04/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add-
$ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.20:/1.20.0/xUbuntu_18.04/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers-cri-o.gpg add -
$ sudo apt-get update
$ sudo apt-get install cri-o cri-o-runc
Docker로도 해보고
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
<삽 to the 질 종료>
뭘해도 안됨.. 로그 잘 읽어보니 버전이 안맞댄다. 영어공부를 그리했는데 잘읽어볼걸..
해결책은

5) 설정
매니저 노드에서
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
워커노드에서
$ sudo kubeadm join 172.16.xx.xx:6443 --token <매니저노드에서 kubeadmin init 했을때 보면 나오는 토큰.. 혹시 못봤다면 kubeadm token list 로 확인 가능> # 설치가 안되면 뒤에 --discovery-token-unsafe-skip-ca-verification 을 붙이라기에 붙였더니 되었다. 오류메시지에서 추천한대로..

다시 매니저 노드에서 이제 책과는 좀 다르게 컨테이너간 통신을 위해 (책에서는 calico 설치함)
weaveNet 설치한다. (https://www.weave.works/docs/net/latest/kubernetes/kube-addon/)
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
$ kubectl get pods --namespace kube-system
전부 Running이면 정상이라고 함
$ kubectl get nodes
이걸로 등록된 노드 확인

책 따라 하긴했는데 내가 뭘 한건지 느낌이 안온다. 도커 스웜같이 클러스터 구성된거라고 믿고있다.
일단 진도를 나가보자.
'환경관련' 카테고리의 다른 글
| 책보고 따라해보는 쿠버네티스: (4) Ingress, PV, PVC (0) | 2021.07.16 |
|---|---|
| 쿠버네티스 대시보드와 렌즈 (1) | 2021.06.17 |
| 책보고 따라해보는 쿠버네티스: (3) 리소스 관리/설정 (0) | 2021.06.14 |
| 책보고 따라해보는 쿠버네티스: (2) 시작하기 (1) | 2021.06.07 |
| 책보고 정리해보는 도커 기초 (0) | 2021.06.04 |