환경

GCP(Google Cloud Platform) Ubuntu 16.04 LTS

master 1대 worker 2대

CPU 2core MEM 7.4GB

master 10.128.0.14 work1 10.128.0.15 work2 10.128.0.16

VM 생성

kubeadm001

master vm 생성

도커 설치

이전 버전 삭제

$ sudo apt-get remove docker docker-engine docker.io containerd runc

레파지토리 셋업용 사전 작업

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

도커 공식 GPG 키 등록

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

핑거프린트 등록

$ sudo apt-key fingerprint 0EBFCD88

레파지토리 셋업

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

도커 엔진 설치

 $ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io

참고: https://docs.docker.com/engine/install/ubuntu/

kubeadm 설치

마스터용 VM에 kubeadm 설치

sudo apt-get update && 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

참고: Installing kubeadm, kubelet, kubectl

설치 완료 후 vm 종료

VM 이미지 생성

지금까지 마스터 용 VM에 도커 및 kubeadm 설치 함 master VM 이미지를 생성및 활용하여 master 노드와 같은 설정을 가진 2대의 worker 노드 생성

master VM 이미지 생성

kubeadm002

kubeadm003

이미지를 활용하여 worker VM 생성

kubeadm004

master 노드 key 생성 및 메타데이터 등록

summit@master:~$ sudo su
root@master:/home/summit# ssh-keygen -t rsa -b 4096

kubeadm005

마스터 노드에서 worker 노드용 vm hostname 호출이 되면 등록 성공

root@master:/home/summit# ssh work1 hostname
The authenticity of host 'work1 (10.142.0.3)' can't be established.
ECDSA key fingerprint is SHA256:XXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'work1,10.142.0.3' (ECDSA) to the list of known hosts.
work1
root@master:/home/summit# ssh work2 hostname
The authenticity of host 'work2 (10.142.0.4)' can't be established.
ECDSA key fingerprint is SHA256:XXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'work2,10.142.0.4' (ECDSA) to the list of known hosts.
work2

kubeadm init

마스터 노드에서 다음 명령어 실행

$ kubeadm init

<중략>
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane 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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.142.0.2:6443 --token s4wlwq.3o1fnvkfazoojpwg \
    --discovery-token-ca-cert-hash sha256:0f2cb0..... 

master 노드 client 설정

마스터 노드에서 root 계정을 사용자 계정으로 변경 후 아래 명령어 수행

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

이를 통해 마스터 노드에서 kubectl 명령어 수행 가능

summit@master:~$ kubectl get node
NAME     STATUS     ROLES    AGE     VERSION
master   NotReady   master   6m41s   v1.18.8

위에 kubectl 명령어 수행 시 마스터 노드에 대한 정보 표시 확인 아직 표시되지 않는 work1, work2 노드 추가 필요

worker node 추가하기

아래 join 스크립트를 work1, work2 VM에서 root 계정으로 수행

kubeadm join 10.142.0.2:6443 --token s4wlwq.3o1fnvkfazoojpwg \
    --discovery-token-ca-cert-hash sha256:0f2cb0bfba.... 

각각 VM에서 수행 후 다시 마스터 노드에서 kubectl 명령어로 확인

summit@master:~$ kubectl get node
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   10m   v1.18.8
work1    NotReady   <none>   61s   v1.18.8
work2    NotReady   <none>   56s   v1.18.8

Network Plugin 설치

마스터 노드 및 worker 노드 생성까지 완료 되었으나 Status가 아직 NotReady 상태임 이를 해결하기 위해서는 CNI 용 네트워크 플러그인 설치가 필요함

참고:Network add-on

네트워크 플러그인의 종류는 많으나 이번에는 Weave Net으로 선정하여 설치함

Weave Net 설치

마스터 노드에서 아래 kubectl 명령어 통해 설치

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

노드 상태 확인

summit@master:~$ kubectl get nodeNAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   15m     v1.18.8
work1    Ready    <none>   5m50s   v1.18.8
work2    Ready    <none>   5m45s   v1.18.8

Service NodePort 호출 테스트

kubespray를 통해 클러스터링 구성시에는 CNI 설정 문제로 서비스에서 다른 노드에 있는 파드호출을 하지 못하는 문제 있었음. kubeadm으로 설치시에는 문제 발생 여부 확인하고자 deployment 및 nodeport 유형 service 생성하여 호출 테스트 수행.

아래 deployment, pods 및 service 생성 확인

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/whms-deployment-5d545b8597   3         3         3       114m

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/whms-deployment   3/3     3            3           114m

NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP        139m
service/whms-nodeport   NodePort    10.98.49.123   <none>        80:30080/TCP   113m

NAME                                   READY   STATUS    RESTARTS   AGE
pod/whms-deployment-5d545b8597-b8555   1/1     Running   1          114m
pod/whms-deployment-5d545b8597-bcqmj   1/1     Running   1          114m
pod/whms-deployment-5d545b8597-cnmps   1/1     Running   1          114m

jmeter로 서비스 컨트롤러 호출 결과 서로 다른 노드에 생성된 파드 호출 시 정상 동작 확인

kubeadm006

댓글남기기