[kubernetes] kubespray를 통한 클러스터 구축

[kubernetes] kubespray를 통한 클러스터 구축

안녕하세요? 정리하는 개발자 워니즈입니다. 이번시간에는 쿠버네티스 클러스터 구축을해주는 툴인 kubespray에 대해서 알아보는 시간을 갖도록 하겠습니다. 이전 포스팅을 보면, 직접 마스터 노드/워커 노드에 접속을 해서 수동 설치를 진행하고 마지막에는 join을 해주는 개념으로 클러스터를 구축했었습니다. 하지만, kubespray를 통해서 한번에 진행하는 방식을 도입하고 그부분에 대해서 정리를 진행하고자 합니다.

필자는 초기 클러스터를 구축할 당시에 kubeadm 을 통해서 클러스터를 구축해보았습니다. kubeadm을 통해서 구축하는 내용은 쿠버네티스 공식 블로그에 순서대로 잘 정리가 되어있습니다.

kubeadm을 사용하여 클러스터 만들기

쿠버네티스를 구성하는 내용은 공식 블로그에는 3가지를 통해서 정리가 되어있습니다.

  1. kubeadm을 통한 클러스터 구축
  2. kops를 통한 클러스터 구축
  3. kubespray를 통한 클러스터 구축

위의 내용중에서 이번 포스팅은 kubespray를 통한 클러스터 구축에 대해서 정리를 하고자 합니다.

1. kubespray란 무엇인가요?

kubespray 는 쿠버네티스를 쉽게 설치하는 자동화 도구 입니다. github을 클론받게 되면, ansible yaml파일들이 정리가 되어있습니다. Ansible의 playbook과 inventory설정을 통해서 kubernetes 클러스터를 설정하게 됩니다.

kubespray는 Ansible Playbook, Inventory, Provisioning Tool과 일반적인 운영체제, 쿠버네티스 클러스터의 설정 관리 작업에 대한 도메인 지식의 결합으로 만들어졌습니다.
kubespray는 다음과 같은 기능을 제공합니다.

  • 고가용성을 지닌 클러스터의 생성
  • 대부분의 리눅스 배포판 지원
  • 지속적인 통합(CI) 테스트

2. Kubespray 사전 작업

kubespray를 활용하여 클러스터 구축을 하기 위해서는 다음과 같은 환경이 구성되어있어야 합니다.

2-1. 서버 구성

  • kubespray 서버 : kubespray를 실행할 서버
  • kubernetes master 서버 : kubernetes 마스터 서버
  • kubernetes worker 서버 : kuberentes 워커 서버

2-2. 사전 준비

kubespray서버에 접속한 뒤, 다음을 설치 합니다.
kubespray를 사용하기 위해서는 다음의 요구사항이 필요합니다.

  • Jinja 2.9 이상 필요
  • 서버가 인터넷에 액세스 가능
  • 서보 상호간의 ssh 키 복사
  • 방화벽 비활성화

  • Python3 설치(kubespray 서버)

$ yum install python3
  • Ansible, netaddr, jinja2 설치(kubespray 서버)
$ python3 -m pip install -u pip
$ pip3.6 uninstall ansible ansible-base
$ pip3.6 install ansible==2.9.14 netaddr jinja2
  • ssh key 생성(kubespray 서버)
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub // 해당 내용의 키값을 복사해둡니다.
  • ssh key 복사(master, worker 서버)
$ vi ~/.ssh/authorized_keys2 // 위의 복사된 키값을 append로 붙여넣습니다.

2-3. master, worker 서버 기본 셋팅

kubernetes master 서버를 포함한 worker 서버에서 아래의 명령어를 동일하게 수행합니다. 주요 내용은 패킷 포워딩이 가능하도록 설정하고, 방화벽 및 selinux를 해제하며, 메모리 swapping을 비활성화 하는 것입니다.

  • ip_forward 활성화
$ echo 1 > /proc/sys/net/ipv4/ip_forward
  • firewalld 비활성화
$ systemctl stop firewalld & systemctl disable firewalld
  • selinux 해제
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux
$ setenforce 0
  • swap memory 중지
$ swapoff -a 

3. kubespray 실행

kubespray를 사용하기 위해서는 공식 깃헙의 내용을 클론하여 내용 변경 후 사용합니다. 아래의 내용은 kubespray 서버에서 진행합니다.

  • git clone을 통해 소스를 가져옵니다.
$ git clone https://github.com/kubernetes-sigs/kubespray.git
  • requirements.txt 파일을 통해 종속파일들을 설치합니다.
$ sudo pip3 install -r requirements.txt
  • sample 파일을 custom cluster 폴더에 복사합니다 .
$ cp -rfp inventory/sample inventory/{custom cluster}
  • Inventory.ini 파일을 수정합니다.
$ vi inventory/{custom cluster}/inventory.ini

# inventory/mycluster/inventory.ini 
[all]
master ansible_host=192.168.122.10 ip=192.168.122.10 etcd_member_name=etcd1
node1 ansible_host=192.168.122.21  ip=192.168.122.21
node2 ansible_host=192.168.122.22  ip=192.168.122.22
node3 ansible_host=192.168.122.23  ip=192.168.122.23
# node4 ansible_host=95.54.0.15  # ip=10.3.0.4 etcd_member_name=etcd4
# node5 ansible_host=95.54.0.16  # ip=10.3.0.5 etcd_member_name=etcd5
# node6 ansible_host=95.54.0.17  # ip=10.3.0.6 etcd_member_name=etcd6

# ## configure a bastion host if your nodes are not directly reachable
# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube-master]
master

[etcd]
master

[kube-node]
node1
node2
node3

[calico-rr]

[k8s-cluster:children]
kube-master
kube-node
calico-rr
  • Ping 모듈을 통해서 노드간 통신이 이루어지는지 확인합니다.
$ ansible kube-node -i ./{custom cluster}/inventory.ini -m ping -u irteamsu -vvv
  • cluster.yaml 파일을 통해서 배포
$ ansible-playbook --flush-cache -u irteamsu -b -i inventory/{custom cluster}/inventory.ini cluster.yml -vvv

4. 클러스터 생성 확인

kubespray 서버를 통해서 스프레이를 뿌려주게 되면(?) master, worker간에 클러스터 구축이 완료되고, 마스터 서버를 통해서 클러스터가 정상적으로 생성이 되었는지 확인할 수 있습니다.

kube[root@dev-k8s-master001-kubespray-dev:~]# kubectl get nodes
NAME                               STATUS   ROLES    AGE     VERSION
dev-k8s-master001-kubespray-dev   Ready    master   2d17h   v1.18.8
dev-k8s-worker001-kubespray-dev   Ready       2d17h   v1.18.8
dev-k8s-worker002-kubespray-dev   Ready       2d17h   v1.18.8
dev-k8s-worker003-kubespray-dev   Ready       2d17h   v1.18.8

5. 마치며…

클러스터 생성을 도와주는 툴인 kubespray를 사용하는 방법에 대해서 정리를 해보았습니다. 정확하게 말하면 ansible 을 통한 클러스터 구축이라고 해도 상관이 없을 듯 합니다. ansible yaml 파일들이 각각 작성이 되어있고, 아마 내부적으로는 kubeadm을 설치하고 각 worker로 접속해서 join하는 작업이 명시되어 있지 않을까 하는 생각이 듭니다. 다음시간에는 kubespray의 yaml 파일들을 분석해보는 포스팅을 작성해 보도록 하겠습니다.

6. 참고자료

kubespray GitHub
kubespray로 Kubernetes 설치하기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다