Kubernetes 설치하고 구성하기

반응형

Kubernetes 설치하고 구성하기

안녕하세요 김민욱입니다.

 

이번 포스팅에서는 Kubernetes의 설치에 대해 설명드리겠습니다. Kubernetes의 구조 및 개념에 대해서는 공식 문서[1] 및 다른 블로그에서도 충분히 쉽고 자세히 설명 되어 있기 때문에 이번 포스팅에서는 메모장 처럼 필요하실 때마다 간편하게 Kubernetes를 설치하고 구성하실 수 있도록 작성하였습니다.

 

간단하게 Kubernetes는 가상머신에서 컨테이너로 넘어가는 인프라 시대의 아주 중요한 프로젝트입니다. 대다수의 기업이 참여하고 있으며, 컨테이너를 사용하는 기업 대부분은 Kubernetes를 사용하고 구성하고 있습니다. 한마디로 Kubernetes는 컨테이너 오케스트레이터로 오토 스케일링, 오토 리커버리 등의 기능을 기본적으로 지원하기도 합니다. 

 

설치과정 

본 설치는 우분투 16.04에서 진행되었습니다. 먼저 패키지 다운로드 속도를 높이기 위해 저장소를 아래의 명령어를 통해 변경해줍니다.  

 

* 모든 노드 공통 과정

root@k8s-master:~# sed -i 's/kr.archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
root@k8s-master:~# sed -i 's/security.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list

 그 다음 패키지 리스트를 업데이트하고, 패키지를 업데이트해줍니다. 

root@k8s-master:~# apt-get update && apt-get dist-upgrade

docker.io와 apt-transport-https(HTPPS를 통한 저장소 접근) 패키지를 설치해줍니다. 

root@k8s-master:~# apt-get update && apt-get install -y docker.io 
root@k8s-master:~# apt-get update && apt-get install -y apt-transport-https

 Docker의 공식 GPG 키를 추가해줍니다.

root@k8s-master:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

결론적으로 실질적인 컨테이너 라이프 사이클은 Docker가 담당하고 Kubernetes는 Docker와 연동하여 컨테이너 관리를 수월하게 해줄 수 있습니다. 따라서 위에서 언급한 명령어는 Docker를 우선 구축한 뒤 Kubernetes의 구축으로 이어집니다. 

 

apt-get을 위한 저장소를 추가 합니다.

root@k8s-master:~# cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

다음은 kubectl(명령어 입력), kubelet(노드 에이전트), kubeadm(클러스터구성) 컴포넌트들을 설치합니다. 

root@k8s-master:~# apt-get update
root@k8s-master:~# apt-get install kubelet kubeadm kubectl

* 모든 노드 공통 과정 끝

 

이후 과정에서는 마스터 노드와 각 미니언 노드에서의 진행이 다르기 때문에 이점 꼭 확인하시기 바랍니다.

 

* 마스터 노드에서 진행

 

아래의 명령어를 수행해 줍니다. 시간이 조금 걸릴 수 있기 때문에 완료 될때까지 기다려주셔야합니다.

root@k8s-master:~# kubeadm init --pod-network-cidr=10.244.0.0/16


#### [ERROR Swap]: running with swap on is not supported. Please disable swap 에러 발생 시 #####
root@k8s-master:~# swapoff -a && sed -i '/swap/d' /etc/fstab

그림 1. kubeadm 결과 수행

그림 1과 같이 위에 명령을 수행하면 "kubeadm join <masternode IP:port> --token <token value>

--discovery-token-ca-cert-hash sha256:<hash>" 이나오게 됩니다 해당 라인을 모두 복사해서 각 미니언 노드에서 실행해주시면 됩니다. 

 

* 마스터 노드에서 진행 끝

 

* 각 미니언 노드에서 진행

 

마스터 노드에서 확인한 아래의 명령을 각 미니언 노드에서 수행합니다. 

kubeadm join 192.168.0.119:6443 --token d9ed0u.k8iohc10inlm6qbn \
    --discovery-token-ca-cert-hash sha256:3da8459a87861eb5ce0879464b8c3b48518842a27842cc8cf9fc79f7381a2cb1

* 각 미니언 노드에서 진행 끝

 

* 마스터 노드에서 진행

 

kubectl 명령을 이용하여 아래의 명령을 마스터 노드에서 진행하도록 합니다. 

root@k8s-master:~# sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


###### Connection Refused 에러 혹은 error: Missing or incomplete configuration 발생시######
root@k8s-master:~# mkdir -p $HOME/.kube
root@k8s-master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

아래의 명령을 수행하고 kubectl get nodes를 통해 각 노드의 리스트가 그림 2와 같이 나오는지 확인한 뒤 재시작하면 kubernetes의 설치는 모두 마치게 됩니다. 모두 Ready 상태여야 합니다. 

root@k8s-master:~# export KUBECONFIG=/etc/kubernetes/admin.conf
root@k8s-master:~# kubectl get nodes
root@k8s-master:~# systemctl restart kubelet

 

그림 2. 최종 구성 화면

 

결론

이번 포스팅에서는 아주 간단하게 Kubernetes를 설치하는 방법에 대해 소개해드렸습니다.  이미 많은 분들께서 Kuberntes에 대해 잘알고 계실 것 같아서 따로 자세한 설명보다는 메모장 처럼 편하게 사용하셨으면 하는 마음에 설치과정을 정리하였습니다. 

 

많은 도움 되시길 바랍니다.

 

감사합니다.

 

인용글

[1] kubernetes docs : https://kubernetes.io/docs/concepts/

업데이트로그

------------------------------------------------------------------------------------------------------------------------------

해당 글은 스스로 연구한 내용을 통한 주관적인 이해를 바탕으로 작성 되었습니다. 수정 할 부분이 있거나, 다른 의견이 있으시다면 언제든지 말씀해주시면 반영하도록 하겠습니다. 읽어 주셔서 감사합니다. 끝으로 불법으로 복제하는 것은 금합니다.

 

반응형

댓글

Designed by JB FACTORY