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