首頁 > 軟體

Ansible Galaxy命令的使用實踐範例詳解

2023-01-28 18:01:46

Ansible Galaxy 初識

Ansible Galaxy 是 Ansible 官方 Roles 資源庫(galaxy.ansible.com),在 Galaxy 平臺上所有人可以分享 ansible 功能模組

為什麼要用 ansible-galaxy

作為一個入門的運維人員,你可以從一些 palybook 開始編寫你的自動化專案。但是隨著你對 Ansilble playbook 的增加,以及你對 Ansible Role 的需求,你會進一步意識到,使用 Ansible Galaxy 變得非常有價值。Ansible Galaxy 作為 Ansible Roles 的資源庫,可以直接放到你的 playbook 中來簡化你的自動化專案。

ansible-galaxy 命令的使用

[root@localhost root]# ansible-galaxy --help
Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
Options:
  -h, --help            show this help message and exit
  -c, --ignore-certs    Ignore SSL certificate validation errors.
  -s API_SERVER, --server=API_SERVER
                        The API server destination
  -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                        connection debugging)
  --version             show program's version number and exit
 See 'ansible-galaxy <command> --help' for more information on a specific command.

這裡有一些有用的 ansiber -galaxy 命令,你可能會經常使用:

ansible-galaxy list 顯示已安裝 Roles 的列表和版本號

ansible-galaxy remove <role> 刪除已安裝的角色

ansible-galaxy install 安裝 Ansible Galaxy 資源庫中的角色.

ansible-galaxy init 初始化 Role 角色模板

搜尋 role

[root@localhost root]# ansible-galaxy search helm
Found 54 roles matching your search:
 Name                                                   Description
 ----                                                   -----------
 aalaesar.helm_release                                  Create, update, upgrade an delete Helm releases using Ansible and the Helm CLI
 abdennour.kube_local_environment                       Installs kubernetes utilities for DevOps environment
 acikogun.winit                                         An extensible installer for tools listed below. ansible awscli azurecli cloudsdk docker docker-compose eksctl go helm java8 java11 node packer terraform vagrant
 afonsog.k8s_helm                                       Install helm on master nodes & tiller on k8s-cluster
 afpacket.devops_tools                                  Ansible role for installing DevOps tools
 alvarobacelar.ansible_role_helm_istio                  Role de instalação do helm e istio
 andrewrothstein.kubernetes-helm                        installs kubernetes helm
 ansible-ThoTeam.nexus3-oss                             Nexus Repository Manager 3.x (Sonatype)
 Anthony25.kubernetes-keel                              Install Keel on Kubernetes
 antongorkovenko.k8s                                    Kubernetes: setup master and worker nodes
...

安裝 role

ansible-galaxy install dodas.helm
[root@localhost root]# ansible-galaxy install dodas.helm
- downloading role 'helm', owned by dodas
- downloading role from https://github.com/DODAS-TS/ansible-role-helm/archive/v2.0.0-rc5.tar.gz
- extracting dodas.helm to &lt;path&gt;/roles/dodas.helm
- dodas.helm (v2.0.0-rc5) was installed successfully

根據輸出提示,安裝的 role 放在相應 Ansible 目錄中

檢視這個 role 目錄結構:

[root@localhost root]# tree
.
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   ├── helm.yml
│   └── main.yml
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
6 directories, 9 files

之後,你可以在你的 playbook 中使用該 role

新建 role

你也可以使用 Ansible -galaxy init 初始化一個新的 galaxy 角色

ansible-galaxy init vivaserver.lamp

初始化後的檔案目錄和上文的 role 目錄結構類似, 你可以在task/main.yml 這個 role 的入口檔案中,編寫各樣的 tasks,並結合 templates 中 jinjia2 模組檔案等來豐富你要建立的 role 等

公司的最佳實踐

Ansible Galaxy 可以使用 git 新增角色源,比如 GitHub。 因此在我們公司的實際使用中,通常會編寫一些 Ansbile common Roles(通用角色) 以滿足特定的需求。將定義 Ansible Roles 程式碼放在 Git 倉庫中作為公共模組使用,可以更加方便地載入到其他 repo 中, 更好地實踐 gitops 和 IaC(infrastructure as code) 理念

例如,在我建立 Kubernetes,Prometheus 等(IaC)專案庫裡,會常使用 Helm 或者 terraform 這些 role 來部署 AWS 或者 K8S 等相關資源

Ansible 目錄結構如下

├── playbooks
│   ├── configuration.yml
│   ├── kubernetes.yml
│   ├── network.yml
├── requirements.yml
├── roles
└── tasks
    ├── aws_get_resources.yml

首先,在 requirements.yml 裡定義:

- name: terraform
  src: https://github.com/solutionDrive/ansible-role-terraform/archive/v1.2.0.tar.gz
- name: helm 
  src: git@github.com:<github>/ansible-role-helm.git
  scm: git 
  version: 1.0.5

並在 ansible.cfg 中指定 roles 安裝路徑

roles_path = ansible/roles

使用如下命令安裝 roles 模組到指定的路徑

$ ansible-galaxy install -r requirements.yml

安裝後,Ansible 目錄結構大概如下

├── playbooks
│   ├── configuration.yml
│   ├── kubernetes.yml
│   ├── network.yml
├── requirements.yml
├── roles
│   ├── helm
│   └── terraform
└── tasks
    ├── aws_get_resources.yml

接著,在某個 playbook.yml 可以這麼參照 Role,來使用 helm deploy K8S 資源

  tasks:
    - name: init Helm
      import_role:
        name: helm

最後,使用ansible-playbook 來部署資源

ansible-playbook ansible/playbooks/kubernetes.yml 

總結

本文介紹了 Ansible Galaxy 命令的使用,並詳談了在實際工作中你可以如何應用 Galaxy 建立的 role 到你的專案中。使用 Ansible Galaxy 來創造 Role 是一種極好的想法,也是一種理想的方式來組織和管理你不斷增長的 playbook。通過簡單、強大、無代理、快速有效地擴充套件基礎設施的自動化解決方案,讓自己成為更高階的運維人員,更多關於Ansible Galaxy命令的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com