[Kubernetes] Kubernetes Architecture(2)[쿠버네티스 설치 및 환경 설정]
DevOps/Kubernetes

[Kubernetes] Kubernetes Architecture(2)[쿠버네티스 설치 및 환경 설정]

목차

- 쿠버네티스 설치 실습

  - Load balancer인 haproxy 설치, 설정

  - Kubeadm 설치

  - kubeadm, kubelet 및 kubectl 설치

- 설치 완료 후

  - Kubectl?

  - 인증서

  - 팁


쿠버네티스 설치 실습

Load balancer인 haproxy 설치, 설정

 

# sudo setenforce 0

# sudo yum install haproxy -y

 

 

# sudo vi /etc/haproxy/haproxy.cfg

frontend kubernetes-master-lb
 bind 0.0.0.0:16443
 option	tcplog
 mode tcp
 default_backend kubernetes-master-nodes
backend	kubernetes-master-nodes
 mode tcp
 balance roundrobin
 option	tcp-check
 option	tcplog
 server	master1	<vm instance ip>:6443 check
 server	master2	<vm instance ip>:6443 check
 server	master3	<vm instance ip>:6443 check

설정을 해줬으니 haproxy를 reload후 재시작합니다

# sudo systemctl daemon-reload

# sudo systemctl restart haproxy

 

 

16443 포트가 Listen 중인지 확인

# sudo netstat -nltp

haproxy 설치 완료!

 

이제 16443 포트로 와서 Load balancing이 될 것입니다.

 


Kubeadm 설치

 

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스를 설치하는 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm을 사용하여 클러스터 생성하기 페이

kubernetes.io

 

- 설치 전,

  - 리눅스 기반, 2GB Ram, 2 CPU 이상의 성능

  - SWAP 미사용 (카카오 기본 이미지에 SWAP 미설정됨)

  - 고유한 hostname, MAC, UUID, 포트 개방, 네트워크 연결

    [전체 노드] # hostname 으로 hostname 확인 후 /etc/hosts 에 반영 (worker도)

 

hostname을 치면 아래와 같이 나옵니다. 이제 이것을 /etc/hostname에 넣어줍니다.

# sudo vi /etc/hosts

나머지 노드에도 모두 적용합니다.

 

- MAC 주소 및 UUID가 고유한지 확인

 

- 네트워크 어댑터 확인

  - 카카오 내 VM은 1개만 이므로 관계없음

 

- [전체 노드] br_netfilter 모듈 로딩 : 리눅스 노드의 iptables가 브리지 된 트래픽을 올바르게 보기 위한 요구 사항

 

출처 : kubernetes 공식 홈페이지

 

모든 노드에 적용합니다.

 

 

- 주요 포트 확인

- 외부에서 쿠버네티스 API를 접근 시 6443 포트 사용

 

- [전체 노드] CRI (Container runtime interface) 설치 필요 : Docker 설치/시작

 

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2

(모든 노드에 적용)

 

# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

(cat /etc/yum.repos.d/docker-ce.repo 로 확인)

(동일하게 모든 노드에 적용)

 

 

 

# sudo yum install docker-ce -y

(동일하게 모든 노드에 적용)

 

Configuring the container runtime cgroup driver

Configuring the kubelet cgroup driver

 

# sudo vi /usr/lib/systemd/system/docker.service

 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdr iver=systemd

(동일하게 전체 노드에 적용)

 

 

새롭게 설정했으므로 reload 합니다

# sudo systemctl daemon-reload

 

# sudo systemctl start docker && sudo systemctl enable docker

(start : 프로세스 실행 , enable : 도커를 저절로 실행되게 끔 자동실행)

(정상 작동 시 Created symlink...)

(동일하게 모든 노드에 적용)

 

도커 설정 확인

# sudo docker info | grep -i cgroup


kubeadm, kubelet 및 kubectl 설치

[전체 노드] Redhat 배포판 버전으로 따라 하기

 

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#kubeadm-kubelet-및-kubectl-설치

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스를 설치하는 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm을 사용하여 클러스터 생성하기 페이

kubernetes.io

 

 

 

