설정

쿠버네티스 튜토리얼해보기

한만큼 2019. 9. 17. 16:27

쿠버네티스를 사용할 일이  생겼다.

 

1 needs : 두개의 컨테이너를 배포해야한다. 현재는 134번 과 180번의 사내 서버의 각각에 도커를 각각 배포한다. -> 귀찮음 발생

(개인적인 생각이지만, 아직 필요도 없는데 기술을 적용하는건 좀 미련한 일이라고 생각한다.  하지만 이번처럼 확실한 이유가 있을땐 미루지 말고 바로 해보기로.)

 

 

2 minikube와 kubeadm 둘중 무엇이 내 선택이 되야하는가 의 고민을 해야한다. (https://stackoverflow.com/questions/49850342/creation-of-nodes-in-vms-by-using-kubernetes-kubeadm-and-minikube) 여기에 따르면 미니쿠베는 단독 컨테이너만 만들 수 있어서 별로라고. 그리고 이렇다면 난 두개의 컨테이너를 사용해야하는데, 내 목적에도 맞지 않다. 그럼 kubeadm으로.

 

3 kubeadm을 centos 7에 설치하자.

(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)

 

3-1 하다보니 역시나, 뭔가 모르는게 튀어나왔다. 바로 SELinux 라는것. 전에도 봤는데 그냥 disabled 로 해놓고 룰루랄라 했었지만 다시 또 모르겠네 -.-; 역시 한번에 알고 지나치는게 좋습니다.  

...더보기

SELinux 는 Linux의 보안을 강화해 주는 보안 강화 커널이고 zero-day 공격 및 buffer overflow 등 어플리케이션 취약점으로 인한 해킹을 방지해 주는 핵심 구성요소이다.

특정 서비스가 SELinux 때문에 동작하지 않는다면 SELinux 를 끄기 보다는 해당 서비스가 SELinux 하에서 잘 동작하도록 설정을 수정하는걸 권장한다.

SELinux 해제

  • 인터넷에 연결된 리눅스 서버라면 SELinux 해제는 결코 추천하지 않는다.
  • 해제할 경우 다시 활성화 시키려면 재부팅이 필요하며 재부팅시 모든 자원에 대해 보안 레이블을 설정해야 하므로 부팅 시간이 매우 오래 걸릴 수 있다.
  1. vi /etc/sysconfig/selinux
  2. SELINUX=enforcing 을 SELINUX=disabled 로 변경후 저장한다.
  3. reboot

SELinux 를 해제후 다시 켤 경우 relabel 이 필요하며 이때 잘못된 설정이 있을 경우 부팅이 안 되거나 ssh 로 원격 접속이 불가능할 수 있으므로 enforcing 모드가 아닌 permissive 로 설정후 재부팅하는 것을 권장

 

--> 재부팅하다가 회사 서버 죽어서 내일 연락해보고 다시 해야함 ㅠ

 

https://www.lesstif.com/pages/viewpage.action?pageId=6979732

 

인프라팀에서 selinux를 활성화한 이유가 있냐며 disabled로 다시 돌려주었다.

 

 

그려.. 뭐.. 

그리고 

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

 

이거 실행하니까 

 

이런 문제가 있다.

 

그래서 3의 해결방법대로 

 

 yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --disablerepo=mariadb-main

이렇게 하니까 또 바뀌었음ㅋㅋㅋ

위에처럼 똑같이해주니까 maxscale도 어쩌고 그래서 똑같이 해줬다 그랬드니

 

 yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --disablerepo=mariadb-main  --disablerepo=mariadb-maxscale

이렇ㄱㅔ ㅇㅇ 

 

그랬드니

mariadb tools가 어쩌고 한다.

그래서 이렇게 다시...

 

yum-config-manager --save --setopt=mariadb-tools.skip_if_unavailable=true

 

일케 하고 다시한번 

 

 yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --disablerepo=mariadb-main  --disablerepo=mariadb-maxscale

 

해줬는데 이게 제대로  설치된건지. 잘 모르겠다. 일단은 

 

4 설치를 했다. 그 이후에 내가 해야하는 작업을 생각해보니 https://kubernetes.io/ko/docs/concepts/ 에서 보면 쿠버네티스 API 오브젝트 로 클러스터에 대해 사용자가 바라는 상태 <- 내가 원하는 상태를 쿠버네티스 용어로 어케 옮길 지를 몰라서 개념을 알아야한다는 생각이 들었다. 

 

 

5 찾아보니 마스터노드 + 걍 노드 의 조합을 생각해야하는데 내 서버는 총 2대라서 

can a kubernetes master also be a node 한지 궁금해졌다. https://javacan.tistory.com/entry/k8s-install-in-centos7 여기를 보고 따라하던중. 

 

 kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=180.70.98.196

 

이 결과가 

 

[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
        [ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

 

이렇게 리턴된다. 

 

 

음.. 검색해보니 https://github.com/kubernetes/kubeadm/issues/1062 

echo '1' > /proc/sys/net/ipv4/ip_forward 이렇게 하라구 함.

 

-> 결과가 달라졌으나 에러 리턴함.

 

이렇게 말이지... if you know what you are doing 이란 말이 졸라 찔리게 한다.

설치할때 swap을 disable 해줬든것같은데.. 다시 해봐야겠다. 

 

https://github.com/kubernetes/kubeadm/issues/610#issuecomment-357606307 >

이 스웩 넘치는 답변에 따르면 

swapoff -a

이렇게 해주니 실제로 kuberadm init 이 가능했는데. 

왜 그런지는 몰라서 -.,- (이러면 했어도 한게 아니잖아;;) 다행히도 그 밑에 답변이 있었는데..는 영어라서 읽기를 포기하고 swapoff"란" ㅋㅋ 으로 검색을 했다.

 

검색 결과로 알게된 것은 swapoff -a 는 스왑 메모리 사용을 중지시키는 명령어다. https://extrememanual.net/29460

아 .. 근데 나는 리눅스 스왑 파티션도 모릅니다... 

미안하다 현재 나의 centos 7 아아아악!!

https://sergeswin.com/1034 > 여기 따르면 

메모리가 다 찼을때 보조공간 제공. ssd 쬠 떼어다 쓸수있게 하는 방식인가보죠. RAM보단 못하겠지만... 암튼 그렇게 하고 나니 init 이 되었다.

 

아 근데 회의 잠깐 갔다오고나니까 접속 끊겨서 어케 할지 안내문 나온거봐야하는데 그건 캡쳐안했네 ㅋ

 아 짜증나

일단 cluster에 node를 join하라고 한것같으니 그걸 다시 검색해봐야겠다

 kubeadm join 172.16.1.100:6443 --token yrc47a.55b25p2dhe14pzd1 --discovery-token-ca-cert-hash sha256:2a7a31510b9a0b0da1cf71c2c29627b40711cdd84be12944a713ce2af2d5d148

 

마스터 초기화에 성공하면 마지막에 'kubeadm join ....'으로 시작하는 명령어가 출력된다. 이 명령어를 이용해서 작업 노드를 설치하므로 잘 복사해 놓자. (https://javacan.tistory.com/entry/k8s-install-in-centos7) 라고 이 블로그에서 말하는데... 나는 ㅠㅠ 세션이 종료되어서 어케하지 어케하지.. 이랬는데 다 방법이 있쪙 

 

https://stackoverflow.com/a/55144143/10194999

이사람의 답변을 참고하여 생성한 토큰을 확인할 수 있었다.

 

 

 export KUBECONFIG=/etc/kubernetes/admin.conf 를 환경변수로 설정하자

 

8 전반적으로 (https://javacan.tistory.com/entry/k8s-install-in-centos7) 여기의 포스팅에 의존해서 설치를 하고 있는데 CNI와 flannel이 무엇인지 모르면서 ㅜㅜ 설치해야하는 상황이 되었다. (아 싫다.. 일단 설치 ㄱ ㄱ)

(https://kubernetes.io/ko/docs/setup/production-environment/windows/) < 여기서는 VXLAN 방식의 플라넬 ? 이라는 어쩌구 저쩌구 하넹 

 

 

9 아.. 놔... (https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) 그다음은 이거 참고해서 하라네 ㅠㅠ 흐엉~!~~!~

 

 

 

+ 다른 노드를 join해야 하는 상황인것같은데 갑자기 집중력 저하로 대시보드나 띄우기로 했음.

https://github.com/kubernetes/dashboard > 참고

 

 

 

--> 왜인지 404 떠서 그냥 다시 CNI 설치로.

참고했던 블로그는 거의 (https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) 이와 유사하긴 하네

 

 

 

10 Control plane node isolation 설정

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#control-plane-node-isolation > 이거 참고. 현재 내 노드는 마스터만 있으니까.

 

 

11 node 추가하래.

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

토큰 이기다 

 kubeadm join --token cd396f.icqdmcudtk601zw0 180.70.98.196:6443 --discovery-token-ca-cert-hash sha256:a3876d3883e829872b03482570f0927a59810bf479141e67387b0b92c3097180

 

도큐먼ㅌ에 따르면 이렇게 하라는거. 근데 뭔 오류나네.

 

 

뭔가 안되서 결국 reset 하기로

 

 

 

리셋...완료...

 

kubeadm join 180.70.98.196:6443 --token dp1831.9kv6hatadakhcn02 \
    --discovery-token-ca-cert-hash sha256:3907eee941e7135f2dcc35d128ec3847ee5d53b5d767ffd4ce5429b0624538a1

 

써먹을곳이 잇다 하니 킵... 토큰은 24시간 이내만 유효함.

 

 

뭐야 왜 안돼
난 바본가? ㅠ 쿨쩍,ㅠㅠㅠㅠ

 

 

12 마스터 노드는 제대루 된거같으니까

다른 노드 추가.

 

13 마스터 노드에서 확인하니까

 

이런 상태

 

똑같은명령어 치는데 어쩔때 되고 어쩔때 안되는게 이게 정상인가? ㅅㅂ 내가 뭘 잘못햇겟지? 근데 아닌거가터..;;헝
윗 짤 이전에 실행한 화면 ㅋㅎ;;

 

 

14 쿠버네티스 클러스터 가 제대로 동작함을 확인하였다.