본문 바로가기

DevOps/Ansible

[A101] 5. Ansible Kubespray 분석

cloudNet@ 팀의 가시다 님이 진행하는 앤서블 스터디 2주차 정리입니다.

 

지난번 포스팅에서는 조건문과 반복문에 대해서 배웠습니다.

이번 포스팅에서는 Ansible Kubespray를 빗대어 앤서블 Role 구조에 대해서 학습 해보겠습니다.

 

 

  Role

 

✔️  은 “플레이북 내용을 기능 단위로 나누어 공통 부품으로 관리/재사용하기 위한 구조

  • 플레이북에서 전달된 변수를 사용할 수 있습니다. 변수 미설정 시 기본값을 롤의 해당 변수에 설정하기도 합니다.
  • 콘텐츠그룹화하여 코드를 다른 사용자와 쉽게 공유할 수 있습니다.
  • 웹 서버, 데이터베이스 서버 또는 깃(Git) 리포지터리와 같은 시스템 유형의 필수 요소정의할 수 있습니다.
  • 대규모 프로젝트를 쉽게 관리할 수 있습니다.
  • 다른 사용자와 동시개발할 수 있습니다.
  • 잘 작성한 롤은 앤서블 갤럭시를 통해 공유하거나 다른 사람이 공유한 롤을 가져올 수도 있습니다.

✔️  앤서블 롤 구조 : 롤은 하위 디렉터리 및 파일의 표준화된 구조에 의해 정의됩니다.

  • 최상위 디렉터리는 롤 자체의 이름을 의미하고, 그 안은 tasks 및 handlers 등 롤에서 목적에 따라 정의된 하위 디렉터리로 구성됩니다.
  • 아래 표는 롤의 최상의 디렉터리 아래에 있는 하위 디렉터리의 이름과 기능을 설명한 것 입니다.

✔️  롤 생성 및 디렉터리 구조 확인

#
ansible-galaxy role init my-role
- Role my-role was created successfully

#
tree ./my-role/
my-role/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files

 

  kubespray 배포하기

이 가이드는 Kubespray를 이용하여 AWS 에서 운영되는 쿠버네티스 클러스터를 설치하는 과정을 보여준다.

Kubespray는 Ansible 플레이북, 인벤토리를 통해 노드의 운영체제와 쿠버네티스 클러스터의 설정 관리 작업을 실행한다.

다음은 kubespray의 깃주소이다.

 

  • git clone 받기
$ pwd
/home/ubuntu/my-ansible
$ git clone https://github.com/kubernetes-sigs/kubespray
$ cd kubespray

 

 

  • 인벤토리 설정
# Copy ``inventory/sample`` as ``inventory/mycluster``
cp -rfp inventory/sample inventory/mycluster

# Update Ansible inventory file with inventory builder
declare -a IPS=(10.10.1.11 10.10.1.12 10.10.1.13)

# pip install && ruamel.yml 
sudo apt install python3-pip
pip install ruamel.yaml
pip install netaddr

# Update Ansible inventory file with inventory builder
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
  • 플레이북 실행

# Deploy Kubespray with Ansible Playbook 플레이북을 루트 계정으로 실행함

ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml

 

  • 설치완료 후 확인
root@node1:~# kubectl get nodes 
NAME    STATUS   ROLES           AGE   VERSION
node1   Ready    control-plane   26m   v1.28.5
node2   Ready    control-plane   26m   v1.28.5
node3   Ready    <none>          25m   v1.28.5