티스토리 뷰

Cloud

Kubernetes Cluster on Rhel7 설치 1

나리 짱!!! naleejang 2020. 12. 31. 16:48

안녕하세요~!! 요즘 쿠버네티스 책을 하나 사서 실습을 따라해 보면서 쿠버네티스 공부를 하고 있는중인데요! 대부분 실습이 Minikube를 이용하면 따라할 수 있는 실습이긴 하지만, 어떤것들은 쿠버네티스 클러스터가 있어서 가능한 것도 있더라구요~!! 책에서는 나와있는 쿠버네티스 구성은 윈도우와 Mac 사용자를 위한 구성 방법만 나와있고, 리눅스에서 구성방법은 나와 있지 않아 이번 기회에 쿠버네티스 공식 매뉴얼, 그리고 검색을 통해 찾은 블로그 글들을 참조하여 쿠버네티스를 설치해 봤습니다. 대부분의 블로그 글들이 Ubuntu 기반에서 설치하는 방법으로 많이 나와 있더라구요. 그래서 저는 Rhel7 환경에서 설치를 한번 해 봤습니다. 설치는 그다지 어렵지는 않았는데, 네트워크 구성을 위한 Addon 설치가 네트워크 프로바이더 종류가 많아서 어떤걸 설치해야할지 잘 몰랐지만, Kubernetes Korea Group 회원님들이 친절하게 알려주신 덕분에 잘 설치를 할 수 있었습니다. 

 

쿠버네티스를 설치하기 위해서는 대략적으로 다음과 같은 과정이 필요합니다.

 

1. 쿠버네티스 설치용 VM 생성

    • Master용 vm 생성

    • Worker용 vm 생성

2. VM 환경설정

  • 네트워크 설정

  • SSH Keygen 설치 및 설정

  • 서브스크립션 등록 및 시스템 업데이트

  • Docker 설치 및 활성화

  • 방화벽 설정

  • 브리지 필터 적용

3. Kubeadm, kubelet, kubectl 설치

  • 쿠버네티스 리포지토리 설정

  • SELinux 설정 및 kubeadm,kubelet,kubectl 설치

4. 쿠버네티스 설치

  • 쿠버네티스 마스터 노드 설치

  • Addon 네트워크 설치

  • 쿠버네티스 워커 노드 등록

  • 등록된 워커 노드 확인

5. 쿠버네티스 시스템 구성 확인

  • 마스터 노드

  • 워커 노드

 

한 포스팅에 전체 과정을 다 남기면 가독성이 떨어지므로 2편으로 나누어서 포스팅을 하고자 합니다. 이번 포스팅에서는 [1. 쿠버네티스 설치용 VM 생성] 부터 2. VM 환경설정 까지 포스팅을 하도록 하겠습니다.

1. VM 생성하기

쿠버네티스 공식 문서(t.ly/Ikws)를 보면 아래와 같은 내용을 확인할 수 있습니다. 우선 준비하고자 하는 운영체제 이미지를 먼저 다운로드 사이트에서 다운로드 받아야 합니다. 저는 다운로드 받아 둔 RHEL7 이미지가 있어서 RHEL7을 사용하였습니다. 그리고, 메모리는 VM당 최소 2GB이여야 하고, CPU는 2 CPU 이상이어야 한다고 나와 있습니다.

1) 저는 VM를 생성하기 위해서 KVM을 사용했습니다. CPU는 아래 그림처럼 2 CPU, 메모리는 4GB를 설정하였습니다.   

2) 디스크는 특별히 언급되어 있는 부분이 없어서 그냥 50GB로 생성을 했습니다. 

3) 네트워크는 인터넷을 해야하기 때문에 NAT 네트워크를 사용하였습니다.

4) 이렇게해서 VM을 용도에 맞게 생성하면 아래와 같이 Master용 VM 1개, Worker용 VM 2개가 생성이 됩니다. 여기서는 Master용 VM 이름을 control이라고 하였습니다.

