一文学会主流Ansible Web UI的部署与使用 | 万字长文

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第1张图片

Ansible 作为近几年比较流行的自动化运维工具,由于简单、无侵入性,受到许多运维甚至开发同学的喜爱。大多数情况下,运维人员是喜欢直接在终端命令行下编写和执行playbook/role。

但这样会有三个问题:一个是Playbook不好管理,二是任务定义不直观,三是不便于协作。有什么办法可以解决这些问题?下面就一起来看看四个Ansible Web UI,哪个是我们最想要的。

Ansible Tower

Ansible Tower是Ansible官方的Web UI,所以我们第一个就从它开始,下面开始安装 。

Step1: 环境准备

系统:CentOS7.7+
配置:2核2G或更高
硬盘:50G+

注意:最新版Ansible Tower要求系统CentOS7.7+,如果小于7.7的化,执行setup.sh的时候会报如下错误:

先执行yum update -y 进行升级,当前实战环境是CentOS7.6 最小化安装版执行了yum update升级到CentOS7.8。

Step2: 安装环境及Ansible

sudo yum -y install epel-release
sudo yum -y install ansible vim curl deltarpm wget

Step3: 下载当前最新的Ansible Tower安装包

mkdir /tmp/tower && cd /tmp/tower
curl https://releases.ansible.com/ansible-tower/setup-bundle/ansible-tower-setup-bundle-3.7.2-1.tar.gz
tar xvf ansible-tower-setup-bundle-3.7.2-1.tar.gz
cd ansible-tower-setup-bundle-3.7.2-1

Step4: 安装Ansible Tower

Ansible Tower是使用Ansible playbook来部署的,首先需要配置一下inventory,配置内容如下:

[tower]
localhost ansible_connection=local
[database]
[all:vars]
admin_password='AdminPassword'
pg_host=''
pg_port=''
pg_database='awx'
pg_username='awx'
pg_password='PgStrongPassword'
rabbitmq_username=tower
rabbitmq_password='RabbitmqPassword'
rabbitmq_cookie=cookiemonster

配置完成后,执行一下命令安装:

sudo ./setup.sh

如果你看到了,类似下图的提示信息,faide=0,那恭喜你,安装成功了。

Step5: 登录Ansible Tower

安装完成之后,可以在浏览器中配置输入https://ip  访问Ansible Tower UI:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第2张图片

输入用户admin,密码是Step4中配置的AdminPassword,输入后出现如下提示你输入License,购买的了的话,直接输入即可,没有购买的话可以自行百度或者留言获取操作方法:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第3张图片

输入license之后,再次登录Ansible Tower,界面如下图,默认会有一台主机,这台是安装Ansible Tower的主机:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第4张图片

Step6: 实例演示

安装完成之后,Ansible Tower会创建一些默认的配置,我们可以作为列子来参考,当然也可以重新创建,本篇就以全部新建来做演示。

Ansible Tower使用的步骤如下:

创建机构 >> 创建凭证 >>创建项目 >> 创建清单 >> 创建模板 >>启动模板

下面就来逐一介绍如何配置。

  • 创建一个机构

    Ansible Tower中机构可以理解为公司,机构由用户、团队、清单、项目、作业模板、管理员,6块组成。

    在左侧导航中选择【机构】,在最右侧,点击 + 号按钮,添加机构,填写信息后点击保存:

  • 创建凭证

    在左侧导航中选择【凭证】,在最右侧,点击 + 号按钮,添加凭证,Ansible Tower支持22种凭证类型,选择合适的类型,并填写相关信息,此处我们选择的是【机器】类型,也就是服务器的登陆信息,可以账号密码/密钥,非root的账号还提供了sudo相关的配置,如下图,填写信息后保存。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第5张图片

  • 创建项目

    Ansible Tower中定义的项目,类似于一个ansible playbook的库,SCM(source code management)类型支持,手动、Git、SVN等5种类型,选择不同的类型,按要求填写信息。

    此处我们选择手动,也就是把Ansible playbook的库放在系统的执行目录里面,默认情况下在/var/lib/awx/projects,所以我们需要到提供的/var/lib/awx/projects下创建playbook目录,及测试的yaml文件,配置如下:

    [root@10-20-3-151 projects]# cd /var/lib/awx/projects/
    [root@10-20-3-151 projects]# mkdir sample-project/
    [root@10-20-3-151 projects]# cd sample-project/
    [root@10-20-3-151 sample-project]# cat hello-word.yaml
    - name: Hello World Sample
    hosts: all
    tasks:
       - name: Hello Message
        debug:
          msg: "Hello World!"
    

    创建完成后,在左侧导航栏中选择【项目】,在最右侧,点击 + 号,按如下内容填写,并保存。

· 创建清单

Ansible Tower中的清单,类似一个hosts文件,其中定义了一个主机信息。在左侧导航栏中选择【清单】,在最右侧,点击 + 号,可以选择清单和智能清单,区别是智能清单可以通过模糊搜索将其他清单中的主机,加入直接加入进来:

此处,我们选择清单,如下进行配置,并保存:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第6张图片

保存之后,点击上图的主机标签,在最右侧,点击 + 号,添加主机信息;添加完成后,如下图所示:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第7张图片

· 创建模板

Ansible Tower中通过模板,把清单、项目、Playbook、凭证进行了统一的关联,在左侧导航栏中选择【模板】,在最右侧,点击 + 号,可以选择【作业模板】和【工作流模板】:

此处选择作业模板,按下图内容进行配置,配置完成后点击保存。

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第8张图片

· 启动模板

模板保存之后,可以直接启动模板,在左侧导航栏中选择【模板】,点击启动:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第9张图片

执行的结果如下图:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第10张图片

按上面的步骤操作,可以完成一个基本的Ansible任务的运行。

当然Ansible Tower的功能远不止这些,比如它可以创建工作流、可以进行很细的权限配置、Playbook支持tag,主机清单支持分组、Playbook可以放在自建的Gitlab中等等,这些在本篇中就不介绍了,感兴趣的可以自己研究一下。

Ansible AWX

Ansible AWX是Ansible Tower的开源版本,它是免费的,所以在版本和功能方面要激进一些,部署方式也采用了docker-compose方式,想体验Ansible AWX的朋友,可以跟着下面的文档进行操作。

Step1: 环境准备

系统:Ubuntu 20.04.1 LTS
配置:2核4G或更高
硬盘:50G+

Step2: 更新系统

sudo apt update && sudo apt -y upgrade
sudo reboot

Step3: 安装Ansible

sudo apt install ansible
root@tiops:~# ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.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.2 (default, Jul 16 2020, 14:00:26) [GCC 9.3.0]

Step4: 安装Docker及Docker Compose

#安装依赖
sudo apt -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
#清理旧版本的docker
apt remove docker docker-engine docker.io containerd runc
#导入安装源证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#添加docker安装源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
#刷新安装源
apt update
#安装docker
apt install docker-ce docker-ce-cli containerd.io curl
#显示docker版本
docker --version
Docker version 19.03.12, build 48a66213f
#下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#显示docker-compose版本
docker-compose version
docker-compose version 1.26.2, build unknown
docker-py version: 4.3.0
CPython version: 3.8.2
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020

Step5: 安装Nodejs和NPM

sudo apt install -y nodejs npm
sudo npm install npm --global

Step6: 安装Ansible AWX

#安装docker相关的python库
sudo apt install python3-pip git pwgen vim
sudo pip3 install requests==2.14.2

#clone awx的代码
git clone --depth 50 https://github.com/ansible/awx.git
#进入awx目录
cd awx/installer/
#创建一个AWX 的secret key
pwgen -N 1 -s 30
2fCkx2K5GnIjBz4OterhOC3ey0WPd

编辑/root/awx/installer/inventory文件内容如下:

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"

[all:vars]
dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir=/tmp/pgdocker
host_port=80
host_port_ssl=443
docker_compose_dir=/tmp/awxcompose
pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432
rabbitmq_password=awxpass
rabbitmq_erlang_cookie=cookiemonster
admin_user=admin
admin_password=StrongAdminpassword
create_preload_data=True
secret_key=2fCkx2K5GnIjBz4OterhOC3ey0WPdj
project_data_dir=/tmp/project

执行安装命令:

ansible-playbook -i inventory install.yml

安装过程没有报错的话,那恭喜你安装成功了,使用docker ps看一下运行中容器

Step7: 登录Ansible AWX

安装完成之后,可以在浏览器中配置输入 https://ip,访问Ansible AWX:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第11张图片

账号密码是配置文件中定义的admin_user和admin_password字段,此处定义的是admin和StrongAdminpassword:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第12张图片

登录成功,界面和Ansible Tower差不多,功能和使用方法也类似,就不再重复了。

