티스토리 뷰
들어가는 말
- docker와 kubernetes(이하 k8s)를 간단하게 활용해 보기 위한 portainer와 rancher를 소개합니다.
대상
- docker / k8s에 대해 기초를 아시는 분
- docker / k8s를 이용한 P.O.C. 를 위해, docker / k8s를 간단하게 구성해보고 싶으신 분
- docker / k8s를 클러스터로 구축하여 사용해보고 싶으신 분
사족
- 본 소개글은 docker / k8s에 대한 소개글이 아닙니다.
- portainer와 rancher 두 가지 툴 모두 공식 가이드가 매우 잘 되어 있습니다.
- 기술 공유 측면보다는 소개라는 측면에서 봐주시면 좋겠습니다.
- 팀에서 구축하셔서 사용 중인 portainer와 rancher를 재구축하면서 정리한 글입니다.
- k8s을 간단하게 사용하기 위해 minikube라는 선택지도 있습니다.
- 잘못된 내용이나 더 보아야 할 내용이 있다면 알려주시면 많은 도움이 됩니다.
환경
- WMI, WDI 환경에서 설치 및 동작 검증하였습니다.
- 본 소개글에서는 ToastCloud Instance에 설치하는 것으로 내용을 전개하겠습니다.
- OS
- CentOS 7.x 이상 환경에서 검증하였습니다.
- CentOS 6.x 환경에서도 가능하다고 알고 있지만 권장하지 않습니다.
- docker service, stack, swarm 사용을 위해 docker 1.13 이상이 설치 가능한 환경이면 무방합니다.
- CentOS 7.x 이상 환경에서 검증하였습니다.
- 메모리
- 시스템 최소사양은 없으나 8gb 메모리를 가진 환경을 권장합니다.
- 램은 많을수록 쾌적한 환경이 됩니다.
준비
인프라
- WDI 환경의 CentOS 7.1에서 진행합니다.
- 인스턴스
- CentOS 7.1, Standard, m2, m2.large, vCPU 4, RAM 8GB, HDD 100GB
- 3 EA
- 보안 그룹
- 9000 TCP 허용
- remote 사용하시는 환경의 NAT ACL 등록
- 9000 TCP 허용
- Floating IP
- 1 EA
-
주의
- 사용을 마친 서버 및 IP는 종료/반납하는 것이 좋습니다.
그림 1.
- 사용을 마친 서버 및 IP는 종료/반납하는 것이 좋습니다.
-
경험에 의거 ipv6 기능을 꺼 두는편이 진행하기 편했습니다.
- sudo vi /etc/sysctl.conf
- 변경 후 재시작이 필요합니다.
- sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1 net.ipv6.bindv6only = 0
- 작업 중 firewalld 를 끄고 진행하였습니다.
- sudo systemctl stop firewalld
docker (Docker CE)
- 각 서버에서 docker를 설치합니다.
- yum repository 설정 추가
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 설치 방법
$ sudo yum install docker-ce docker-ce-cli containerd.io
- 실행 및 동작 확인
$ sudo systemctl start docker $ sudo docker version Client: Version: 18.09.4 API version: 1.39 Go version: go1.10.8 Git commit: d14af54266 Built: Wed Mar 27 18:34:51 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.4 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: d14af54 Built: Wed Mar 27 18:04:46 2019 OS/Arch: linux/amd64 Experimental: false
Portainer
소개
- https://www.portainer.io
- web 환경으로 docker 컨테이너들을 관리해 주는 툴입니다.
- live demo
- http://demo.portainer.io/
- admin:tryportainer
- http://demo.portainer.io/
준비
- docker swarm이 필요합니다.
- 1번 서버
- swarm init 수행
[centos@k8s-test-1 ~]$ docker swarm init Swarm initialized: current node (u60jtvwp7z7itarfj5lf9x83n) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-3wzws4os45vj7yvk3w98b9ueuz86zh5u9ouftrgp383j5j88x9-6ker2n2qykfao8mbo4l0ev6gg \ 192.168.0.4:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
- 2번, 3번 서버
- swarm join 수행
- 1번 서버에서 swarm init 한 결과물을 사용합니다.
[centos@k8s-test-3 ~]$ sudo docker swarm join --token SWMTKN-1-3wzws4os45vj7yvk3w98b9ueuz86zh5u9ouftrgp383j5j88x9-6ker2n2qykfao8mbo4l0ev6gg 192.168.0.4:2377 This node joined a swarm as a worker.
설치
- https://www.portainer.io/installation/
- swarm init을 진행했던 1번 서버에서 수행합니다.
$ curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml $ sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer Creating network portainer_agent_network Creating service portainer_agent Creating service portainer_portainer
- 설치 완료 확인
접속
- 1번 서버에 할당해 놓은 floating ip:9000으로 접속합니다.
그림 2.
그림 3. - 각 서버에 떠 있는 컨테이너들을 확인할 수 있습니다.
- 현시점에서 portainer agent들이 상주하고 있습니다.
샘플 (kafka, zookeeper 설치)
- 설치만 하고 바로 넘어가긴 섭섭하니 kafka, zookeeper 한벌씩 portainer를 통해 docker로 배포해 보겠습니다.
주키퍼 배포
- portainer > Containers > Add container
그림 4. - 설정
- wurstmeister/zookeeper 이미지 사용
- k8s-test-3.novalocal 에 배포
- 2181 포트를 호스트에 매핑
- 배포 완료 확인
그림 5.
카프카 배포
- portainer > Containers > Add container
그림 6. - 설정
- wurstmeister/kafka:2.11-0.11.0.3 이미지 사용
- k8s-test-2.novalocal 에 배포
- 9092 포트를 호스트에 매핑
그림 7.
- 추가 설정
- KAFKA_ADVERTISED_PORT=9092
- KAFKA_ZOOKEEPER_CONNECT=test-zookeeper:2181
- KAFKA_ADVERTISED_HOST_NAME=test-kafka
그림 8.
- 그외 설정
- kafka 가 동작하는 container의 /etc/hosts 에 zookeeper container를 띄운 호스트(k8s-test-3.novalocal)의 ip를 등록합니다.
- kafka 가 동작하는 container에 자기 자신을 등록합니다.
- 배포완료 확인
그림9.
카프카 동작 확인
- Containers > test-kafka > Console
그림 10.
그림 11. - 카프카 정상 동작 확인
Rancher
소개
- https://rancher.com/
- Multi-Cluster Kubernetes
- Management Rancher is open-source software for delivering Kubernetes-as-a-Service.
- web UI 기반으로 k8s를 배포, 관리, 모니터링할 수 있는 도구입니다.
준비
- WDI 환경에서 rancher를 통해 k8s 클러스터를 관리하기 위해서, 보안정책에 추가 port 오픈이 필요합니다.
- 사용되는 포트는 공식 문서에서 확인 가능합니다.
- https://rancher.com/docs/rancher/v2.x/en/installation/references/
- 보안 정책에서 inbound 포트를 허용하도록 등록합니다. (ipv4, ipv6 모두 해당되지만 ipv6를 끌 경우 ipv4 만 등록합니다.)
2376 TCP
2379-2380 TCP
8472 UDP
9099 TCP
6783 TCP
6783-6784 UDP
10250 TCP
10254 TCP
30000-32767 TCP/UDP
설치
- https://rancher.com/docs/rancher/v2.x/en/installation/single-node/
- rancher 메인 서버를 한대만 사용하고, k8s 클러스터에 필요한 agent 들은 전체 서버에 사용하는 구조로 진행할 예정입니다.
- 1번 서버
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest
- 설치 및 실행 완료
- 접속 확인
- 최초 접속시 admin 계정의 비밀번호 및 server 주소를 설정합니다.
- 서버 주소 등록 단계에서 public floating ip 로 기본 설정되어 있는데 floating ip 가 아닌 eth0 의 ip 로 변경해줍니다.
- 1번서버의 floating ip 로 80포트로 접속
그림12.
번외 - 초기화 방법
- 아래 스크립트를 통해 rancher를 초기화할 수 있습니다.
- 정확히는 docker 전체를 초기화하게 됩니다. (portainer는 재시작합니다.)
- 현시점에서 문제 발생 시 스크립트를 이용하여 초기화하는 방법이 수월하였습니다.
k8s 클러스터 생성
- Clusters > Add Cluster
- 클러스터 유형 Custom, Cluster 제공자 Custom 나머지 옵션은 기본 값으로 진행합니다.
그림 13.
그림 14. - 클러스터 생성이 완료되었습니다.
k8s 클러스터 배포
- 2,3번 서버를 대상으로 클러스터를 배포합니다.
- Clusters > 생성한 클러스터 선택
그림 15. - Edit 메뉴 진입 가장 아래에 있는 노드 옵션 확인합니다.
그림 16.
그림 17.
2번 서버
- etcd, Control Plane, Worker를 체크한 뒤 생성되는 명령어를 복사하여 2번 서버에서 실행합니다.
그림 18. - 초기화에 일정 시간이 지난 뒤 정상적으로 등록된 것으로 나옵니다.
- 도움말
- 사내 인프라 환경에서는 문제가 없었는데 TC instance 환경에서 이 과정 진행 중 1번 서버 - 2번 서버 간 특정 포트에 대한 통신 실패가 발생했고 tcp 덤프로도 트러블슈팅이 잘 안되어 다음과 같은 조치 했습니다.
- ipv6 기능 전체 끄기
- rancher의 pre open 포트들을 전부 security group에 등록
- firewalld 끄기
- rancher 최초 구동 및 접속 시 등록하는 서버 ip 를 floating ip 로 등록하지 않고 private ip (192... ) 로 등록
- 사내 인프라 환경에서는 문제가 없었는데 TC instance 환경에서 이 과정 진행 중 1번 서버 - 2번 서버 간 특정 포트에 대한 통신 실패가 발생했고 tcp 덤프로도 트러블슈팅이 잘 안되어 다음과 같은 조치 했습니다.
3번 서버
- Worker 만 체크한 뒤 3번 서버에서 실행합니다.
그림 19.
k8s 클러스터 구축 완료 확인
그림20.
k8s 클러스터 활용 - rabbitmq
- kubectl 을 동작할 환경을 준비합니다.
- rancher 위에서 수행했습니다.
그림 21.
그림 22.
- rancher 위에서 수행했습니다.
- Kubeconfig File 버튼을 눌러서 내용을 kubectl 이 동작하는 환경의 ~/.kube/config에 저장합니다.
- kubectl 이 설정을 참조하는지 확인합니다.
- kubectl cluster-info
- rabbitmq 폴더를 생성합니다.
- rabbitmq-deployment.yaml을 다음과 같이 작성합니다.
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: rabbitmq labels: app: rabbitmq spec: replicas: 1 template: metadata: labels: app: rabbitmq spec: containers: - image: rabbitmq:3.6.10 name: rabbitmq ports: - containerPort: 5672
- rabbitmq-svc.yaml을 다음과 같이 작성합니다.
apiVersion: v1 kind: Service metadata: name: rabbitmq labels: app: rabbitmq spec: ports: - port: 5672 selector: app: rabbitmq
- 서비스를 배포한 뒤 rabbitmq 가 배포된 것을 확인합니다.
- kubectl create -f ./rabbitmq
- kubectl get all -l app=rabbitmq
그림 23.
- 정상 동작 확인
나가는 말
- portainer는 docker를 사용하기 편하게 GUI로 제공해주는 툴로서 모든 기능은 docker cli 명령어로도 가능합니다.
- k8s 클러스터를 사용하기 위해 rancher로 클러스터를 구축해서 이용해 보고 있는데, k8s 클러스터 자체에 큰 문제는 발견하지 못했습니다.
- 다만, rancher를 이용하였을 때 클러스터 생성은 쉽지만, 삭제나 트러블슈팅은 약간 어렵습니다.
- 트러블슈팅이 어려운 건 kubernetes를 깊게 알지 못하는 상태에서 쓰려고 하고 있어서 발생한 것으로 생각합니다.
- rancher를 production 환경에서 사용하는 것은 어려울 수도 있습니다.
- 다만, rancher를 이용하였을 때 클러스터 생성은 쉽지만, 삭제나 트러블슈팅은 약간 어렵습니다.
'3. 쿠버네티스의 모든것' 카테고리의 다른 글
2탄!! 쿠버네티스 설치 준비[마스터노드] (2) | 2020.03.19 |
---|---|
1탄!! 쿠버네티스 구성준비! [마스터노드] [WORKER NODE] 셋팅하기 (12) | 2020.03.18 |
rancher 설치및 실행해보자 (도커로) (0) | 2020.03.06 |
2020.02.25 NEW EKS *EKSCTL 생성해보기 (0) | 2020.02.25 |
2020.02.13 EKS 시작해보자 (0) | 2020.02.13 |
- Total
- Today
- Yesterday
- startup 에러
- ubuntu
- [오라클 튜닝] sql 튜닝
- 앤시블
- 여러서버 컨트롤
- [오라클 튜닝] instance 튜닝2
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- 키알리
- 트리이스
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- MSA
- 코로나19
- directory copy 후 startup 에러
- 5.4.0.1072
- 설치하기(HP-UX)
- Oracle
- 우분투
- (InstantClient) 설치하기(HP-UX)
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 오라클 홈디렉토리 copy 후 startup 에러
- 테라폼
- 버쳐박스
- K8s
- 스토리지 클레스
- 오라클
- 커널
- CVE 취약점 점검
- 튜닝
- pod 상태
- 쿠버네티스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |