본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[쿠버네티스 #0] Ubuntu 환경에서 쿠버네티스(Kubernetes) 환경구성하기

728x90

쿠버네티스를 사용하기 위한 기본 설치 및 Cluster구성에 관한 글입니다.

 

환경 구성 설치 글을 많이 있었지만 그 중 제가 직접해보고 되는 것들을 조합하여 새롭게 작성해봤습니다.

 

쿠버네티스 클러스터를 구성하는 방법에는 다음과 같은 방법이 있습니다.

 

1. 마스터 노드와 워커 노드를 실제 컴퓨터로 구성

2. 마스터 노드와 워커 노드를 VM으로 구성 

3. 구글클라우드플랫폼(GCP) 같은 클라우드 환경 이용

 

둘 다 구성하는 법은 똑같지만 실제 컴퓨터로 구성하게 될 경우 같은 네트워크를 공유하고 있어야 하고, VM의 경우 버츄얼 박스나 VM ware에서 네트워크 설정이 필요합니다. 

 

이번에 제가 소개해드릴 방법은 같은 네트워크를 공유하고 있는 2대의 컴퓨터로 쿠버네티스 클러스터를 구성하는 방법입니다. (GCP같은 클라우드 환경을 이용하지 않고 직접 설치하여 운영하는 방식을 On-premise 온프레미스 방식이라고 합니다.)

 

본 블로그에서는 Kubeadm(쿠버네티스 설치 도구라고 생각하면 됨)을 사용하여 환경구축을 합니다.

설치 환경은 Ubuntu 18.04입니다.

 

 

마스터 노드와 워커 노드로 사용할 컴퓨터에 쿠버네티스와 도커를 설치합니다. 

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

2020. 2. 21 글 추가

 

docker만 설치하고 싶다면 도커는 자동설치 스크립트를 이요하거나 패기지를 이용하는 방법이있습니다.

 

docker를 쉽게 설치하기 위한 자동설치 스크립트 명령어를 첨부합니다.

 

curl -s https://get.docker.com | sudo sh

(또는)

 

sudo wget -q0- https://get.docker.com | sh

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

sudo su

# google k8s 패키지 소스 등록
apt update && apt upgrade -y
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

 

cat < /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

 

apt-get update
apt install linux-image-extra-virtual ca-certificates curl software-properties-common -y

 

# 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"

 

apt update
apt install docker-ce kubelet kubeadm kubectl kubernetes-cni -y

 

# https://medium.com/@dirty49374/kubeadm%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-kubernetes-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-ubuntu-18-04-61710f0b4db8

블로그 중 일부를 참고했습니다. 감사합니다.

 

 

 

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

2020. 6. 12 글 추가

최근에 aws ec2환경에 다시 설치하려다 보니 k8s 패키지가 등록이 안되는지 kubelet kubeadm 등이 apt로 설치가 되지 않는 경우가 있네요 찾아보니 아래 처럼해주면됩니다.

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

echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

 

 

 

 

마스터 노드와 워커 노드 둘 다 swap 제거를 해줍니다. 

스왑을 제거하는 이유는 스왑은 메모리가 부족하거나 절전모드상태에서 디스크의 일부 공간을 메모리처럼 사용하는 기능인데 쿠버네티스에서 스왑기능을 관리해야하기 때문에 기존시스템의 스왑기능을 꺼줍니다.

스왑을 꺼주지 않을 시 에러가 날 수 있습니다.

 

swapoff -a

 

vi /etc/fstab 

으로 들어가서 swap에 해당하는 부분을 # 주석처리 해줍니다.

 

스왑 제거

 

 

 

네트워크 설정을 변경해 줍니다.

 

다음 부터의 글은 

출처: https://crystalcube.co.kr/198?category=834418 [유리상자 속 이야기] 

해당 블로그를 참고하였습니다.

 

echo 1 > /proc/sys/net/ipv4/ip_forward

 

시스템 설정

cat <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

 

 

 

 

마스터 노드에 컨트롤 구성요소를 설치합니다.

kubeadm config images pull

 

마스터 노드에서 kubeadm을 초기화합니다.

kubeadm init --pod-network-cidr=10.244.0.0/16

 

 

설치가 진행되고 로그가 출력되는데 

 

 

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join (IP주소):6443 --token (토큰 값) --discovery-token-ca-cert-hash sha256:(토큰 해쉬변환 값)

 

빨간색으로 표시해 놓은 부분을 주목하면되는데 (맨 밑에 join은 따로 복붙해 둘 것)

 

설치가 끝나고 쿠버네티스의 admin 설정을 현재 사용자의 홈에 저장합니다.

일반사용자를 위해서는 root에서 빠져나온 후에 실행하고 

 

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

 

root에서 실행할 거라면  환경변수에 등록합니다.

 

* 전 둘 다 했습니다.

export KUBECONFIG=/etc/kubernetes/admin.conf

 

그리고 이제 가장 중요한 pod network를 설치해야합니다.

이게 제대로 설치가 안되면 CoreDNS오류로 마스터와 노드사이에 not ready라는 문구를 계속 확인해야 할 겁니다.

 

 

이 블로그에서는 여러 종류 중 Flannel을 설치합니다.

 

https://github.com/coreos/flannel

위 깃허브는 flannel 공식 깃허브입니다. 밑에 글을 내리다 보면 최신 flannel 설치 명령어가 있습니다.

 

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 

2019-12-02 기준 

 

 

이제 설정이 끝났습니다. 잘 설치가 됐는지 확인하려면 우선

 

kubectl 명령어로 확인해 줍니다.

 

 

kubectl get nodes (노드 확인)

 

kubectl get all -n kube-system  (kube-system 네임스페이스에 있는 모든 오브젝트 확인)

 

마스터 노드가 ready상태이고

 

kube-system에 있는 pod의 상태가 Running상태라면 제대로 설치가 완료된 겁니다.

 

 

 

이제 워커 노드를 마스터 노드에 Join하기만 하면 환경 구성은 끝입니다.

 

워커 노드도 마찬가지로 위에 마스터 노드 설치할때 설치했던 쿠버네티스와 도커를 설치합니다. 스왑도 끄고

 

그리고 그냥 마스터 노드에서 로그로 나온 join 명령어를 복붙해주기만 하면 됩니다.

 

  kubeadm join (IP주소):6443 --token (토큰 값) --discovery-token-ca-cert-hash sha256:(토큰 해쉬변환 값)

요거

 

 

자 이제 설치가 끝나면 마스터 노드로 가서 확인해보면 됩니다. kubectl get nodes로

만일 나중에 추가적으로 워커 노드를 추가할 일이 생긴다면 구글에 검색해보면 되겠지만

토큰을 다시 발급받아야합니다. 이 토큰은 24시간만 유지되기때문입니다.

 

발급받은 토큰을 hash값 변경하고 조합해서 join명령어를 만든다음에 입력하면됩니다.

 

고생하셨습니다.

 

쓰다보니 귀찮아져서 뒤에 부분은 좀 대충썼는데

 

위와 같이 한다면 일단 실행 될겁니다. 제가 직접해봤어요

 

참고한 블로그는 다음과 같습니다.

 

 

 

이 세 블로그를 참고했습니다. 

 

https://crystalcube.co.kr/198?category=834418

 

https://medium.com/@dirty49374/kubeadm%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-kubernetes-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-ubuntu-18-04-61710f0b4db8

 

https://futurecreator.github.io/2019/02/25/kubernetes-cluster-on-google-compute-engine-for-developers/

 

그럼 고생하십쇼

반응형