Semaphore

semaphore是一个开源的Ansible UI,Gitbub地址:https://github.com/ansible-semaphore/semaphore 。目前在github上有3.4k的start,比较遗憾的是semaphore项目目前几乎没人维护了,但是在Ansible UI这块,除了官方的Ansible Tower之后,它也算是比较有名的,所以本篇也把它介绍一下。

Step1: 环境准备

系统:CentOS Linux release 7.6.1810 (Core)
配置:2核4G或更高
硬盘:50G+

Step2: 安装Mariadb并进行初始化

#安装mariadb-server
yum install mariadb-server
#启动mariadb
systemctl start mariadb
#查看mariadb状态,如果是running,说明安装完成了
systemctl status mariadb
#查看mariadb版本,默认yum直接安装是5.5
mysql -V
mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.

使用mysql_secure_installation命令初始化mariadb,会出现提示信息,按提示输入即可

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
    SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
#默认安装完没有密码,直接按enter即可
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
#输入y,设置root密码
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
#输入y,删除anonymous users
Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
#输入y,因为本次测试,应用和数据库在一台机器上,所以可以关闭root远程登录权限
Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
#输入y,删除test数据库
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
#输入y,刷新数据库权限
Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
#完成mariadb初始化

数据库权限初始化完成后,输入mysql -p 回车,输入刚才设置密码,正常情况,就能登录数据库了。

Step3: 安装git和ansible

yum install git
#git version,查看git版本
git version 1.8.3.1
#安装ansible
sudo yum -y install epel-release
sudo yum -y install ansible
# ansible --version
ansible 2.9.10
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Step4: 下载并安装Semaphore

在https://github.com/ansible-semaphore/semaphore/releases 地址中,找到最新版相应平台的安装包,并下载

wget https://github.com/ansible-semaphore/semaphore/releases/download/v2.5.1/semaphore_2.5.1_linux_amd64.rpm
# rpm -ivh semaphore_2.5.1_linux_amd64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
  1:semaphore-2.5.1-1                ################################# [100%]
# semaphore -version
v2.5.1

Step5: 初始配置Semaphore

运行semaphore -setup进行配置

Hello! You will now be guided through a setup to:

1. Set up configuration for a MySQL/MariaDB database
2. Set up a path for your playbooks (auto-created)
3. Run database Migrations
4. Set up initial semaphore user & password

