kubernetes

install kubernetes

kubernetes 는 docker 기반으로 동작하는 컨티에너 오케스트레이션( container orchestration ) 플랫폼이다.
이전포스트들에서 봐왔듯이 필자는 docker에 관심이많다. 자연스레 kubernetes에 대해 접하게되었고 요즘들어 인기가더욱 많은듯하다.
필자는 주로 docker swarm cluster로 컨테이너 관리를 해왔지만 kubernetes가 관리측면에서는 docker swarm cluster 보다는 훨씬더 나은듯 보였다. ( 익숙하다면.. )
일단 kubernetes에서가장 눈에띄는 점은 container 관리 dashboard가 존재한다는 점과 container auto scale 이가능하다는 점이다.
아직 많은 부분을 알진못하지만 학습하면서 하나둘 알아보려한다.
필자는 centos 7 2대의 vm으로 진행하였다.

yum update

1
$ sudo yum update -y

install docker and start service

1
2
$ sudo yum install -y docker
$ sudo systemctl enable docker && systemctl start docker

register repository

1
2
3
4
5
6
7
8
9
$ sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF'

diable selinux

1
$ sudo setenforce 0

install kubelet kubeadm kubectl and start service

1
2
$ sudo yum install -y kubelet kubeadm kubectl
$ sudo systemctl enable kubelet && sudo systemctl start kubelet

config iptables and apply

1
2
3
4
5
$ sudo bash -c 'cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF'
$ sudo sysctl --system

disalbe firewalld

1
2
$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld

swap off

1
$ sudo swapoff -a

kubernetes 설치가 모두 끝이났다. 뭐가이렇게 설치하고 설정할게 많은지.. 시작부터불길한예감이 ..

kubernetes cluster config

[ 참고 ] 탭 kubernetes official guide 참고

init ( master node )

이제 kubernetes 를 본격적으로 사용하기위해 kubernetes cluster를 master node에서 초기화한다.

1
2
3
$ sudo kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address 10.10.80.11
# --pod-network-cidr pod 들이 사용하는 ip 대역
# --apiserver-advertise-address master ip( node에서 master ip에 join 할것이기에 명시적으로 적어준다 )

다음과같이 설정정보가 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 --token 02bcf2.f10d2bf5defde80b 10.10.80.11:6443 --discovery-token-ca-cert-hash sha256:2a849134a0c617684e42b701afd43074bbe9a11422e8b6dd51e879a28875fd1c

제시된 설정정보를 입력한다.

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

config flannel network ( master node )

docker swarm cluster 구성시 default로 생성되는 overlay network라고 생각하면 될듯하다.
설정을 진행한다.

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

check pod status ( master node )

1
2
3
4
5
6
7
8
9
10
11
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-master 1/1 Running 0 4m
kube-system kube-apiserver-master 1/1 Running 0 4m
kube-system kube-controller-manager-master 1/1 Running 0 4m
kube-system kube-dns-6f4fd4bdf-ppmgr 3/3 Running 0 9m
kube-system kube-flannel-ds-b4v6s 1/1 Running 0 1m
kube-system kube-flannel-ds-g958w 1/1 Running 0 1m
kube-system kube-proxy-4j29q 1/1 Running 0 9m
kube-system kube-proxy-n58wv 1/1 Running 0 4m
kube-system kube-scheduler-master 1/1 Running 0 4m

kube-system kube-dns-6f4fd4bdf-ppmgr 3/3 Running 0 9m
Pending -> ContainerCreating -> Running 상태변경을 확인한다.

join cluster( worker node )

master node에서 kubernetes init 시 나온 token 정보를 worker node에 입력한다.

1
sudo kubeadm join --token 02bcf2.f10d2bf5defde80b 10.10.80.11:6443 --discovery-token-ca-cert-hash sha256:2a849134a0c617684e42b701afd43074bbe9a11422e8b6dd51e879a28875fd1c

check node status ( master node )

1
2
3
4
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 11m v1.9.4
node1 Ready <none> 5m v1.9.4

node state가 NotReady에서 Ready로 변경된것을 확인할수있다.

참고

https://kubernetes.io/docs/setup/independent/install-kubeadm/
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#24-initializing-your-master
https://blog.tekspace.io/setup-kubernetes-cluster-on-centos-7/
https://www.assistanz.com/steps-to-install-kubernetes-cluster-manually-using-centos-7/