개발자에게 알파테스트 환경을 제공하고자 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/
'IT Knowledge > Kubernetes' 카테고리의 다른 글
Kubernetes Cluster 구축(CentOS, CRI-O) Step.3 (0) | 2021.12.15 |
---|---|
Kubernetes Cluster 구축(CentOS, CRI-O) Step.2 (0) | 2021.12.15 |
Kubernetes 물리서버 vs 가상서버 (0) | 2021.08.04 |
Kubernetes Serivce 리소스의 역할 및 타입 (1) | 2021.02.08 |
Kubernetes 별칭 및 자동완성 (0) | 2021.01.22 |
댓글