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:
输入用户admin,密码是Step4中配置的AdminPassword,输入后出现如下提示你输入License,购买的了的话,直接输入即可,没有购买的话可以自行百度或者留言获取操作方法:
输入license之后,再次登录Ansible Tower,界面如下图,默认会有一台主机,这台是安装Ansible Tower的主机:
Step6: 实例演示
安装完成之后,Ansible Tower会创建一些默认的配置,我们可以作为列子来参考,当然也可以重新创建,本篇就以全部新建来做演示。
Ansible Tower使用的步骤如下:
创建机构 >> 创建凭证 >>创建项目 >> 创建清单 >> 创建模板 >>启动模板
下面就来逐一介绍如何配置。
创建一个机构
Ansible Tower中机构可以理解为公司,机构由用户、团队、清单、项目、作业模板、管理员,6块组成。
在左侧导航中选择【机构】,在最右侧,点击 + 号按钮,添加机构,填写信息后点击保存:
创建凭证
在左侧导航中选择【凭证】,在最右侧,点击 + 号按钮,添加凭证,Ansible Tower支持22种凭证类型,选择合适的类型,并填写相关信息,此处我们选择的是【机器】类型,也就是服务器的登陆信息,可以账号密码/密钥,非root的账号还提供了sudo相关的配置,如下图,填写信息后保存。
创建项目
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 Tower中通过模板,把清单、项目、Playbook、凭证进行了统一的关联,在左侧导航栏中选择【模板】,在最右侧,点击 + 号,可以选择【作业模板】和【工作流模板】:
此处选择作业模板,按下图内容进行配置,配置完成后点击保存。
· 启动模板
模板保存之后,可以直接启动模板,在左侧导航栏中选择【模板】,点击启动:
执行的结果如下图:
按上面的步骤操作,可以完成一个基本的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:
账号密码是配置文件中定义的admin_user和admin_password字段,此处定义的是admin和StrongAdminpassword:
登录成功,界面和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: yunwei@tyun.cn
-
> Email: yunwei@tyun.cn
-
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 yunwei@tyun.cn
or yunwei@tyun.cn.
-
#配置完成
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
登录完成,界面非常简洁,默认什么都没有 ,接下来,我们就从创建project开始:
Step8: 实例演示
Semaphore使用的步骤如下:
创建项目 >> 创建Key >> 在Github中创建playbook的库 >> 在Semaphore中创建playbook仓库 >> 创建Inventory清单 >> 创建任务模板 >> 执行任务模板。
下面开始逐一介绍,如何配置。
首页点击右侧 + 号,创建项目:
创建完成后,点击进入【演示项目】,可以进入项目详情,主要包括Dashboard、Task Template、Inventory、Environment、Key Store、Playbook Prepositories、Team,下面会介绍如何从头开始创建一个ansible任务。
点击左侧【Key Store】,右侧 create key,创建一个key,Semaphore支持创建四类key,SSH Key:用于主机登录,或者gitlab;AWS IAM credentials,Google Cloud API Key,DigitalOcean API Key,这些key用于平台的API接口。
举例,添加一个github的key,首先需要登录自己的github账号,登录之后,点击右上角用户,【settings】,【New SSH Key】;
输入公钥并保存,(公钥和私钥的生成可以在linux系统中使用ssh-keygen 命令来创建,默认创建完会有两个文件公钥文件:id_rsa.pub和私钥文件:id_rsa)。github公钥添加完成后,我们还需要在github中创建一个仓库,点击右上角New repository创建一个新仓库;
填写仓库名称,选择私有仓库类型,点击【Create repository】创建仓库:
GitHub上仓库和SSH Keys都创建好了,我们回到Semaphore平台,点击左侧【Key Store】,右上角【Create Key】,将之前生成的公钥/私钥复制过来,并点击Create。
创建完成后,可以看到如下图所示的信息:
点击左侧【Playbook Repositories】菜单创建playbook库,再点击右上角【create repository】:
在【create repository】弹出框中填写仓库信息,如下图,Name可以随便取,Repository是刚才Github上新建的库地址,SSH Key是【Key Store】中创建的SSH Key;填写完毕,点击【create】:
创建完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:
创建完主机登录SSH key之后,可以开始创建Inventory了,点击【create Inventory】按钮,Type选择Static,SSH Key选择刚才创建的Root-hostkey:
创建完成后,如下图:
点开【edit inventory content】来编辑清单中的主机:
清单创建,完成之后,我们开始创建Task Templates任务模板。
点击左侧【Task Templates】来创建任务模板,如下图,点击【new template】:
点击【new template】,按下图信息填写,SSH Key、Inventory、Playbook Repository 这些都是在上面定义的,主要注意两点:一是,Playbook Name,这里填写的是具体的playbook文件名,需要确保这个文件已经上传到了github 仓库中。二是,当前的Semaphore版本中SSH Key这项存在一个BUG,这个Key本身是用于访问GitHub的,但实际不生效,需要将github的私钥放到安装Semaphore主机的/root/.ssh/id_rsa 中。
Task Templates模板创建完成之后,就可以开始执行了。
点击任务右侧的【run】按钮:
弹出框中有两种运行方式,【dry run】不实际执行和【run】实际执行:
点击run之后,可以看到详细的输出,任务执行成功。
TiOps
TiOps国内知名的多云管理运维平台,它的任务编排支持Ansible任务,下面也来安装体验一下。
Step1: 获取TiOps
有两种方法可以获取TiOps:
第一,从官方https://www.tyun.cn -> TiOps -> 免费下载 入口进入 ,填写邮箱选择版本后,点击立即申请,稍后软件下载链接和授予License会自动发到你填写的邮箱中:
第二、在公众号后面直接回复,【测试体验】,管理员会联系您,给您安装包和授予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分钟,你不需要做任何操作,静静的等待即可。
安装完后后,你会看到以下截图的提示:
Step4: 初始化TiOps
根据安装结束时的提示,访问http://ip ,开始TiOps初始化,被授予人/公司,可以写公司名或者个人姓名都可以,授权密钥,如果是通过官网下载的话,下载地址和密钥都在邮件里面:
输入之后,点下一步,设置 邮件服务器:
邮件服务器的配置,此处先【跳过配置】:
点击之后,会出现一个提示 ,告诉你邮件服务器的作用是什么,继续点击【跳过】:
短信服务配置,我们继续点击【跳过配置】:
点击之后,同样会出来一个提示,大概说了短信配置的用途,咱继续点击【跳过】:
展示堡垒机信息,重点看IP地址,如果你安装的主机有多个IP地址,这里显示的不是你希望监听的IP,可以点击编辑进行修改,一般情况下不需要修改,直接点击【下一步】:
因为TiOps有堡垒机的功能,这边选择录像存放在哪里,点击【下一步】:
创建租户管理员账号和密码,然后点击【完成】:
显示当前系统的超级管理员密码,这个需要保存下来,后续系统级别的一些操作会需要使用admin用户。
Step5: 登录Tiops
初始化就完成了,点击【登录】,进入登录页面:
登录成功后进入主页:
Step6: 实例演示
TiOps的使用步骤如下:
导入资源 >> 分配业务树 >>绑定登录信息 >>创建Ansible库>>创建Inventory清单 >>创建Ansible任务 >>执行任务。
创建云账号并导入资源
点击左侧多云管理菜单,选择云账号:
TiOps支持导入,公有云(AWS、Azure、阿里云、腾讯云、百度云、华为云、金山云、Ucloud、青云)、私有云(VMware、Openstack、Zstack)、局域网,三大类的云主机,公有云和私有云都通过接口的方式导入,局域网只要网络可达即可导入:
点击,【导入局域网】:
设置网络名称,点击【下一步 】:
局域网支持两种模式,一种是直连,简单的理解就是被管理的主机与TiOps平台可以直接连通;二是通过网关助手,这种情况下被管理的主机和TiOps平台不通,需要通过网关助手作为代理才能连通。本次测试选择使用IP直连方式,点击【下一步】,完成云账号创建,下面开始导入资源:
导入主机
在云账号详情中,点击右侧同步按钮,下拉选择【同步主机】:
选择【直接以IP方式导入】:
输入扫描的地址段:
点击【下一步】会将该网段中通的主机都列出来,选择需要导入的主机,点击【导入】:
导入的主机在左侧菜单栏【多云管理】--【云主机】里面:
创建业务树,并分配主机
左侧菜单栏【业务树管理】,点击 + 号,创建公司,点击确定:
创建完公司之后,开始新建子节点:
如下图,创建完节点之后,我们开始导入局域网主机,点击【局域网】--【分配局域网主机】:
选择主机,点击确定,完成主机分配到业务树的操作:
绑定登录信息
这步操作是为主机绑定一个账号密码/密钥,这个账号密码/密钥用于登陆主机,或者执行Ansible任务时使用。
点击左侧菜单栏【系统设置】-- 【主机登录信息】:
点击【新建登录信息】,根据要求填写登录信息,并点击【创建】:
登录信息创建完成之后,我们可以将它和主机进行绑定,如下图,可以关联部分主机,也可以关联全部主机:
点击【添加主机】,选择已经绑定到业务树的主机,并点击【添加】完成绑定,注意,已经绑定本凭证,或者未分配到业务树的主机不能绑定凭证。
创建Ansible库
点击左侧菜单栏【脚本库】--【Ansible库】,支持创建Role和创建Playbook,同时还支持直接导入:
此处演示选择创建Playbook,配置脚本名称,描述,同时也可以直接上传已经写好的playbook,点击【确定】:
创建playbook之后,点击【查看】:
可以看到playbook中定义的内容,并对它进行编辑:
编辑,保存之后,点击【发布脚本】:
发布的时候需要填写发布版本的信息,然后点击确定,主要注意只有发布后的Ansible脚本才能被Ansible任务使用。
Ansible脚本库创建完成之后,开始进入清单的创建。
创建Inventory清单
在点击左侧菜单栏【运维管理】--【Ansible】-- 【Inventories】,选择创建Hosts:
选择【创建Hosts】,填写Hosts名称,并点击【确定】:
添加好Hosts之后,我们需要往里面添加具体的主机,如下图,点击【查看】:
在详情页中,点击【添加主机】,可以通过业务树、模糊搜索、精确搜索等方式,找到主机,选择主机,点击【添加】:
Inventory清单配置完成之后,我们就可以开始创建Ansible任务了。
创建Ansible任务
在左侧菜单栏,点击【运维管理】--【Ansible】--【Ansible任务】:
点击【创建任务】,填写任务名称,点击【确定】:
任务创建完成后,会自动到该任务的详情页,点击【添加】:
点击【添加】之后,会自动罗列Ansible库中的Playbook或Roles:
选择之前创建了Playbook和发布的版本,点击【下一步】,会显示具体的脚本名称,选中并点击【确定】:
任务添加完成之后,还需要【加载Hosts】,也就是需要执行,这个Playbook在哪些机器上执行,和之前定义的Inventory进行关联:
选择Host组,点击【确定】:
任务和Host组都配置好之后,可以开始执行Ansible任务了,点击【立即执行】:
此时会跳到执行页面,点击【运行任务】:
支持完成如下图:
综合比较
上面介绍的四个Ansible UI,如何安装部署和如何使用,下面就来进行比较,看看各有什么优缺点:
Ansible Tower | Ansible AWX | Semaphore | TiOps | |
---|---|---|---|---|
安装简易度 | ☆☆☆☆☆ | ☆☆☆☆☆ | ☆☆☆☆ | ☆☆☆☆☆ |
playbook是否支持github | ☆ | ☆ | ☆ | |
Ansible Roles的支持度 | ☆☆ | ☆☆ | ☆☆☆ | |
修改playbook是否不影响已有任务 | ☆ | |||
是否支持在线编辑Playbook | ☆ | |||
Inventory中主机使用不同的登录信息的支持度 | ☆☆☆ | ☆☆☆ | ☆☆☆☆ | |
Hosts导入便捷程度 | ☆☆☆ | ☆☆☆ | ☆☆☆ | ☆☆ |
主机权限管控是否严格 | ☆ | |||
总得分 | 14 | 14 | 8 | 17 |
(向左滑动查看更多)
评分说明:
安装简易度
Ansible Tower和AWX只需要配置Inventory,然后通过ansible来完成一键安装,TiOps安装包中包含install.sh无需做任务配置,直接执行即可完成安装;Semaphore需要先手动安装mysql,还要生成配置文件,中间需要多次交互,给安装带来了麻烦,所以在安装简易度这项,Ansible Tower/AWX ,TiOps都得5分,Semaphore 得4分
playbook是否支持github
这个和设计思路有关系,Ansible Tower/AWX 和Semaphore 都是将playbook的内容,放到github上来托管 ,在平台上无法编辑和创建playbook任务,他们本身只充当执行任务的角色;TiOps则是把所有的playbook任务也统一纳管了起来。所以这一项,TiOps不得分。
Ansible Roles的支持度
Ansible Roles是非常强大的,它可以定义复杂的Ansible任务,因为单个playbook,存在很多的局限性,所以支持Ansible Roles非常有必要;对于这块Ansible Tower/AWX 可以支持,但并不友好,Semaphore则不支持;TiOps支持非常好,可以编辑,修改,一个roles里面可以定义多个任务,支持大文件上传,文件预览等等,几乎覆盖所有roles的使用场景,所以这项,Ansible Tower/AWX得2分,TiOps得4分。
修改playbook是否影响已有任务
对于一些固化的任务,比如业务更新,环境部署,代码发布等场景,我们需要固化playbook,如果由于编辑修改了某个playbook,而导致之前引用它的任务运行不正常,这个是有风险的,所以在这块,Ansible Tower/AWX和Semaphore都做的不好,无法锁定办法,因为他们配置的是github中的一个分支,只要分支内容被改变,执行的任何就会被改变;这种情况在TiOps中不会出现,因为TiOps Ansible脚本库是内部维护的,每个任务只关联发布后的版本,每次变更都需要重新发布,虽然略有繁琐,但是可以保证已有的任务,不会受变更的影响。所以,这项只有TiOps得1分。
是否支持在线编辑Playbook
这个和设计思路有关系,Ansible Tower/AWX 和Semaphore 都是将playbook的内容,放到github上来托管 ,在平台上无法编辑和创建playbook任务,他们本身只充当执行任务的角色;TiOps则是把所有的playbook任务也统一纳管了起来。所以这一项,只有TiOps得分。
Inventory中主机使用不同的登录信息的支持度
批量执行任务,这是Ansible擅长的,但是如果这批机器的账号密码都不一样,或者这批机器使用的都是不同的密钥呢?这种情况下,使用Ansible Tower/AWX和Semaphore就很费劲了,一个办法是直接在Inventory中定义Hosts时直接指定,但这样不安全,会直接暴露账号密码;TiOps因为本身自带堡垒机功能,所以权限管控做的比较好,主机和凭证是可以自由绑定的,所以在这种场景下,TiOps可以很好的支持Inventory中主机登录信息不同的问题,因此这项评分Ansible Tower/AWX 3分,Semaphore 0分,TiOps 5分
Hosts导入便捷程度
Ansible Tower/AWX 在创建Inventory中添加主机,可以一台一台加,也可以通过tower-manage来导入,同时也支持主流公有云的导入;Semaphore主机导入可以直接编辑Host文件,完全自由。TiOps支持公有云、私有云、局域网导入,然后分配业务树,在添加主机。相比之下,Ansible Tower/AWX,Semaphore更加便捷,得3分,TiOps较为繁琐得2分;
主机权限管控是否严格
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(含互联网资源协作)牌照
新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁
新钛云服出品的部分精品技术干货
刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
转载:https://blog.csdn.net/NewTyun/article/details/109664826