본문 바로가기

Kubernetes

Kubernetes On premise 설치하기! 요약 정리!

728x90
반응형

"이제는 Kubernetes를 모르면 안되는 시점이 된 것 같습니다." 

어느정도 규모 있는 서비스를 개발하고 확장하여 운영하다보면 Container 활용을 자연스레 검토하게 되지요.

시스템 규모가 커져 Container의 개수가 많아지면 자연스레 효율적으로 관리하기 위한 Orchastration도구를 찾게되고

결국 Kubernetes를 만나게 될 것 입니다. 

모두가 그렇다고 말할 수는 없지만 보다 효율적인 방법을 찾다보면 결국 쿠버네티스를 만나게 되는 것 같습니다.

그렇게 저도 쿠버네티스를 만나게 되었습니다. 

물론 많은 Public Cloud사에서 쿠버네티스 서비스를 제공하고 있고 그 것을 활용하는 것이 여러모로 정신건강에 좋다곤 하지만 제가 직접! 제 손으로 설치는 해봐야 하지 않을까요? 라는 생각으로 설치해 보았습니다. 

제가 걸어본 길을 아래와 같이 남기오니 많은분들에게 도움이 되었으면 좋겠습니다. 

1. 쿠버네티스 클러스터를 직접 구성하는 도구는 크게 2가지가 있습니다. 

Kubeadm 쿠버네티스에서 공식적으로 제공하는 클러스터 생성 및 관리하는 도구 입니다.
Kubespray 1. 쿠버네티스 클러스터를 배포하는 오픈소스 프로젝트 입니다. 
2. On premise에서 상용 서비스 운영을 목적으로 클러스터 구성시 유용합니다. 
3. 다양한 CNI를 제공 합니다. 
4. 다양한 형식의 쿠버네티스 클러스터 구성이 가능합니다.
**CNI란?
 Container Network Interface로 컨테이너간의 통신을 지원하는 것입니다. 
 다양한 종류의 플러인이 존재합니다. 
 - Network-CNI, Pod Network, VxLAN Overlaym flannel, calico, weavenet

2. 저는 위 두가지 방법중 Kubeadm을 통해 구성해 보았습니다. 

- 설치에 앞서 미리 준비해야 하는 사항이 있습니다. 

> 가상 머신 3개 : 1개의 master와 2개의 worker node를 구성할 예정입니다. 

> 저는 AWS에 2개의 EC2로 구성을 해보았습니다. 

3. 각 EC2 인스턴스에 Docker를 설치해주세요

## 설치 
$sudo apt-get update
$sudo apt-get install docker-ce docker-ce-cli containerd.io
$sudo apt-cache madison docker-ce
$sudo apt-get install docker-ce=5:20.10.5~3-0~ubuntu-focal docker-ce-cli=5:20.10.5~3-
0~ubuntu-focal containerd.io

## version 확인 
$sudo docker –v
$sudo docker version

## docker 상태 확인 
$systemctl status docker

4. kubeadm으로 쿠버네티스 설치하기

* 참고 : https://kubernetes.io/docs/home/

 

Production-Grade Container Orchestration

Production-Grade Container Orchestration

kubernetes.io

 - Home > Set up a K8s cluster

 - 아래 명령어 필수 실행 (위 kubernetes.io 사이트 가이드. "Swap disabled. You MUST disable swap in order for the kubelet to work properly.")

##root 계정으로 실행해야함
$ swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab

 

Letting iptables see bridged traffic

아래 명령어 실행 

$cat <<EOF | [sudo] tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
$cat <<EOF | [sudo] tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$[sudo] sysctl --system

Disable Firewall

$systemctl stop firewalld
$systemctl disable firewalld

##또는 

$ufw disable

이제 kubeadm & kubelet & kubectl을 설치한다.

kubeadm the command to bootstrap the cluster
kubelet the component that runs on all of the machines in your cluster and does things like starting pods and containers
kubectl the command line util to talk to your cluster
## 1.apt 패키지 색인을 업데이트한다.
## 2.kubernetes apt 저장소를 사용하는데 필요한 패키지를 설치한다. 
$sudo apt-get update
$sudo apt-get install -y apt-transport-https ca-certificates curl

## 3.Google Cloud 공개 서명 키
$sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

## 4.kubernetes apt 저장소 추가 
$echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

## 5. apt 패키지 색인 업데이트 
## 6. kubelet, kubeadm, kubectl 설치
## 7. 버전 고정 
$sudo apt-get update
$sudo apt-get install -y kubelet kubeadm kubectl
$sudo apt-mark hold kubelet kubeadm kubectl

## 8. kubelet start & enable
$sudo systemctl start kubelet
$sudo systemctl enable kubelet

## 9. 설치 확인 
$ kubeadm version
$ kubelet --version
$ kubectl version

위 작업은 master / worker node에 해당하는 모든 인스턴스에 실행해야 한다. 

ControlPlane (마스터 노드)

$kubeadm init

kubeadm init을 실행하면 --token 정보와 --discovery-token-ca-cert-hash 정보가 나온다. 

이것은 백업을 해둬야 한다. 추후 worker node에서 실행을 해줌으로서 master node에 연결시 사용되게 된다. 

## kubectl 사용할 수 있도록 아래 명령어 실행 (root에서 실행해야함)
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

##정상 설정 되었는지 확인 
# kubectl get nodes

##master node가 나오는지 확인한다. 

##위에서는 root 계정에서 실행 하였으며 root에서 나와 사용자 계정에서도 아래 명령어를 실행한다. 
#exit > root에서 exit

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl get nodes

Installing a Pod network add-on

많은 CNI중에 weavenet 설치 

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

##설치 확인 
$kubectl get nodes
##master node의 STATUS가 Ready로 변경되었는지 확인 > 이전에는 Not Ready

WorkerNode 세팅 

## 1. worker node에서도 앞서 master node에서 설정 했듯이 
## 일반 사용자가 kubectl 명령을 사용할 수 있도록 허용한다. 
$mkdir -p ~일반사용자/.kube
$scp master:/etc/kubernetes/admin.conf ~일반사용자/.kube/config
$chown 일반사용자:일반사용자 ~일반사용자/.kube/confi

## 2. 앞서 --token 정보와 --discovery-token-ca-cert-hash 정보를 백업한 내용을 worker node에 
## 입력 한다.

## 3. worker node에 모두 설치 후 master로 돌아와 다시 node 정보 확인 
$kubectl get nodes

## 4. master node뿐만 아니라 worker node도 함께 조회 되는 것 확인 

## 5. node 상세 정보 조회 
$kubectl get nodes -o wide

## 6. 모든 namespace에 pod 확인 
$kubectl get pod --all-namespaces

kubectl 자동완성 

##bash-completion 패키지를 먼저 설치하고 bash의 자동 완성을 현재 shell에 설정
$ source <(kubeadm completion bash)
##자동 완성을 bash 셸에 영구적으로 추가
$ echo "source <(kubeadm completion bash)" >> ~/.bashrc

 

이제 간소한 kubernetes의 cluster 구성이 끝이 났다.

앞으로 갈길이 멀다.

정말 공부할 것이 많아 행복하다.

 

728x90
반응형