Ansible(AWX) 개념 및 Install

14475 단어 ansibleossIaCIaC
  • 여러대의 서버를 효율적으로 관리하기 위해 고안된 환경 구성 자동화 도구 중 하나로 다음과 같은 특징을 가진다
  • Agentless, SSH 사용으로 Push 방식, Python 으로 구현. 오픈소스 자동화 도구, 멱등성 보장

Ansible 기본 용어

  • ad-Hoc: 단일작업
  • playbooks: 단일작업인 ad-hoc 을 모아서 작성
  • roles: playbook 의 재사용 가능 형태
  • tasks: ansible 의 실제 작업 단위
  • inventory: 관리 노드 목록
  • Ansible Tower: 기업에서 사용하기 위한 기능에서 일부는 안되고 일부는 번거롭게 구현해야 하는 형태라 이 부분을 지원하는 솔루션으로 Ansible Tower라는 제품을 Redhat에서 제공(판매?...)
  • AWX: Ansible Tower의 OSS(Open Source Software) 버전이 AWX입니다.
    * ansible tower 는 상용 제품이나 ansible tower 의 오픈소스 버전으로 ansible 을 GUI 로 제어할 수 있도록 해주는 시스템

Ansible(AWX) install(Standalone)

  • Ubuntu 20.04 LTS
  • 하드웨어 기본 사양
    • 4 GB of RAM
    • 3.4 GHz CPU with 2 Cores
    • Hard disk space 20 GB
    • Internet Connection
  • 필요한 컴포넌트들
    * Ansible
    • docker compose
    • python

Step 1) Update package index

$ sudo apt update

Step 2) Install docker-ce (community edition)

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker $USER
$ sudo systemctl restart docker
$ docker version

Step 3) Install docker-compose

$ curl -s https://api.github.com/repos/docker/compose/releases/latest \
  | grep browser_download_url | grep docker-compose-Linux-x86_64 \
  | cut -d '"' -f 4 | wget -qi -
$ sudo chmod +x docker-compose-Linux-x86_64
$ sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
$ docker-compose version
docker-compose version 1.29.2, build unknown

Step 4) Install Ansible

$ sudo apt install -y ansible
$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/suji.lee14/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]

Step 5) Install node and NPM (Node Package Manager)

$ sudo apt install -y nodejs npm

Step 6) Install and Setup Ansible AWX

$ sudo apt install -y python3-pip git pwgen
$ sudo pip3 install docker-compose==1.29.2
$ wget https://github.com/ansible/awx/archive/17.1.0.zip
$ unzip 17.1.0.zip
$ cd awx-17.1.0/installer
$ pwgen -N 1 -s 30
BNDLg3WndlIZSvRTjz7JwkyBcEXe4u
$ vi inventory

Step 7) Run the playbook file to Install AWX

$ ansible-playbook -i inventory install.yml
$ docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS         PORTS                                   NAMES
22b646599acd   ansible/awx:17.1.0   "/usr/bin/tini -- /u…"   6 minutes ago    Up 6 minutes   8052/tcp                                awx_task
3e74d23ce81e   ansible/awx:17.1.0   "/usr/bin/tini -- /b…"   11 minutes ago   Up 6 minutes   0.0.0.0:80->8052/tcp, :::80->8052/tcp   awx_web
6a2513cafda2   redis                "docker-entrypoint.s…"   12 minutes ago   Up 6 minutes   6379/tcp                                awx_redis
3850007e5f87   postgres:12          "docker-entrypoint.s…"   12 minutes ago   Up 6 minutes   5432/tcp                                awx_postgres

ansible 서버의 IP(80port) 로 접속

재시작시

# docker-compose up -d

Ansible 서버 등록 및 key 등록

ansible hosts 파일에 서버 등록

아래 파일에 등록 할 호스트와 그룹을 설정

$ sudo vi /etc/ansible/hosts

[gcpservers]
10.2.1.3

등록된 server 에 ping test

$ ansible gcpservers -m ping
The authenticity of host '10.2.1.3 (10.2.1.3)' can't be established.
ECDSA key fingerprint is SHA256:KFj6rtme8qw9rwfSdQ9mN3RRu8H4ydlv3CFjr+FDBSU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? Y

처음 진행하는 경우 아래와 같이 권한 없음 메시지 노출

10.2.1.3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.2.1.3' (ECDSA) to the list of known hosts.\r\[email protected]: Permission denied (publickey).",
    "unreachable": true
}

Step 1) Setup Keys based authentication among Ansible AWX Node and its clients

$ ssh-keygen # ansible 서버에서 실행
The key's randomart image is:
+---[RSA 3072]----+
|     ooo+.o. oo+.|
|    ...=.. .o.* o|
|      + .  . . = |
|       o .  .   .|
|      . S ..    .|
|     . * . .+ .. |
|      = + .+.*.  |
|       o . oB+=. |
|          .=*+ .E|
+----[SHA256]----

$ ls -al ~/.ssh/
authorized_keys  id_rsa  id_rsa.pub

$ ssh-copy-id [email protected]
  • 만약 GCP 와 같은 VM 인스턴스를 대상으로 키 복사를 시도하는 경우 GCP 에서 이미 해당 계정의 .ssh/authorized_keys 에 공개키를 등록 해 놓은 상태이므로, ssh-keygen 을 통해 생성한 공개키를 수동으로 붙여넣기 하면 정상 접속 가능
$ ansible gcpservers -m ping
10.2.1.3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Step 2) Create an Organization in AWX GUI

Step 3) Create a Project and Assign Organization to it

Step 4) Create Credentials and add private key and other details

Step 5) Create an Inventory, add hosts to it and run ping module

Step 6) Create and Run Job Template

Step 7) Scheduling Job Template

Ansible(AWX) 버전 업데이트

backup & restore

awx 의 경우, awx 내에서 한 작업들은 대부분 postgresql 에 저장이 되므로, 이것만 백업해두면 됩니다.
(playbook 등의 소스는 github 으로 관리)

  • backup
    docker exec -t awx_postgres pg_dump -c -d awx -U awx > awx_backup_db.dmp

  • restore
    cat awx_backup_db.dmp | docker exec -i awx_postgres psql -U awx

awx 버전 업

https://github.com/ansible/awx/blob/devel/INSTALL.md#upgrading-from-previous-versions

  • postgresql backup (버전업 실패를 대비해서)
  • 기존 구동 중인 docker 컨테이너 중지.
  • 신규 버전을 다운로드 하여, 설치편의 ansible-playbook -i inventory install.yml 전 까지 진행.
  • 버전업 파일 다운로드 후, 압축 풀고 inventory 내부 정보 수정.
  • ansible-playbook -i inventory install.yml
  • awx 사이트 접속해 보고, 버전업이 되었는지 확인.
  • 혹 정상 동작을 하지 않거나 하면, docker logs -f awx_task 를 확인하고, 상황봐서 기존 버전으로 원복.

참고자료

좋은 웹페이지 즐겨찾기