쿠버네티스를 사용할 일이 생겼다.
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 해제는 결코 추천하지 않는다.
- 해제할 경우 다시 활성화 시키려면 재부팅이 필요하며 재부팅시 모든 자원에 대해 보안 레이블을 설정해야 하므로 부팅 시간이 매우 오래 걸릴 수 있다.
- vi /etc/sysconfig/selinux
- SELINUX=enforcing 을 SELINUX=disabled 로 변경후 저장한다.
- 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 이렇게 하라구 함.
-> 결과가 달라졌으나 에러 리턴함.
설치할때 swap을 disable 해줬든것같은데.. 다시 해봐야겠다.
https://github.com/kubernetes/kubeadm/issues/610#issuecomment-357606307 >
이 스웩 넘치는 답변에 따르면
swapoff -a
이렇게 해주니 실제로 kuberadm init 이 가능했는데.
왜 그런지는 몰라서 -.,- (이러면 했어도 한게 아니잖아;;) 다행히도 그 밑에 답변이 있었는데..는 영어라서 읽기를 포기하고 swapoff"란" ㅋㅋ 으로 검색을 했다.
검색 결과로 알게된 것은 swapoff -a 는 스왑 메모리 사용을 중지시키는 명령어다. https://extrememanual.net/29460
아 .. 근데 나는 리눅스 스왑 파티션도 모릅니다...
https://sergeswin.com/1034 > 여기 따르면
메모리가 다 찼을때 보조공간 제공. ssd 쬠 떼어다 쓸수있게 하는 방식인가보죠. RAM보단 못하겠지만... 암튼 그렇게 하고 나니 init 이 되었다.
6
아 근데 회의 잠깐 갔다오고나니까 접속 끊겨서 어케 할지 안내문 나온거봐야하는데 그건 캡쳐안했네 ㅋ
ㅋ
ㅋ
ㅋ
ㅋ
아 짜증나
일단 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) 라고 이 블로그에서 말하는데... 나는 ㅠㅠ 세션이 종료되어서 어케하지 어케하지.. 이랬는데 다 방법이 있쪙
이사람의 답변을 참고하여 생성한 토큰을 확인할 수 있었다.
7 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 |