- Kubernets 클러스터 PoC 를 위해 RancherD 를 통해 Kubernetes 클러스터를 구축해보는 절차
- Cloud 플랫폼과 On-premise 하이브리드 플랫폼으로 구성
- Rancher 는 Cloud VM 머신에 설치
- 쿠버네티스 클러스터는 On-premise, CloudVM 2군데에 설정
- 랜처 메인서버 1대, 각 클러스터는 3개의 머신으로 구성. 총 7(1+3*2)논리적 머신을 사용
- VM 머신의 OS 는 Ubuntu20.04LTS
- 현재 RancherD 버전은 v2.5.4
- 발전된 Idea
- 전체 과정을 ansible playbook 으로 생성
- stage 에 따라 상이한 클러스터를 구축하여 운영하는것도 고려
- RancherD
Rancher 클러스터 배포를 위한 더 간단한 도구.
초기에 Rancher 구성을 하기 위해 RancherD 를 고려 했으나 RancherD는 RKE2 Kbernetes 배포판을 사용하기 때문에 제외
RKE2 는 컨테이너 런타임으로 도커를 사용하지 않고 kubelet 을 사용하기 때문에 도커 컨테이너 기반으로 전체 플랫폼을 구축할 예정이기 때문에 제외
(Rancher 의 인증 프록시를 통한 Kubernetes 클러스터 관리 아키텍처)
(Rancher 서버의 컴포넌트 및 소스코드)
Web UI 기반으로 k8s를 배포, 관리, 모니터링 할 수 있는 도구
https://rancher.com/docs/rancher/v2.x/en/installation/single-node/
RancherD
아래 포트들이 통신 가능하도록 방화벽정책이 허용되어야 있어야 함.
GCP 의 경우 동일 네트웍내 기본적으로 모든 허용 상태이기때문에 별도 작업 진행 안함
GCP VM 노드를 사용해 구축하며 rancher 가이드 문서에는 GCP 기반 rancher server 배포 방법도 가이드 되어 있음
하지만 이번 poc 를 위해서는 Manual 하게 VM 노드상에서 설치를 진행 해보는것으로 함
GCP) https://rancher.com/docs/rancher/v2.6/en/quick-start-guide/deployment/google-gcp-qs/
Manual) https://rancher.com/docs/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher
Unable to find image 'rancher/rancher:latest' locally
latest: Pulling from rancher/rancher
162362c3fcbd: Pull complete
39a8ca7345fc: Pull complete
c79d065b1f4b: Pull complete
800e10249f2e: Pull complete
1142a9dac488: Pull complete
2250ae118454: Pull complete
1341c37b9eb8: Pull complete
55bcb280677a: Pull complete
bd581b0743bb: Pull complete
b72afc26dfc9: Pull complete
14679cbbedf6: Pull complete
f24c4dc3be34: Pull complete
17be3b0b6e61: Pull complete
5c94eb34e2cc: Pull complete
a556913627fb: Pull complete
93dbc7e527b6: Pull complete
3c1b899e0e3f: Pull complete
Digest: sha256:5da40c2b0e8706621bb58728901f3d7d0ca3b2354c4b870b2556d1b68bc6617f
Status: Downloaded newer image for rancher/rancher:latest
48f87a37d0560d7f5dd7bbf21371528842e754a31372319110d142b7ad2232a2
해당 포트로 Rancher server dashboard 접근을 위해 외부 고정 IP 및 80, 443 포트를 오픈(80, 443 모두 오픈해야 접근 가능)
80 포트로 접근 시 443 으로 리다이렉트
고급 버튼을 눌러 페이지 접근
접속후 로그인 하여 일부 일회성 설정들을 진행 함
docker 명령어를 통해 현재 Rancher server 가 실행되는 컨테이너의 컨테이너ID 를 확인하고 해당 컨테이너ID 를 통해 아래 커맨드를 실행
$ docker logs [Container_ID] 2>&1 | grep "Bootstrap Password:"
01:41:31 [INFO] Bootstrap Password: [PASSWORD]
$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.6.0 --server (이하생략)
Unable to find image 'rancher/rancher-agent:v2.6.0' locally
v2.6.0: Pulling from rancher/rancher-agent
162362c3fcbd: Pull complete
a7d34ec4bef4: Pull complete
32c4e357d9c8: Pull complete
2ce70d959054: Pull complete
975660f44ba7: Pull complete
c7934bc84225: Pull complete
d5e13fc918c7: Pull complete
Digest: sha256:d2a2c5a6cd638d2cbb6fcd78bda19accf6d76ce27540846c4c222f8028ced64c
Status: Downloaded newer image for rancher/rancher-agent:v2.6.0
4420d12d4f833db614254673ea93d7538c9e1582f02cfa91b5d251bf4eb184
단일 서버에 worker, controlplane, etcd 모두 체크하여 수행해도 될듯..
--etcd --controlplane --worker
Active 단계
explore 버튼이 활성화 되고 클러스터링이 완료 된 것을 볼 수 있음
Activate 단계까지 모두 완료 되는데 10분 이상의 시간이 소요됨
클러스터 이름을 클릭해보면 Events 란에 노드의 상태 변화를 확인 할 수 있음
Capacity 에 worker node 1개의 리소스가 노출됨
추가적으로 각 노드의 Role 을 랜처 상에서 수정하는것이 가능한지 테스트 필요
다음 Step은 Rancher RKE 클러스터에 Deployments 를 생성하는 작업을 진행
# docker rm -f $(docker ps -qa)
# docker rmi -f $(docker images -q)
# docker volume rm $(docker volume ls -q)
# for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
# rm -rf /etc/ceph \
/etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/kube-audit \
/var/log/pods \
/var/run/calico
Rancher server 설정 중 server 노드의 IP 변경 이슈가 발생해 변경사항을 적용
rancher server IP: 10.1.1.5 -> 10.75.193.4
cluster node1 IP: 10.1.1.13 -> 10.75.193.5
cluster node2 IP: 10.1.1.10 -> 10.75.193.6
cluster node3 IP: 10.1.1.14 -> 10.75.193.7
cluster node4 IP: 10.1.1.15 -> 10.75.193.8
Cluster node 에서는 클러스터 컨테이너의 속성 변경이 필요하므로 컨테이너 종료 > 컨테이너의 ID 기준 설정파일 수정 > Docker 데몬 재실행 순서대로 작업한다.
(진행중 실패하여 클러스터 노드 삭제 후 신규 클러스터 생성으로 진행)
# To check current value
> kubectl get settings.management.cattle.io server-url
# To change to a new value
> kubectl patch settings.management.cattle.io server-url -p '{"value":"NEWVALUE"}' --type=merge
# 변경 전 URL 확인
> kubectl get settings.management.cattle.io server-url
NAME VALUE
server-url https://10.1.1.5
# URL 변경
> kubectl patch settings.management.cattle.io server-url -p '{"value":"https://10.75.193.4"}' --type=merge
setting.management.cattle.io/server-url patched
# 변경 후 URL 확인
> kubectl get settings.management.cattle.io server-url
NAME VALUE
server-url https://10.75.193.4
참고자료