Kubespray는 쿠버네티스를 쉽게 설치하는 자동화 도구입니다.
Ansible Playbook, Inventory, Provisioning Tool과 일반적인 운영체제, 쿠버네티스 클러스터의 설정 관리 작업을 Ansible을 통해 쉽고 효과적으로 kubernetes 클러스터를 설정합니다.
kubespray 서버 : kubespray를 실행할 서버
kubernetes master 서버 : kubernetes 마스터 서버
kubernetes worker 서버 : kuberentes 워커 서버
kubernetes master 서버를 포함한 worker 서버에 패킷 포워딩이 가능하도록 설정하고, 방화벽 및 selinux를 해제하며, 메모리 swapping을 비활성화합니다.
$ echo 1 > /proc/sys/net/ipv4/ip_forward
$ systemctl stop firewalld & systemctl disable firewalld
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux && cat /etc/sysconfig/selinux
$ setenforce 0
$ swapoff -a
kubespray를 사용하기 위해서는 공식 깃헙의 내용을 클론하여 내용 변경 후 사용합니다.
# kubespray 서버 에서
git clone https://github.com/kubernetes-sigs/kubespray.git
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.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
kubespray 서버를 통해서 스프레이하면 master, worker간에 클러스터 구축이 완료되고, 마스터 서버를 통해서 클러스터가 정상적으로 생성이 되었는지 확인할 수 있습니다.
kubectl get nodes
결국, Ansible을 사용하여 kubernetes를 여러 서버에 효율적으로 설치하는 방법을 제공해주는 오픈소스인 것 같습니다.