Ubuntu 18.04 에서 Kubernetes 설치하기

By | 2020년 4월 17일
Table of Contents

Ubuntu 18.04 에서 Kubernetes 설치하기

참조1
참조2

우분투 서버에 Kubernetes 클러스터를 구성합니다. 클러스터는 1개의 마스터 노드와 1개의 워커 노드로 구성합니다.

실제 운영을 위한 Kubernetes 는 AWS 또는 GCP 에서 구축해 놓은 서비스를 이용하는 것이 바람직합니다. 아래의 내용은 Kubernetes 를 실제로 구축해 보면서 어떻게 작동하는지를 확인하기 위한 용도로만 이용하시기 바랍니다.

마스터 노드의 최소 스펙은 아래와 같습니다.

CPU : 2 core
RAM : 3 GB

워커 노드의 최소 스펙은 아래와 같습니다.

CPU : 2 core
RAM : 2 GB

사전준비

아래의 내용들이 준비되어 있어야 합니다.

체크 리스트

  • CPU 2개 이상

    각 노드는 2개 이상의 CPU (코어) 가 있어야 합니다.

  • 스왑 메모리 비활성화

    Kubernetes 는 Swap Memory 를 고려하지 않고 개발되었습니다. Swap Memory 가 활성화되어 있으면 여러 문제가 발생할 수 있습니다.

  • 각 노드간 원활한 네트워크

    방화벽 등 각 노드간의 네트워크를 방해하는것을 제거하는 것이 좋습니다.

  • Docker 설치

    도커는 최신 버전이 아니라, Kubernetes 에서 권장하는 버전을 설치합니다.

컨테이너 런타임 설치

컨테이너 런타임(사실상 Docker) 를 설치합니다.

참조

sudo apt update
sudo apt-get update

# Docker CE 설치
## 리포지터리 설정
### apt가 HTTPS 리포지터리를 사용할 수 있도록 해주는 패키지 설치
sudo apt-get install -y \
  apt-transport-https ca-certificates curl software-properties-common gnupg2

### Docker의 공식 GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

### Docker apt 리포지터리 추가.
sudo add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

## Docker CE 설치.
sudo apt-get update && sudo apt-get install -y \
  containerd.io=1.2.13-1 \
  docker-ce=5:19.03.8~3-0~ubuntu-$(lsb_release -cs) \
  docker-ce-cli=5:19.03.8~3-0~ubuntu-$(lsb_release -cs)

# 데몬 설정.
sudo su -
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
exit

sudo mkdir -p /etc/systemd/system/docker.service.d

# Docker 재시작.
sudo systemctl daemon-reload
sudo systemctl restart docker

마스터 노드, 워커 노드 공통사항

sudo apt-get update
sudo apt-get upgrade

kubeadm, kubelet, kubectl 을 설치합니다.

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

kubeadm version
kubelet --version
kubectl version

마스터 노드

kubeadm init

ifconfig

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=<EC2 인스턴스 내부아이피>

1 ~ 5 분의 시간이 소요됩니다.

kubectlroot 계정없이 실행하려면 아래 명령을 실행합니다.

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

부연 설명을 하면, admin.conf 이 인증서 파일이고 이 인증서로 kubernetes 에 권한을 부여받아 실행이 가능하게 됩니다.

kubeadm help

kubeadm reset 은 꼭 알아놓도록 합시다.

네트워크 애드온 설치

네트워크 애드온에는 여러가지가 있지만, 여기서는 Flannel 을 설치합니다.

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

설치상태 확인

kubectl get nodes
kubectl get pod --namespace=kube-system -o wide

워커 노드

인증키 확인 및 관리

마스터 노드 접근을 위해서는 토큰이 필요합니다.

kubeadm init 실행시 토큰이 자동으로 발급되어 있습니다.

토큰은 아래 명령으로 확인 가능합니다.

kubeadm token list

디스커버리 토큰은 아래 명령으로 확인 가능합니다.

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

토큰은 24시간의 유효기간 후 만료됩니다. 아래 명령을 이용해 토큰을 추가로 생성할 수 있습니다.

kubeadm token create

보안그룹 설정

AWS 또는 클라우드 제공업체를 이용하는 경우 보안그룹을 설정해 주어야 합니다.

아래는 AWS 를 이용하는 경우의 보안그룹 설정입니다.

allow-kubernetes 라는 이름의 보안그룹을 생성합니다.

다음은 protect-kubernetes 라는 이름의 보안그룹을 생성하고, 모든 inbound tcp 트래픽의 소스가 allow-kubernetes 인 경우 허용하도록 설정합니다.

allow-kubernetes, protect-kubernetes 를 모든 노드에 할당해 줍니다.

워커 노드 생성

위에 마스터 노드에서 했던 명령중 kubeadm init 이전까지의 명령을 동일하게 진행합니다.

sudo kubeadm join <마스터노드 프라이빗 아이피>:6443 \
  --token <토큰> \
  --discovery-token-ca-cert-hash sha256:<디스커버리 토큰>

마스터 노드에서 아래명령을 실행하여 노드가 접속된것을 확인할 수 있습니다.

kubectl get nodes

Hello, World! 배포하기

구글이 만들어 놓은 Hello, World! 이미지를 이용해 배포를 합니다.

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

아래 명령으로 배포되었는지 확인할 수 있습니다.

kubectl get deployments

포드가 할당되었는지 아래 명령으로 확인할 수 있습니다. 할당받은 아이피를 확인하시기 바랍니다. 10.244.X.X 형태로 할당됩니다.

kubectl get pods -o wide

워커 노드에서 아래 명령을 실행하면 배포가 정상적으로 된것을 확인할 수 있습니다.

curl http://<할당받은 아이피>:8080

답글 남기기