본문 바로가기
IT Knowledge/Kubernetes

Kubernetes Cluster 구축(CentOS, CRI-O) Step.1

by Seok. 2021. 12. 14.
반응형

개발자에게 알파테스트 환경을 제공하고자 Kubernetes Cluster를 구성합니다. 

 

Kubernetes Cluster를 구성할 때는 마스터노드(Control Plane)과 워커노드(Worker)가 있는데, 

구성은 동일하게 하고, 마지막에 서로의 역할에 따라서 설정만 진행해주면 됩니다. 

 

  • 마스터노드(Control Plane) : 클러스터의 전체적인 관리를 맡아서 진행하고, 컨테이너 or Pod를 새로 만들거나 삭제하는 명령을 내린다. (실제 컨테이너가 구동되는 머신은 아니다.)
  • 워커노드(Worker) : 컨테이너 런타임을 사용하여 실제 컨테이너가 실행되는 머신이다. 

구성환경

OS : CentOS 7

kubeadm, kubectl, kubelet : v1.22.3

컨테이너 런타임 : CRI-O


[Kubernetes Cluster 구성 Step]

1) 서버 OS 설정 (마스터, 워커 동일 작업)

2) Kubernetes 런타임 준비 (마스터, 워커 동일 작업) <링크>

3) 클러스터 구성 (마스터, 워커 별도 역할 구성 작업) <링크>


1) 서버 OS 설정

마스터노드(Control Plane)와 워커노드(Worker)에 둘다 동일한 작업이 필요합니다. 

 

[HostName 설정]

마스터노드 : hostnamectl set-hostname k8s-master-1

워커노드 : hostnamectl set-hostname k8s-worker-1

 

cat << EOF >> /etc/hosts

[master의 IP] k8s-master-1

[node1의 IP] k8s-worker-1

[node2의 IP] k8s-worker-2

EOF

 

설정후 재부팅이 필요합니다. 

 

 

[SELinux Permissive mode]

SELinux를 사용하는 경우, Permissive 모드

SELinux를 사용하지 않는경우, Disabled 모드

/etc/selinux/config에서 SELINUX를 아래와 같이 수정합니다. 

Permissive모드 : "SELINUX=permissive"
Disabled모드 : "SELINUX=disabled"

설정후 재부팅이 필요합니다. 

 

[기본 패키지 업데이트]

yum을 통해 최신업데이트를 완료합니다. 

$ yum update

 

[NTP설정]

클러스터 내의 모든 노드들은 NTP 통해서 시간 동기화가 되어야 합니다.

노드간에 시간차가 경우 문제가 발생할 수 있습니다.

예를 들면, TTL컨트롤러가 잘못된 시간에 리소스 오브젝트를 정리하게 수도 있습니다.

이러한 시간 차이를 피하기 위해 모든 노드에서 NTP 실행하여 시간을 맞춰주는것이 좋습니다. .

 

[ntpdate 사용하는 Case]
현재 ntp시간서버와 동기화 하기
$ ntpdate 시간서버

매일 새벽 1시마다 시간서버와 동기화 하기
$ Crontab -e
0 1 * * * ntpdate 시간서버 (매일 새벽 1시 동기화)

 

[Swap OFF]

Kubernetes에서는 kubelet 제대로 동작하게 하려면, 반드시 swap 사용하지 않도록 설정하라고 합니다.

$ sudo swapoff -a
$ vi /etc/fstab  # SWAP이 정의된 줄을 '#'으로 주석처리해준다.

 

[네트워크]

필수 포트 확인 - 쿠버네티스 컴포넌트들이 서로 통신하기 위해서 열려있어야 합니다. 

(권고 : firewall off)

 

마스터노드

규약 방향 포트 범위 목적 Used By
TCP 인바운드 6443 Kubernetes API 서버 All
TCP 인바운드 2379-2380 etcd Server 클라이언트 API kube-apiserver, etcd
TCP 인바운드 10250 kubelet API Self, 마스터 노드
TCP 인바운드 10259 kube-scheduler Self
TCP 인바운드 10257 Kube-controller-manager Self

etcd 포트는 마스터노드(Control Plane) 섹션에 포함되어 있지만, 외부 또는 사용자 지정 포트에서 자체 etcd 클러스터를 호스팅할 수도 있습니다.

$ sudo firewall-cmd --add-port=6443/tcp --permanent
$ sudo firewall-cmd --add-port=2379-2380/tcp --permanent
$ sudo firewall-cmd --add-port=10250/tcp --permanent
$ sudo firewall-cmd --add-port=10251/tcp --permanent
$ sudo firewall-cmd --add-port=10252/tcp --permanent
$ sudo firewall-cmd --reload

 

워커 노드

규약 방향 포트 범위 목적 Used By
TCP 인바운드 10250 kubelet API Self, 마스터 노드
TCP 인바운드 30000-32767 NodePort 서비스 All
$ sudo firewall-cmd --add-port=10250/tcp --permanent
$ sudo firewall-cmd --add-port=30000-32767/tcp --permanent
$ sudo firewall-cmd --reload

 

 

공식문서 : https://kubernetes.io/docs/reference/ports-and-protocols/

반응형

댓글