Kubernetes 설치 2#

2020. 10. 10. 23:07DevOps/Kubernetes

https://cloudaffaire.com/how-to-install-kubernetes-cluster-in-linux/

(필자가 공부한 내용을 토대로 작성되었기에 피드백, 오타등 제보바람)

 

쿠버네티스를 사용하기 위해 가장 먼저해야 할 것은 설치다. 그러나 도커 엔진과 달리 쿠버네티스는 사용 환경과 목적에 따라 설치하는 방법이 매우 다양하고 복잡하다. ( GCP의 GKE는 우주제일 간단하다.... 자기들이 만든거라 그런지 )

 

kubernetes.io에서 제시하는 설치방법 다섯가지가 있다. 

  • kubeadm
  • kops
  • kubespray
  • Minikube
  • Docker for Mac/Window 내장 kubernetes

필자의 경우 kubeadm, minikube, Mac/Window kube 설치만 해보았다. 사실 학습용으로는 kubeadm을 설치할 것을 추천하는 바이다. minikube 와 Docker for mac/Window의 경우 클러스터 굴리수 없다. 즉 기능이 제한적이다. 그리고 kops와 kubespray는 실무 운영 단계의 쿠버네티스 클러스터 구축용이다. 보통 AWS, GKE, Azure, Baremetal 등 클라우드 환경에서 수십개의 서버에서 동시다발적으로 쿠버네티스를 설치해야 되기 때문에 개인 학습용으로 비추이다. 난이도를 떠나서 비용이 어마어마할것이다. 

나름 비교하자면 

github.com/kubernetes-sigs/kubespray/blob/master/docs/comparisons.md

여기에서 7명의 외쿡인이 기여해주어서 퍼왔다,,, 

Kubespray vs Kops

Kubespray는 프로비저닝 및 오케스트레이션을위한 기판으로 Ansible을 사용하여 베어 메탈 및 대부분의 클라우드에서 실행됩니다. Kops는 프로비저닝 및 오케스트레이션 자체를 수행하므로 배포 플랫폼에서 유연성이 떨어집니다. Ansible, 기존 Ansible 배포에 익숙하거나 여러 플랫폼에서 Kubernetes 클러스터를 실행하려는 사람들에게 Kubespray는 좋은 선택입니다. 그러나 Kops는 지원하는 클라우드의 고유 한 기능과 더 긴밀하게 통합되므로 가까운 미래에 하나의 플랫폼 만 사용할 것이라는 것을 알고 있다면 더 나은 선택이 될 수 있습니다.

Kubespray vs Kubeadm

Kubeadm은 자체 호스팅 레이아웃, 동적 검색 서비스 등을 포함하여 Kubernetes 클러스터의 수명주기 관리에 대한 도메인 지식을 제공합니다. 새로운 운영자 세계에 속했다면 "Kubernetes 클러스터 운영자"로 명명되었을 수 있습니다. 그러나 Kubespray는 "OS 운영자"ansible 세계의 일반적인 구성 관리 작업과 일부 초기 K8 클러스터링 (네트워킹 플러그인 포함) 및 컨트롤 플레인 부트 스트랩을 수행합니다.

Kubespray는 kubeadmv2.3부터 클러스터 생성을 지원합니다 (v2.8부터는 더 이상 사용되지 않는 비 kubeadm 배포).이를 통해 라이프 사이클 관리 도메인 지식을 소비하고 일반 OS 구성을 오프로드 할 수 있습니다.

 

구글 번역기로 돌렸으니 해석이 이상할 수도있다. 위 링크를 통해 각자 해보길 바란다. 

 

어쨋든 간에 이 글에서는 ubuntu 18.04 환경에서 kubeadm 설치를 해 볼 것이다. 

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

설치하기 전에 kubernetes.io에서 조건을 내세웠다. 

  • 다음 중 하나를 실행하는 하나 이상의 머신 :
    • Ubuntu 16.04 이상
    • Debian 9 이상
    • CentOS 7
    • RHEL (Red Hat Enterprise Linux) 7
    • Fedora 25 이상
    • HypriotOS v1.0.1 이상
    • Flatcar Container Linux (2512.3.0으로 테스트 됨)
  • 컴퓨터 당 2GB 이상의 RAM (그보다 적으면 앱을위한 공간이 거의 남지 않음)
  • CPU 2 개 이상
  • 클러스터의 모든 시스템 간의 전체 네트워크 연결 (공용 또는 사설 네트워크는 괜찮음)
  • 모든 노드에 대한 고유 한 호스트 이름, MAC 주소 및 product_uuid. 자세한 내용은 여기 를 참조하십시오.
  • 컴퓨터에서 특정 포트가 열려 있습니다. 자세한 내용은 여기 를 참조하십시오.
  • 스왑이 비활성화되었습니다. 당신은 반드시 제대로 작동하려면 kubelet 위해서는 스왑을 사용하지 않도록 설정합니다.