> DB Hostname (default 127.0.0.1:3306):127.0.0.1:3306
> DB User (default root):root
> DB Password: password
> DB Name (default semaphore):semaphore
> Playbook path (default /tmp/semaphore):
> Web root URL (optional, example http://localhost:8010/): http://10.20.3.152:8081
> Enable email alerts (y/n, default n):n
> Enable telegram alerts (y/n, default n):n
> Enable LDAP authentication (y/n, default n):n
Generated configuration:
{
       "mysql": {
               "host": "127.0.0.1:3306",
               "user": "root",
               "pass": "password",
               "name": "semaphore"
      },
       "port": "",
       "tmp_path": "/tmp/semaphore",
       "cookie_hash": "nsXTGAjAwG0oU6pkqVmPT/KpURAki3UiMOoO2RBzvhk=",
       "cookie_encryption": "aKac+rNKJU1kf0IcjC8FDFrGGQZgWkVE+R8d7YH9OLE=",
       "email_sender": "",
       "email_host": "",
       "email_port": "",
       "web_host": "http://10.20.3.152:8081",
       "ldap_binddn": "",
       "ldap_bindpassword": "",
       "ldap_server": "",
       "ldap_searchdn": "",
       "ldap_searchfilter": "",
       "ldap_mappings": {
               "dn": "",
               "mail": "",
               "uid": "",
               "cn": ""
      },
       "telegram_chat": "",
       "telegram_token": "",
       "concurrency_mode": "",
       "max_parallel_tasks": 0,
       "email_alert": false,
       "telegram_alert": false,
       "ldap_enable": false,
       "ldap_needtls": false
}
#配置确认,没问题按y即可
> Is this correct? (yes/no): y
> Config output directory (default /root):/root
Configuration written to /root/config.json..
Pinging db..

Running DB Migrations..
Checking DB migrations
Creating migrations table
Executing migration v0.0.0 (at 2020-09-02 10:11:26.686649426 +0800 CST m=+63.197184158)...
[11/11]
Executing migration v1.0.0 (at 2020-09-02 10:11:26.723548351 +0800 CST m=+63.234083061)...
[7/7]
Executing migration v1.1.0 (at 2020-09-02 10:11:26.75702072 +0800 CST m=+63.267555438)...
[1/1]
Executing migration v1.2.0 (at 2020-09-02 10:11:26.762418051 +0800 CST m=+63.272952743)...
[1/1]
Executing migration v1.3.0 (at 2020-09-02 10:11:26.765752117 +0800 CST m=+63.276286844)...
[3/3]
Executing migration v1.4.0 (at 2020-09-02 10:11:26.779036757 +0800 CST m=+63.289571477)...
[2/2]
Executing migration v1.5.0 (at 2020-09-02 10:11:26.786357184 +0800 CST m=+63.296891945)...
[1/1]
Executing migration v0.1.0 (at 2020-09-02 10:11:26.789554596 +0800 CST m=+63.300089308)...
[6/6]
Executing migration v1.6.0 (at 2020-09-02 10:11:26.805381148 +0800 CST m=+63.315915870)...
[4/4]
Executing migration v1.7.0 (at 2020-09-02 10:11:26.8229443 +0800 CST m=+63.333479005)...
[1/1]
Executing migration v1.8.0 (at 2020-09-02 10:11:26.828252977 +0800 CST m=+63.338787701)...
[2/2]
Executing migration v1.9.0 (at 2020-09-02 10:11:26.833757379 +0800 CST m=+63.344292109)...
[2/2]
Executing migration v2.2.1 (at 2020-09-02 10:11:26.838939884 +0800 CST m=+63.349474603)...
[2/2]
Executing migration v2.3.0 (at 2020-09-02 10:11:26.846996333 +0800 CST m=+63.357531046)...
[3/3]
Executing migration v2.3.1 (at 2020-09-02 10:11:26.859823289 +0800 CST m=+63.370358007)...
[1/1]
Executing migration v2.3.2 (at 2020-09-02 10:11:26.864990001 +0800 CST m=+63.375524716)...
[1/1]
Executing migration v2.4.0 (at 2020-09-02 10:11:26.870065072 +0800 CST m=+63.380599806)...
[1/1]
Executing migration v2.5.0 (at 2020-09-02 10:11:26.873969073 +0800 CST m=+63.384503770)...
[1/1]
Migrations Finished
#看到如上信息,表示配置,下面开始设置第一个账号和密码
> Username: [email protected]
> Email: [email protected]
WARN[0494] sql: no rows in result set                    level=Warn
> Your name: yunwei
> Password: password
You are all setup yunwei!
Re-launch this program pointing to the configuration file

./semaphore -config /root/config.json

To run as daemon:

nohup ./semaphore -config /root/config.json &

You can login with [email protected] or [email protected].
#配置完成

Step6: 将Semaphore配置为systemd服务

创建/etc/systemd/system/semaphore.service文件内容如下

[Unit]
Description=Semaphore Ansible UI
Documentation=https://github.com/ansible-semaphore/semaphore
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/bin/semaphore -config /etc/semaphore/config.json
SyslogIdentifier=semaphore
Restart=always

[Install]
WantedBy=multi-user.target

创建/etc/semaphore目录,并将配置文件拷贝过去

mkdir /etc/semaphore
cp /root/config.json /etc/semaphore/config.json

启动Semaphore服务

systemctl daemon-reload
systemctl start semaphore
#查看Semaphore状态,如果正常semphore就安装完成了
systemctl status semaphor

Step7: 登录Semaphore

如果你的系统中启动了iptables,需要添加一下策略来运行semaphore:

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

放行之后,在浏览器访问http://ip:3000  ,使用初始化时候设置的用户名和密码,此处我配置的用户名是yunwei@tyun  密码:password

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第13张图片

登录完成,界面非常简洁,默认什么都没有 ,接下来,我们就从创建project开始:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第14张图片

Step8: 实例演示

Semaphore使用的步骤如下:

创建项目  >> 创建Key >> 在Github中创建playbook的库  >> 在Semaphore中创建playbook仓库 >> 创建Inventory清单 >> 创建任务模板 >> 执行任务模板。

下面开始逐一介绍,如何配置。

  • 首页点击右侧 + 号,创建项目:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第15张图片

  • 创建完成后,点击进入【演示项目】,可以进入项目详情,主要包括Dashboard、Task Template、Inventory、Environment、Key Store、Playbook Prepositories、Team,下面会介绍如何从头开始创建一个ansible任务。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第16张图片

  • 点击左侧【Key Store】,右侧  create key,创建一个key,Semaphore支持创建四类key,SSH Key:用于主机登录,或者gitlab;AWS IAM credentials,Google Cloud API Key,DigitalOcean API Key,这些key用于平台的API接口。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第17张图片

    举例,添加一个github的key,首先需要登录自己的github账号,登录之后,点击右上角用户,【settings】,【New SSH Key】;

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第18张图片

    输入公钥并保存,(公钥和私钥的生成可以在linux系统中使用ssh-keygen 命令来创建,默认创建完会有两个文件公钥文件:id_rsa.pub和私钥文件:id_rsa)。github公钥添加完成后,我们还需要在github中创建一个仓库,点击右上角New repository创建一个新仓库;

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第19张图片

    填写仓库名称,选择私有仓库类型,点击【Create repository】创建仓库:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第20张图片

    GitHub上仓库和SSH Keys都创建好了,我们回到Semaphore平台,点击左侧【Key Store】,右上角【Create Key】,将之前生成的公钥/私钥复制过来,并点击Create。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第21张图片

    创建完成后,可以看到如下图所示的信息:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第22张图片

  • 点击左侧【Playbook Repositories】菜单创建playbook库,再点击右上角【create repository】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第23张图片

在【create repository】弹出框中填写仓库信息,如下图,Name可以随便取,Repository是刚才Github上新建的库地址,SSH Key是【Key Store】中创建的SSH Key;填写完毕,点击【create】:

 一文学会主流Ansible Web UI的部署与使用 | 万字长文_第24张图片

创建完Playbook Repository之后,我们需要创建Inventory清单。在清单中会定义主机信息:

  • 点击左侧【Inventory】菜单,在最上方有一个【create Inventory】按钮可以创建主机清单,但是在这之前,我们还需要再创建一个个用于被管理主机SSH登录的key。

    方法很简单,1. 使用 ssh-keygen生成新的key;2.将公钥放到被管理主机的 /root/.ssh/authorized_keys文件中;3. 在Semaphore平台Key Store中添加SSH key,命名为Root-hostkey:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第25张图片

    创建完主机登录SSH key之后,可以开始创建Inventory了,点击【create Inventory】按钮,Type选择Static,SSH Key选择刚才创建的Root-hostkey:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第26张图片

    创建完成后,如下图:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第27张图片

    点开【edit inventory content】来编辑清单中的主机:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第28张图片

    清单创建,完成之后,我们开始创建Task Templates任务模板。

  • 点击左侧【Task Templates】来创建任务模板,如下图,点击【new template】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第29张图片

    点击【new template】,按下图信息填写,SSH Key、Inventory、Playbook Repository 这些都是在上面定义的,主要注意两点:一是,Playbook Name,这里填写的是具体的playbook文件名,需要确保这个文件已经上传到了github 仓库中。二是,当前的Semaphore版本中SSH Key这项存在一个BUG,这个Key本身是用于访问GitHub的,但实际不生效,需要将github的私钥放到安装Semaphore主机的/root/.ssh/id_rsa 中

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第30张图片

    Task Templates模板创建完成之后,就可以开始执行了。

  • 点击任务右侧的【run】按钮:

    弹出框中有两种运行方式,【dry run】不实际执行和【run】实际执行:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第31张图片

    点击run之后,可以看到详细的输出,任务执行成功。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第32张图片

TiOps

TiOps国内知名的多云管理运维平台,它的任务编排支持Ansible任务,下面也来安装体验一下。

Step1: 获取TiOps

有两种方法可以获取TiOps:

第一,从官方https://www.tyun.cn  -> TiOps -> 免费下载 入口进入 ,填写邮箱选择版本后,点击立即申请,稍后软件下载链接和授予License会自动发到你填写的邮箱中:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第33张图片

第二、在公众号后面直接回复,【测试体验】,管理员会联系您,给您安装包和授予License:

主要注意,这两种方法获取TiOps,第一种,获取的TiOps版本非最新版 ,第二种,可以获得最新发布版本。

Step2: 环境准备

系统:CentOS Linux release 7.6.1810 (Core)
配置:4核8G或更高
硬盘:50G+

Step3: 安装TiOps

#将安装包放在/root目录下
[root@10-20-3-154 ~]# ls
anaconda-ks.cfg  tiops-install-allinone-release-v6.0.tar.gz
#解压并进入目录
[root@10-20-3-154 ~]# tar zxf tiops-install-allinone-release-v6.0.tar.gz
[root@10-20-3-154 ~]# cd tiops-install-allinone-release-v6.0
[root@10-20-3-154 tiops-install-allinone-release-v6.0]# ls
config-files  db  functions  install.sh  packages  README.md  src  tools  util
#执行执行install.sh 进行安装,安装的时间与网速有关系,一般在10分钟左右
[root@10-20-3-154 ~]# ./install.sh

需要注意,在安装过程中,以下截图这个步骤可能需要等待3-5分钟,你不需要做任何操作,静静的等待即可。

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第34张图片

安装完后后,你会看到以下截图的提示:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第35张图片

Step4: 初始化TiOps

根据安装结束时的提示,访问http://ip ,开始TiOps初始化,被授予人/公司,可以写公司名或者个人姓名都可以,授权密钥,如果是通过官网下载的话,下载地址和密钥都在邮件里面:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第36张图片

输入之后,点下一步,设置 邮件服务器:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第37张图片

邮件服务器的配置,此处先【跳过配置】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第38张图片

点击之后,会出现一个提示 ,告诉你邮件服务器的作用是什么,继续点击【跳过】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第39张图片

短信服务配置,我们继续点击【跳过配置】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第40张图片

点击之后,同样会出来一个提示,大概说了短信配置的用途,咱继续点击【跳过】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第41张图片

展示堡垒机信息,重点看IP地址,如果你安装的主机有多个IP地址,这里显示的不是你希望监听的IP,可以点击编辑进行修改,一般情况下不需要修改,直接点击【下一步】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第42张图片

因为TiOps有堡垒机的功能,这边选择录像存放在哪里,点击【下一步】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第43张图片

创建租户管理员账号和密码,然后点击【完成】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第44张图片

显示当前系统的超级管理员密码,这个需要保存下来,后续系统级别的一些操作会需要使用admin用户。

Step5: 登录Tiops

初始化就完成了,点击【登录】,进入登录页面:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第45张图片

登录成功后进入主页:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第46张图片

Step6: 实例演示

TiOps的使用步骤如下:

导入资源 >> 分配业务树 >>绑定登录信息 >>创建Ansible库>>创建Inventory清单 >>创建Ansible任务 >>执行任务。

创建云账号并导入资源

点击左侧多云管理菜单,选择云账号:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第47张图片

TiOps支持导入,公有云(AWS、Azure、阿里云、腾讯云、百度云、华为云、金山云、Ucloud、青云)、私有云(VMware、Openstack、Zstack)、局域网,三大类的云主机,公有云和私有云都通过接口的方式导入,局域网只要网络可达即可导入:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第48张图片

点击,【导入局域网】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第49张图片

设置网络名称,点击【下一步 】:

一文学会主流Ansible Web UI的部署与使用 | 万字长文_第50张图片

局域网支持两种模式,一种是直连,简单的理解就是被管理的主机与TiOps平台可以直接连通;二是通过网关助手,这种情况下被管理的主机和TiOps平台不通,需要通过网关助手作为代理才能连通。本次测试选择使用IP直连方式,点击【下一步】,完成云账号创建,下面开始导入资源:

  • 导入主机

    在云账号详情中,点击右侧同步按钮,下拉选择【同步主机】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第51张图片

    选择【直接以IP方式导入】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第52张图片

    输入扫描的地址段:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第53张图片

    点击【下一步】会将该网段中通的主机都列出来,选择需要导入的主机,点击【导入】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第54张图片

    导入的主机在左侧菜单栏【多云管理】--【云主机】里面:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第55张图片

  • 创建业务树,并分配主机

    左侧菜单栏【业务树管理】,点击 + 号,创建公司,点击确定:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第56张图片

    创建完公司之后,开始新建子节点:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第57张图片

    如下图,创建完节点之后,我们开始导入局域网主机,点击【局域网】--【分配局域网主机】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第58张图片

    选择主机,点击确定,完成主机分配到业务树的操作:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第59张图片

  • 绑定登录信息

    这步操作是为主机绑定一个账号密码/密钥,这个账号密码/密钥用于登陆主机,或者执行Ansible任务时使用。

    点击左侧菜单栏【系统设置】-- 【主机登录信息】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第60张图片

    点击【新建登录信息】,根据要求填写登录信息,并点击【创建】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第61张图片

    登录信息创建完成之后,我们可以将它和主机进行绑定,如下图,可以关联部分主机,也可以关联全部主机:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第62张图片

    点击【添加主机】,选择已经绑定到业务树的主机,并点击【添加】完成绑定,注意,已经绑定本凭证,或者未分配到业务树的主机不能绑定凭证。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第63张图片

  • 创建Ansible库

    点击左侧菜单栏【脚本库】--【Ansible库】,支持创建Role和创建Playbook,同时还支持直接导入:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第64张图片

    此处演示选择创建Playbook,配置脚本名称,描述,同时也可以直接上传已经写好的playbook,点击【确定】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第65张图片

    创建playbook之后,点击【查看】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第66张图片

    可以看到playbook中定义的内容,并对它进行编辑:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第67张图片

    编辑,保存之后,点击【发布脚本】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第68张图片

    发布的时候需要填写发布版本的信息,然后点击确定,主要注意只有发布后的Ansible脚本才能被Ansible任务使用。

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第69张图片

    Ansible脚本库创建完成之后,开始进入清单的创建。

  • 创建Inventory清单

    在点击左侧菜单栏【运维管理】--【Ansible】-- 【Inventories】,选择创建Hosts:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第70张图片

    选择【创建Hosts】,填写Hosts名称,并点击【确定】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第71张图片

    添加好Hosts之后,我们需要往里面添加具体的主机,如下图,点击【查看】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第72张图片

    在详情页中,点击【添加主机】,可以通过业务树、模糊搜索、精确搜索等方式,找到主机,选择主机,点击【添加】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第73张图片

    Inventory清单配置完成之后,我们就可以开始创建Ansible任务了。

  • 创建Ansible任务

    在左侧菜单栏,点击【运维管理】--【Ansible】--【Ansible任务】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第74张图片

    点击【创建任务】,填写任务名称,点击【确定】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第75张图片

    任务创建完成后,会自动到该任务的详情页,点击【添加】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第76张图片

    点击【添加】之后,会自动罗列Ansible库中的Playbook或Roles:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第77张图片

    选择之前创建了Playbook和发布的版本,点击【下一步】,会显示具体的脚本名称,选中并点击【确定】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第78张图片

    任务添加完成之后,还需要【加载Hosts】,也就是需要执行,这个Playbook在哪些机器上执行,和之前定义的Inventory进行关联:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第79张图片

    选择Host组,点击【确定】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第80张图片

    任务和Host组都配置好之后,可以开始执行Ansible任务了,点击【立即执行】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第81张图片

    此时会跳到执行页面,点击【运行任务】:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第82张图片

    支持完成如下图:

    一文学会主流Ansible Web UI的部署与使用 | 万字长文_第83张图片


综合比较

上面介绍的四个Ansible UI,如何安装部署和如何使用,下面就来进行比较,看看各有什么优缺点:


Ansible Tower Ansible AWX Semaphore TiOps
安装简易度 ☆☆☆☆☆ ☆☆☆☆☆ ☆☆☆☆ ☆☆☆☆☆
playbook是否支持github
Ansible  Roles的支持度 ☆☆ ☆☆
☆☆☆
修改playbook是否不影响已有任务


是否支持在线编辑Playbook


Inventory中主机使用不同的登录信息的支持度 ☆☆☆ ☆☆☆
☆☆☆☆
Hosts导入便捷程度 ☆☆☆ ☆☆☆ ☆☆☆ ☆☆
主机权限管控是否严格


总得分 14 14 8 17

(向左滑动查看更多)

评分说明:

  1. 安装简易度

    Ansible Tower和AWX只需要配置Inventory,然后通过ansible来完成一键安装,TiOps安装包中包含install.sh无需做任务配置,直接执行即可完成安装;Semaphore需要先手动安装mysql,还要生成配置文件,中间需要多次交互,给安装带来了麻烦,所以在安装简易度这项,Ansible Tower/AWX ,TiOps都得5分,Semaphore 得4分
    
  2. playbook是否支持github

    这个和设计思路有关系,Ansible Tower/AWX 和Semaphore 都是将playbook的内容,放到github上来托管 ,在平台上无法编辑和创建playbook任务,他们本身只充当执行任务的角色;TiOps则是把所有的playbook任务也统一纳管了起来。所以这一项,TiOps不得分。
    
  3. Ansible  Roles的支持度

    Ansible Roles是非常强大的,它可以定义复杂的Ansible任务,因为单个playbook,存在很多的局限性,所以支持Ansible Roles非常有必要;对于这块Ansible Tower/AWX 可以支持,但并不友好,Semaphore则不支持;TiOps支持非常好,可以编辑,修改,一个roles里面可以定义多个任务,支持大文件上传,文件预览等等,几乎覆盖所有roles的使用场景,所以这项,Ansible Tower/AWX得2分,TiOps得4分。
    
  4. 修改playbook是否影响已有任务

    对于一些固化的任务,比如业务更新,环境部署,代码发布等场景,我们需要固化playbook,如果由于编辑修改了某个playbook,而导致之前引用它的任务运行不正常,这个是有风险的,所以在这块,Ansible Tower/AWX和Semaphore都做的不好,无法锁定办法,因为他们配置的是github中的一个分支,只要分支内容被改变,执行的任何就会被改变;这种情况在TiOps中不会出现,因为TiOps Ansible脚本库是内部维护的,每个任务只关联发布后的版本,每次变更都需要重新发布,虽然略有繁琐,但是可以保证已有的任务,不会受变更的影响。所以,这项只有TiOps得1分。
    
  5. 是否支持在线编辑Playbook

    这个和设计思路有关系,Ansible Tower/AWX 和Semaphore 都是将playbook的内容,放到github上来托管 ,在平台上无法编辑和创建playbook任务,他们本身只充当执行任务的角色;TiOps则是把所有的playbook任务也统一纳管了起来。所以这一项,只有TiOps得分。
    
  6. Inventory中主机使用不同的登录信息的支持度

    批量执行任务,这是Ansible擅长的,但是如果这批机器的账号密码都不一样,或者这批机器使用的都是不同的密钥呢?这种情况下,使用Ansible Tower/AWX和Semaphore就很费劲了,一个办法是直接在Inventory中定义Hosts时直接指定,但这样不安全,会直接暴露账号密码;TiOps因为本身自带堡垒机功能,所以权限管控做的比较好,主机和凭证是可以自由绑定的,所以在这种场景下,TiOps可以很好的支持Inventory中主机登录信息不同的问题,因此这项评分Ansible Tower/AWX 3分,Semaphore 0分,TiOps 5分
    
  7. Hosts导入便捷程度

    Ansible Tower/AWX 在创建Inventory中添加主机,可以一台一台加,也可以通过tower-manage来导入,同时也支持主流公有云的导入;Semaphore主机导入可以直接编辑Host文件,完全自由。TiOps支持公有云、私有云、局域网导入,然后分配业务树,在添加主机。相比之下,Ansible Tower/AWX,Semaphore更加便捷,得3分,TiOps较为繁琐得2分;
    
  8. 主机权限管控是否严格

    Ansible Tower/AWX,Semaphore 在这块做的比较松,通过在Inventory中任意添加,删除主机,管理员无法管控这部分权限;相比之下TiOps具有一套严格的授权系统,从主机到业务树,到登录凭证都可以精确授权,如果某个用户没有该主机的权限,那么在编辑Inventory时是绝对不可能选到这台主机并上去执行Ansible任务的。所以这项中只有TiOps得1分
    

如何推荐

本篇介绍了四个Ansible UI 平台,Ansible AWX和Semaphore是开源的平台,相比Semaphore功能更加简单,同时社区已经不在维护了,所以如果定位是选一个开源的Ansible UI,推荐使用Ansible AWX。

Ansible Tower和TiOps都是商业软件,Ansible Tower是Ansible官方出品,从品牌影响力来看Ansible Tower更有优势,TiOps是新钛云服出品的多云运维管理平台,结合了多云管理,堡垒机和运维平台一起,提供了从资产管理、审计、自动化运维等多项功能,同时托管式的Ansible库,在线编辑等,都可以给用户提供所见即所得的体验,所以从功能丰富和易上手角度,TiOps会略胜一筹。

再说服务,Ansible Tower 通过购买License和服务的方式,遇到问题可以提工单寻求技术支持,对于个性化需求,基本上是不会给你定制开发的,而TiOps对于每一位客户都会提供专门的技术顾问,随时收集用户需求,及时迭代,不断满足客户需求;总体来说 ,各有优缺点,如何选择,还要根据自己的实际情况进行选择。

了解新钛云服

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

你可能感兴趣的:(运维,docker,java,github,devops)