"이제는 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/
- 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 구성이 끝이 났다.
앞으로 갈길이 멀다.
정말 공부할 것이 많아 행복하다.
'Kubernetes' 카테고리의 다른 글
서비스 메쉬(Service Mesh): 마이크로서비스의 숨겨진 히어로 (0) | 2024.08.23 |
---|---|
[AutoScaling] Kubernetes AutoScaling에 대해 알아보기! (0) | 2024.07.10 |
[Kubernetes] Karpenter 개념 알아보기! (0) | 2024.05.17 |
Docker Proxy란 무엇인가? (0) | 2024.05.15 |
[Logging] Fluentd-bit과 Fluentd 비교 (0) | 2023.12.11 |