본문 바로가기

설정

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

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

 

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 쿠버네티스 클러스터 가 제대로 동작함을 확인하였다.

'설정' 카테고리의 다른 글

elasticsearch geo-shape 쿼리 조회  (0) 2019.11.20
postgresql 9.4 conf location  (0) 2019.10.25
index 생성 예시  (0) 2019.09.03
예시 elasticsearch reindex와 샤드  (0) 2019.09.03
move files and directories to the parent folder in Linux  (0) 2019.07.31