본문 바로가기
Tech/Containers

[K8S][GCP] Kubernets 설치(kubeadm) 및 테스트 배포하기

by 타이호 2018. 3. 26.
반응형

GCP내에서 GKE라는 Kubernetes 서비스를 제공하고 있지만 사용자는 worker node만 access가 가능하고 서비스를 배포하는 목적으로만 사용할 수 있기 때문에 GCP내에 VM을 만들어 Kubernetes를 배포해 본다.

Kubernetes 설치는 다양한 방법(helm, ansible, kubeadm 등)이 있지만 아래는 손쉽게 kubeadm을 통해 구성해본다.

A. 환경 구성

1. GCP안에 1 vcpu, 4G Ram, 20G Disk로 VM을 2대 생성한다.

2. CentOS 7으로 설치를 하고 PC에서 바로 접속 할 수 있도록 ssh-key를 넣어두고 생성한다.

3. 설치는 아래 kubernetes 가이드 처럼 수행한다.

https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/


B. Setup

1. Master 노드 설정

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

==> 위 명령어를 수행 후 나오는 token과 key를 이용해서 work node에서 master로 join할 수 있으니 기록해둔다


2. CLI를 사용하기 위해서 필요한 설정

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


3. Network 설정

https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network

가장 많은 예로 쓰는 flannel을 적용해본다

sysctl net.bridge.bridge-nf-call-iptables=1

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


C. Operation

1. Work node에서 master에서 init 시 생성된 토큰과 키를 이용하여 Join한다

kubeadm join --token bf0301.d9c6e13c31318b61 10.140.0.2:6443 --discovery-token-ca-cert-hash sha256:7bbe0123900d7104c1cab61ffbef49addeeec068daf4b2ff3ee39814b943019b


설치하고 난 뒤 master에서 아래 명령을 수행하면 결과를 볼 수 있다

[root@kube-master ~]# kubectl get nodes

NAME          STATUS     ROLES     AGE       VERSION

kube-master   Ready      master    22m       v1.8.5

kube-work1    NotReady   <none>    8s        v1.8.5


[root@kube-master ~]# kubectl get pods --all-namespaces

NAMESPACE     NAME                                  READY     STATUS    RESTARTS   AGE

kube-system   etcd-kube-master                      1/1       Running   0          2m

kube-system   kube-apiserver-kube-master            1/1       Running   0          2m

kube-system   kube-controller-manager-kube-master   1/1       Running   0          2m

kube-system   kube-dns-545bc4bfd4-lz56k             3/3       Running   0          25m

kube-system   kube-flannel-ds-gfzft                 1/1       Running   1          2m

kube-system   kube-flannel-ds-hphtj                 1/1       Running   0          4m

kube-system   kube-proxy-l97fp                      1/1       Running   0          2m

kube-system   kube-proxy-w5fq6                      1/1       Running   0          25m

kube-system   kube-scheduler-kube-master            1/1       Running   0          2m


D. Deploy Sample Application for test


kubectl create namespace sock-shop
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"


kubectl -n sock-shop get svc front-end
[root@kube-master ~]# kubectl get svc -n sock-shop front-end
NAME        TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
front-end   NodePort   10.108.20.151   <none>        80:30001/TCP   52s


kubectl delete namespace sock-shop


반응형