permissive로 변경하기 위해 아래와 같이 설정합니다.

# sudo setenforce 0

# sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

 

 

[전체 노드] 단, kubelet / kubeadmin / kubectl 은 최신보다 한 단계 낮은 버전으로 설치 (향후 교육과정 고려)

 

# sudo yum info kubelet --disableexcludes=Kubernetes -y

# sudo yum install kubelet-1.21.0 --disableexcludes=kubernetes -y

# sudo yum install kubectl-1.21.0 --disableexcludes=kubernetes -y

# sudo yum install kubeadm-1.21.0 --disableexcludes=kubernetes -y

# sudo systemctl enable --now kubelet

 

 

앞에서 도커의 cgroup driver를 systemd로 설정했기에, 쿠버도 마찬가지로 설정

# sudo vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 내에

[Service]

  Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd --runtime-cgroups=/systemd/system.slice --kubeletcgroups=/systemd/system.slice"

 

 

daemon reload, kubelet restart 수행.(모든 노드)

 

이제 필요한 패키지는 모두 설치 완료. 클러스터를 만들어야 함

 

[컨트롤 첫 번째만] (etcd가 함께 포함된) Stack Control node 설치

 

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

Stacked control plane and etcd nodes

sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs

 

 

Your Kubernetes control-plane has initialized successfully!

 

정상적으로 생성되었습니다.

이 결과 메시지를 아래처럼 txt 파일 형태로 만들어 놓습니다.

 

 

 

[결과 메시지에 따라 이어서 진행]

 

 

 

 

 

 

[결과 메세지에 따라 진행]

(다른 마스터 노드 2,3에서 진행)

You can now join any number of the control-plane node running the following command on each as root: kubeadm join

 

Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

 

Then you can join any number of worker nodes by running the following on each as root: (워커 노드 1,2에서 진행)

 

마스터 노드

위의 master-01 노드에서 복사해서

아래의 master-02 노드에 루트 권한으로 접근해 붙여넣기 합니다.(master-03 노드도 동일)

 

붙여 넣기 후 아래의 세 문장을 입력합니다

 

 

 

워커 노드

master-01 노드에 있었던 명령어를 복사해서

루트권한으로 worker 노드에 붙여 넣기 합니다.

 

 

kubectl get nodes 명령어로 설치가 된 것을 확인할 수 있습니다.

 

설치 완료!!!

 


설치 완료 후

Kubectl?

- Kubectl 은 쿠버네티스 클러스터를 제어하기 위한 커맨드 라인 도구

   kubectl [command] [TYPE] [NAME] [flags]

   - command : 명령을 하려는 '동사', 예: create, get, describe, delete

   - TYPE : 리소스 타입

   - NAME : 리소스 이름

   - flags : 선택적 옵션

   

   kubectl help를 사용하여 command를 확인 가능 (-- help)

   kubectl에서 자주 사용하는 output flag는 -o wide, -o yaml, -o json, --sort-by=<jsonpath_exp> 등

     --dry-run=client -o yaml > filename.yaml

 


인증서

Preflight-check가 완료되면 kubeadm은 CA(자체 인증) 파일과 키를 생성

 

pki => public key infrastructure

.crt => 서버 인증서

.key => 서버 개인키 

 


자동 완성 설정 : https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-bash-completion

 

Bash

  sudo yum install -y bash-completion

  source /usr/share/bash-completion/bash_completion # bash-completion 패키지를 먼저 설치 후, bash의 자동 완성 셸에 설정

  echo "source <(kubectl completion bash)" >> ~/.bashrc # 자동 완성을 bash 셸에 영구적으로 추가

  kubectl completion bash >/etc/bash_completion.d/kubectl # root 권한으로 실행

 


Reference

https://classlion.net/class/detail/21

 

도커/쿠버네티스 온라인 부트캠프 with 카카오엔터프라이즈

도커/쿠버네티스 온라인 부트캠프 with 카카오엔터프라이즈

www.classlion.net

 

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

kubeadm 설치하기

이 페이지에서는 kubeadm 툴박스를 설치하는 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm을 사용하여 클러스터 생성하기 페이

kubernetes.io