Skip to main content

Package

kupboard의 colelction package는 Ansible Playbook을 사용한다. Ansible은 아주 훌륭한 오픈소스툴이며 이미 수 많은 솔루션에서 다양한 목적으로 사용되고 있다. 인터넷에는 이미 훌륭하게 작성된 playbook들이 있다. config의 action만 정의하면 아주 쉽고 빠르게 playbook을 사용할 수 있다. kupboard에서는 패키지의 playbook을 작성함에 있어서 기능적 제한을 두지 않으려고 노력했다. 사용자는 playbook 그리고 action을 사용하여 자신만의 훌륭한 kollection을 만들 수도 있다.

mykollection
└── packages
├── package1
│   └── playbook.yaml
└── package2
├── data
└── playbook.yaml

아래는 kupboard에서 제공되는 디폴트 kollection의 패키지를 수행하는 명령어이다. -c <kollection-name> 옵션을 사용하면 디폴트 패키지가 아닌 사용자가 추가한 kollection에 포함된 패키지를 사용할 수 있다.

$ kupboard kollection package -n <package-name> [-a <action-name>]

kupboard-kollection-nginx#

kupboard-kollection-nginx 예제를 통해서 config에서 package가 어떻게 정의되는지 살펴보자.

config.yaml에는 nginx라는 이름의 패키지가 정의되어 있고, 이 패키지는 deploydelete 두 개의 action을 제공한다. 사용되는 playbook은 1개이며 경로는 nginx/nginx.yaml 이고, target_group라는 변수를 playbook에서 사용할 수 있다. 그리고 각 action을 수행할 때에는 state 변수가 startedabsent로 지정된다.

version: 1.0
metadata:
name: Nginx
packages:
- name: nginx
playbook: nginx/nginx.yaml
vars:
target_group: gateway
actions:
- name: deploy
default: true
vars:
state: started
params:
- name: delete
vars:
state: absent
params:

Nginx 패키지에는 nginx.yaml 이름의 playbook이 1개 포함되어 있으며 nginx:1.19.10 컨테이너를 배포하는 역할을 수행한다. config에 정의된 target_groupstate 변수를 참조하고 있으며, 각 action 수행시 지정되는 state 값이 컨테이너 배포에 사용되고 있다.

- name: Nginx Package
hosts: "{{ target_group }}"
become: no
vars:
release_state: "{{ state | default('started') }}"
tasks:
- name: "{% if release_state == 'started' %} Deploy Nginx {% else %} Remove Nginx {% endif %}"
docker_container:
name: nginx
image: nginx:1.19.10
state: "{{ release_state }}"
restart_policy: always
container_default_behavior: compatibility
restart: yes
ports:
- 80:80

그렇다면 Nginx Package를 사용하여 nginx를 gateway 클러스터에 설치하기 위해서는 -a deploy 옵션을 사용해야 한다는 것과 -a delete 옵션으로 설치된 nginx를 삭제할 수 있다는 걸 알 수 있다.

$ kupboard kollection package -c kupboard-kollection-nginx -n nginx -a <deploy|delete>

Default Packages#

kupboard에는 디폴트 kollection을 포함하고 있으며 아래와 같은 다양한 오픈소스들을 위한 패키지를 사용할 수 있다.