이 중에서 버전 사양 체크는 물론이지만 마지막 멘트를 꼭 주의하길 바란다. 사양에서는 사실상 컴퓨터 세대이상(3대이상이여야 학습이 원할함)이거나 가상머신 3개를 돌려야되므로 한대에 상당히 고스팩을 가진 컴퓨터로 해야될 것이다.  쿠버네티스 마스터노드 은근 무겁다. 그리고 워커노드 스케일 키우다보면 상당히 무거워질것이다. 그래서 필자의 경우 마스터 노드는 3cpu/4Ram을 설정하고 워커노드는 2/3으로 설정한다.(그렇다 옥타코어에 16램이상이 kubernetes학습용으로 괜찮은 컴퓨터이다. 예외 제온6코어이면 쌉가능 둘다 아닐 경우 그냥 GKE로 실습하길 바란다.) 스왑이 활성화되면 절대 실행과 설치가 안된다는 것에 유의하길 바라며 시작하겠다.  

 

1. Docker Install 

그렇다 쿠버네티스는 도커 기반으로 운영되는 툴이기 때문에  도커 엔진은 무조건 어떤상황에서든 설치해야만 한다. 

도커에서도 설치가 여러가지 있지만 여기서는 두가지만 소개 하겠다. 

 

   - ubuntu에서 제공하는 docker 

sudo apt update

sudo apt install docker.io -y 

 

   - docker 공식 홈페이지에서 제공하는 docker 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update

sudo apt install docker-ce -y

 

2. kubeadm Install

 

다음 내용을 install.sh 파일을 작성하고 chmod로 권한 준 뒤 실행 

 

 - 신뢰할 수 있는 APT키 추가

sudo apt-get update && sudo apt-get install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

 

 - 아래 명령어로 Repository 추가하고 kubernetes 설치

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

 

쓰고 저장해준 뒤

 

bash install.sh 

// sh 설치

(그후 kube 적은뒤 탭으로 kubeadm, kubectl, kubelet 뜨는걸 볼수있다.) 

그리고 위에서 언급했듯이 

  - 스왑 에러 방지를 위해 스왑기능 제거를 하자. (참고로 노드마다 다 설치한 후 스왑도 노드마다 해제해야됨)  

 

sudo swapoff -a ( 안될시에 which swapoff  찾고 제거하자 ) // 현재 커널에서 스왑 기능 끄기 

sudo sed -i '/swap/s/^/#/'/etc/fstab // 리봇 후에도 스왑 기능 유지

 

왜 비활성화를 해야될까? 

  •  1.8v 이후 노드에서 스왑을 비활성화 해야된다고 공시
  • 인스턴스를 최대한 100%에 가깝게 성능을 발휘한 것
  • 모든 배포는 CPU/메모리 제한을 고정하는 것이 필요 
  • 스왑 발생시 속도 느려진느 이슈 등등  

 그래서 하자 어차피 kubeadm 실행시 에러뜨게끔 막아놨다 

   - Master 노드 초기화 ( 참고로 kubeadm은 root 상태에서 하자 그리고 kubeadm은 마스터노드용이다. 워커노드 ㄴㄴ) 

 

sudo kubeadm init 

 

하면 

 

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

세가지의 메세지가 나오는데 복붙하여 기입하면 된다. (마스터노드용)

 

또한 마지막 워커노드용 세가지 명령어가 나온다. 

kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash> 

요런 형태로 나오는데 각각 워커노드에 기입하여 클러스터 참여해주도록 하자 (워커노드용) 

 

마지막으로 마스터노드에  Pod Network를 추가해주어야되는데 종류가 좀 있다. 

대표적으로 켈리코 위브넷 실리움 등 있지만 필자의 경우 위브넷으로 하겟다 보통 켈리코나 위브넷 두가지 많이 하는 편이라 들었다. 이편에서 참고 1.18부터 kubernetes.io 참고할때 pod network 나오지 않으므로 1.17v 바꾸고 참고하길 바란다. 

 

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')

 

설치해주면 

kubectl get node ( root에서 하면 안됨 ) 

확인해주면 노드들이 준비상태가 될것을 확인할수가 있다.

 

이제 설치는 다되었으니 본격적으로 학습을 시작하겠다. 

 

 

 

(출처: kubernetes.io, aws.amazon.com, cloud.google.com, boanproject.com)

(참고문헌: 시작하세요 도커/쿠버네티스, Hands On MICROSERVICES(with KUBERNETES))

'DevOps > Kubernetes' 카테고리의 다른 글

Kubernetes Roadmap 3#  (0) 2020.10.15
Kubernetes의 이해 1#  (0) 2020.10.10