[KUBERNETES] install For CentOS


1. Docker, kubelet, kubeadm 설치(For CentOS7)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/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

$ setenforce 0
$ systemctl disable firewalld && systemctl stop firewalld
$ yum install -y docker
$ yum install -y kubelet kubeadm kubectl kubernetes-cni
$ systemctl enable docker && systemctl restart docker
$ systemctl enable kubelet && systemctl restart kubelet
  • master 서버 AND cluster Node서버 동일설치

2. MASTER 서버 초기화

  • network add-on으로 flannel을 사용할 때는 ‘–pod-network-cidr’ 옵션이 필수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo kubeadm init --pod-network-cidr 10.244.0.0/16
.
.
.
생략
.
.
.
Your Kubernetes master has initialized successfully!

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node:

kubeadm join --token=872aa9.d7610d83eabce1a4 <master ip>
  • 초기화시 옵션 –kubernetes-version v1.9.2 –feature-gates CoreDNS=false

3. Master에서 Pod 수행(For TEST)

  • 기본적으로 클러스터는 보안 문제로 master에서 pod를 스케줄링 하지 않는다. 하지만, 예를 들어 테스트할때 노드가 부족하거나 단일 노드에서 개발 용으로 kubernetes 클러스터를 사용할 때, master에서 pod를 스케줄링하도록 명령할 수 있다.
1
$ kubectl taint nodes --all node-role.kubernetes.io/master-

4. pod network add-on 설치

  • 사용 가능한 network add-on 목록 중 하나를 선택한다. 클러스터 당 하나의 pod network만 설치할 수 있다. 각 network add-on 링크에 접속하면 설치 방법이 나와있다. ‘Weave Net’ 과 ‘Flannel’만이 멀티 플랫폼 환경(amd64, arm64, arhtp)을 지원한다.
1
2
3
export KUBECONFIG=/etc/kubernetes/admin.conf
sysctl net.bridge.bridge-nf-call-iptables=1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

5. Cluster Node Join

  • Master에서 Pod network설치가 완료되어 ‘kube-dns’가 Running 상태가 되었는지 확인한다.
1
2
3
4
5
6
7
8
9
10
11
$ kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
etcd-localhost.localdomain 1/1 Running 0 3d
kube-apiserver-localhost.localdomain 1/1 Running 0 3d
kube-controller-manager-localhost.localdomain 1/1 Running 0 3d
kube-dns-6f4fd4bdf-x4k6t 3/3 Running 0 3d
kube-flannel-ds-c5l2w 1/1 Running 1 1d
kube-flannel-ds-fxknd 1/1 Running 2 3d
kube-proxy-dg7xd 1/1 Running 0 3d
kube-proxy-pmbsb 1/1 Running 0 1d
kube-scheduler-localhost.localdomain 1/1 Running 0 3d
  • node 서버가 접속하여 master init에서 나온 결과를 입력한다.
1
2
3
4
5
6
7
8
[root@node1]# kubeadm join --token 64dd18.cb6f66d53a1b8710  [master-ip]:6443 
--discovery-token-ca-cert-hash sha256:c5e8554a75dae6a7701dc12043cf6d2576842a4e360b24d38971fe0911c412ba

#마스터서버에서
[root@master1]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 3d v1.9.6
node1 Ready node 1d v1.9.6

6. 초기화 - RESET KUBERNETES(MASTER AND CLUSTER)

1
2
3
4
5
6
7
8
9
10
11
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1