2. VM 환경설정

이렇게해서, VM을 생성하고 다운로드 받은 운영체제 이미지로 운영체제까지 설치를 했다면, 이번에는 VM에 쿠버네티스를 설치하기 전에 쿠버네티스 설치를 위한 환경설정을 해보도록 하겠습니다.

2.1 네트워크 설정

1) 112.107.91가장 먼저 통신을 위해 네트워크를 설정합니다. NAT 네트워크를 사용했기 때문에 해당 NAT 네트워크 IP 대역으로 아래와 같이 Master용 VM의 IP를 설정합니다.

[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.0.203
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
[root@master ~]# systemctl restart network

2) 이번에는 worker용 VM의 IP도 아래와 같이 설정해 줍니다.

[root@worker1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.0.204
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
[root@worker1 ~]# systemctl restart network

3) 두번째 worker용 VM도 아래와 같이 IP를 설정합니다.

[root@worker2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.0.205
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
[root@worker2 ~]# systemctl restart network

 

2.2 SSH keygen 설치 및 설정

네트워크 설정이 끝나면 master 노드에서 worker 노드로 접근을 용이하게하기 위해 /etc/hosts에 worker 노드 IP와 호스트명을 추가합니다. 그리고, ssh-keygen 명령어를 이용하여 퍼블릭 key와 개인 key를 생성합니다. 그리고, 생성한 퍼블릭 key는 다른 worker 노드에 복사합니다. 이렇게 하면 중복으로 생성해 주어야 하는 환경설정 파일들을 쉽게 worker 노드로 복사할 수 있습니다.

# /etc/hosts 파일에 호스트명 등록
[root@master ~]# echo "192.168.0.204 worker1" >> /etc/hosts
[root@master ~]# echo "192.168.0.205 worker2" >> /etc/hosts

# ssh-keygen으로 키 생성
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RB9ppukKJ2cjeEs0GeQohwHthS+AlYoH+8SkgZNLiSA root@worker1
The key's randomart image is:
+---[RSA 2048]----+
|E+o+.   . ..     |
|@==oo  . .+.     |
|=&oo.o  .=.      |
|*o* =  .o        |
| + + . .S        |
|  o * = .        |
|   o O o         |
|    . .          |
|                 |
+----[SHA256]-----+

# ssh-copy-id 명령어를 이용하여 worker1 노드로 key 복사
[root@master ~]# ssh-copy-id -i .ssh/id_rsa.pub root@worker1
...
root@worker1's password: *****
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@worker1'"
and check to make sure that only the key(s) you wanted were added.

# ssh-copy-id 명령어를 이용하여 worker2 노드로 key 복사
[root@master ~]# ssh-copy-id -i .ssh/id_rsa.pub root@worker2
...
root@worker2's password: *****
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@worker2'"
and check to make sure that only the key(s) you wanted were added.

 

2.3 서브스크립션 등록 및 시스템 업데이트

RHEL 7을 사용할 경우에는 내부에 로컬 리포지토리가 있다면 해당 리포지토리를 사용하고 그렇지 않다면 서브스크립션을 등록해 주어야 합니다. 내부 로컬 리포지토리를 사용할 경우를 제외하고, 외부 리포지토리를 사용할 경우에는 반드시 인터넷 접속이 가능해야 합니다. RHEL7 같은 경우에는 서브스크립션 등록이 끝나면 rhel-7-server-rpms와 rhel-7-server-extras-rpms 리포지토리 활성화가 필요합니다. 그리고, 마지막으로 시스템을 업데이트 후 재부팅합니다. 이는 master 노드 뿐만 아니라, worker 노드 역시 동일하게 수행합니다.

# master node 서브스크립션 등록 및 시스템 업데이트
[root@master ~]# subscription-manager register
[root@master ~]# subscription-manager attach --pool=8a85f99a752e…
[root@master ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms
[root@master ~]# yum update -y && reboot

# worker1 node 서브스크립션 등록 및 시스템 업데이트
[root@worker1 ~]# subscription-manager register
[root@worker1 ~]# subscription-manager attach --pool=8a85f99a752e…
[root@worker1 ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms
[root@worker1 ~]# yum update -y && reboot

# worker2 node 서브스크립션 등록 및 시스템 업데이트
[root@worker2 ~]# subscription-manager register
[root@worker2 ~]# subscription-manager attach --pool=8a85f99a752e…
[root@worker2 ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms
[root@worker2 ~]# yum update -y && reboot

 

2.4 Docker 설치 및 활성화

1) 시스템 업데이트를 하고 나면 모든 노드에 docker를 설치해 주어야 합니다. 그리고, 설치된 docker를 활성화하고 서비스를 시작합니다.

# master node docker 설치 및 활성화
[root@master ~]# yum install docker
[root@master ~]# systemctl enable docker
[root@master ~]# systemctl start docker

# worker node docker 설치 및 활성화
[root@master ~]# for i in {1..2}; do
 ssh root@worker$i yum install docker
 ssh root@worker$i systemctl enable docker
 ssh root#worker$i systemctl start docker
done

2) Docker가 설치되고, docker 서비스가 시작되면 아래와 같이 docker 명령어를 사용할 수 있습니다.

[root@master ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

2.5 방화벽 설정

이번에는 쿠버네티스 설치를 위한 방화벽을 설정합니다. 쿠버네티스 공식 매뉴얼(t.ly/Ikws)에 보면 아래와 같이 오픈해 주어야 할 port 목록이 나열되어 있습니다. 

1) 매뉴얼에 나와 있는것처럼 master 노드의 방화벽인 firewalld 에 아래와 같이 쉘 스크립트를 작성하여 실행하면 쉽게 방화벽 포트를 추가할 수 있습니다.

[root@master ~]# vi add-firewall.sh
#!/bin/bash

for i in 6443 2379-2380 10250 10251 10252
do
  firewall-cmd --add-port $i/tcp
  firewall-cmd --add-port $i/tcp --permanent
done
[root@master ~]# sh add-firewall.sh

 

2) Worker 노드 역시 쉘 스크립트를 작성하여 실행하면 쉽게 포트를 추가할 수 있습니다. 이때  Worker1 노드에서 쉘 스크립트를 작성했다면 worker2 노드에는 worker1 노드에서 생성한 쉘 스크립트를 scp로 복사하면 중복 작업 없이 쉽게 방화벽에 포트를 추가할 수 있습니다.

[root@worker1 ~]# vi add-firewall.sh
#!/bin/bash

for i in 10250 30000-32767
do
  firewall-cmd --add-port $i/tcp
  firewall-cmd --add-port $i/tcp --permanent
done
[root@worker1 ~]# sh add-firewall.sh
[root@worker1 ~]# scp add-firewall.sh root@worker2:~/
[root@worker1 ~]# ssh root@worker2 sh add-firewall.sh

 

2.6 브리지 필터 적용

방화벽까지 적용하고 나면 브리지 네트워크를 위한 필터를 아래와 같이 master 노드와 worker 노드에 적용합니다.

# master 노드에 브리지 필터 적용을 위한 설정파일 생성
[root@master ~]# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

# 브리지 필터 적용
[root@master ~]# sysctl --system
…
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...
[root@master ~]#

# worker 노드에 브리지 필터 설정 파일 복사 및 적용
[root@master ~]# for i in {1..2}; do
  scp /etc/sysctl.d/k8s.conf root@worker$i:/etc/sysctl.d/
  ssh root@worker$i sysctl --system
done


이렇게해서 쿠버네티스 설치를 위한 사전 작업을 했습니다. 다음 포스팅에서 마저 쿠버네티스를 설치해 보도록 하겠습니다. 그럼 다음편도 계속해서 봐 주세요~!!
 

 

댓글
댓글쓰기 폼