본문 바로가기
kubernetes

kubernetes cluster 구성

by 목씨 2020. 2. 27.

Kuberbetes Master 구성

1. upbuntu updata 및 docker 설치

$ sudo -i
$ apt-get update & apt-get upgrade -y 
$ apt-get install docker.io

docker 설치 후 네트워크 정보 확인하면 docker interface 확인 가능

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000

    link/ether 42:01:0a:80:00:26 brd ff:ff:ff:ff:ff:ff

    inet 10.128.0.38/32 scope global dynamic ens4

       valid_lft 3239sec preferred_lft 3239sec

    inet6 fe80::4001:aff:fe80:26/64 scope link

       valid_lft forever preferred_lft forever

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

    link/ether 02:42:3b:8f:8a:d2 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

       valid_lft forever preferred_lft forever

2. apt repository kubernetes 추가 및 GPG key 추가

source list 추가

/etc/apt/source.list.d/kubernetes.list 에 kubernetes package list 추가 
deb http://apt.kubernetes.io/ kubernetes-xenial main

 

GPG key 추가

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

$ apt-get update

 

3. kubernetes 설치 및 설정

kubernetes 설치

$apt-get install -y kubeadm=1.15.1-00 kubelet=1.15.1-00 kubectl=1.15.1-00

 

dns alias

지금 설치하는 instance 가 master 가 되므로 /etc/hosts 추가 한다.

10.128.0.38 k8smaster

 

swaf off

$ swapoff -a

 

cluster 초기화

$ kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.out

kubeadm-config.yaml 

apiVersion: kubeadm.k8s.io/vibeta2
kind: ClusterConfiguration
kubernetesVersion: 1.15.1
controlPlaneEndpoint: "k8smaster:6443"
networking:
         podSubnet: 192.168.0.0/16

kubeadm-init.out 파일 내용을 보면 join 할 수 있는 key 나 명령어 내용이 저장되어 있다.

 

4. kubectl 을 사용

유저별 kubectl 명령을 사용하여 cluster 에 crud를 하기 위한 설정 작업을 해아한다.

$ mkdir -p $HOME/.kube

$ sudo cp /etc/kubernetes/admin.conf %HOME/.kube/conf

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

초기 설치된 cluster의 kube-system 의 정보를 확인 해보면

$ kubectl get all -n kube-system 

NAME                                                    READY    STATUS    RESTARTS   AGE
pod/coredns-5c98db65d4-9wbdm       0/1     Pending       0          103s
pod/coredns-5c98db65d4-j4bhq           0/1     Pending      0          103s
pod/etcd-kube-master                             1/1     Running      0          41s
pod/kube-apiserver-kube-master           1/1     Running      0          49s
pod/kube-controller-manager-kube-master   1/1     Running   0          59s
pod/kube-proxy-ch4kv                             1/1     Running      0          102s
pod/kube-scheduler-kube-master         1/1     Running      0          57s

 

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE

service/kube-dns   ClusterIP   10.96.0.10           53/UDP,53/TCP,9153/TCP   118s

 

NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE

daemonset.apps/kube-proxy   1         1         1       1            1           beta.kubernetes.io/os=linux   118s

 

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/coredns   0/2     2            0           118s

 

NAME                                 DESIRED   CURRENT   READY   AGE

replicaset.apps/coredns-5c98db65d4   2         2         0       103s

network plugin 적용 및 rbac 적용

$ wge https://tinyurl.com/yb4xturm -O rbac-kdd.yaml

$ wge https://tinyurl.com/y8lvqc9g -O calico.yaml

$ kubectl apply -f rbac-kdd.yaml

$ kubectl apply -f calico.yaml

 

bash auto-completion

$ source <(kubectl completion bash)

$ echo "source <(kubectl completion bash)" ~/.bashrc

 

 

Kubernetest worker node 구성

1. ubuntu updata 및 docker 설치

$ sudo -i
$ apt-get update & apt-get upgrade -y 
$ apt-get install docker.io

 

2. apt repository kubernetes 추가 및 GPG key 추가

source list 추가

/etc/apt/source.list.d/kubernetes.list 에 kubernetes package list 추가 
deb http://apt.kubernetes.io/ kubernetes-xenial main

 

GPG key 추가

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

$ apt-get update

 

3. kubernetes 설치 및 설정

kubernetes 설치

$apt-get install -y kubeadm=1.15.1-00 kubelet=1.15.1-00 kubectl=1.15.1-00

 

dns alias

master instance ip를 /etc/hosts에 추가 한다.

10.128.0.38 k8smaster

 

4. cluster join

cluster 초기화 할 때 생긴 로그에 보면 join 방법이 있다.

kubeadm join --token xxxxxxxxxxxxxx~~ k8smaster:6443 --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxx~~

 

master에서 token 값 확인

$ kubeadm token list

$ kubeadm token create <- 만약 token이 만료 되었을 시

 

master에서 discovery-token-ca-hash값 확인

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

 

Join은 완료 되었고 kubectl 명령어는 worker node에서는 사용하지 않는다.

 

5. taint 삭제

master node에 pod를 띄우기 위한 작업.

$ kubectl describe node | grep -i taints

Taints:             node-role.kubernetes.io/master:NoSchedule

Taints:

 

$ kubectl taint nodes --all node-role.kubernetes.io/master-

node/master untainted

error: taint "node-role.kubernetes.io/master:" not found

 

 

'kubernetes' 카테고리의 다른 글

Resource 제한  (0) 2020.02.27
simple application 배포  (0) 2020.02.27