[適合初學者] 嘗試體驗 Ansible
突然问您一下,您平时使用Ansible吗?随着“基础设施即代码”在社会上变得常见,这项技术不仅对基础设施工程师而且对应用工程师来说也是一项不容错过的技能。
Ansible是一个由Red Hat开发的开源配置管理工具。
它可以将软件安装、命令执行等任务编码并自动化。
有关详细信息,请尝试搜索”Ansible是什么”。
本文将向从未使用过Ansible的人解释从头开始的步骤,并进行演示直至实际执行为止。
目标如下:
- ローカルPC上に仮想マシン(Ubuntu18.04)を2台立ち上げ、1台のマシンからもう1台の仮想マシンに対してnode.jsの自動インストールを行う
图片的感觉就是这样的。
我们马上开始吧!
前提
前提条件包括以下内容。
- ローカルPCはMacOSであること
虽然在Windows上也可以执行这个步骤,但在vagrant周围可能会发生错误。
在这种情况下,您可以通过GUI界面打开VirtualBox应用程序,并手动启动两个虚拟环境,这也是一种解决方法。
将VirtualBox和Vagrant安装在Mac上。
在创建此环境之前,将进行所需软件的安装。
-
- VirtualBox
- vagrant
VirtualBox是创建虚拟机所必需的工具,而vagrant是用于在代码级别操作VirtualBox的工具,请您牢记这一点并没有问题。
安装方法很简单,以下文章非常易懂。
请执行以下步骤:从官方网站上安装VirtualBox。
启动环境和安装Ansible。
完成安装后,即可启动虚拟机。
请创建一个名为 Vagrantfile 的文件,并在清空文件后按照以下方式进行修改。
$ vagrant init
$ ls
Vagrantfile
$ vim Vagrantfile
Vagrant.configure(2) do |config|
config.vm.define "AnsibleServer" do |node|
node.vm.box = "bento/ubuntu-18.04"
node.vm.hostname = "AnsibleServer"
node.vm.network :private_network, ip:"192.168.7.7"
node.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
node.vm.provider "virtualbox" do |vb|
vb.gui = false
end
end
config.vm.define "AnsibleClient" do |node|
node.vm.box = "bento/ubuntu-18.04"
node.vm.hostname = "AnsibleClient"
node.vm.network :private_network, ip:"192.168.8.8"
node.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
node.vm.provider "virtualbox" do |vb|
vb.gui = false
end
end
end
在创建文件完成后,在包含Vagrantfile的目录中执行以下命令。
执行完成后,会启动两个虚拟机。
$ vagrant up
完成无事发生后,让我们登录一次作为服务器端的虚拟机进行尝试。
$ vagrant ssh AnsibleServer
vagrant@AnsibleServer:~$
你成功登陆了,太好了!我们立即在Server端进行Ansible的安装吧。
vagrant@AnsibleServer:~$ sudo apt update
vagrant@AnsibleServer:~$ sudo apt install software-properties-common
vagrant@AnsibleServer:~$ sudo apt-add-repository ppa:ansible/ansible
vagrant@AnsibleServer:~$ sudo apt update
vagrant@AnsibleServer:~$ sudo apt install ansible
vagrant@AnsibleServer:~$ ansible --version
ansible 2.8.5
ansible版本2.8.5已成功安装完毕!
用于创造Ansible代码
接下来,我们要检查一下Ansilbe的代码。
请在服务器上的虚拟机中登录并执行以下步骤。
本次演示所使用的Ansible目录结构如下所示。
.
├── ansible.cfg
├── hosts
├── playbook.yml
└── roles
└── node
└── tasks
└── main.yml
-
- ansible.cfg
設定ファイルのようなもの。Clientへの初回接続SSHエラーが出ないように設定している
hosts
接続先を定義します
playbook.yml
実行するRoleを定義します。
roles
Roleの定義を行います。
首先,为了实现上述的目录结构,在Home目录下创建文件和文件夹。
vagrant@AnsibleServer:~$ touch hosts playbook.yml ansible.cfg
vagrant@AnsibleServer:~$ mkdir -p roles/node/tasks/
vagrant@AnsibleServer:~$ touch roles/node/tasks/main.yml
请按照以下方式编辑各个文件的内容。
vagrant@AnsibleServer:~$ vim hosts
[AnsibleClient]
192.168.8.8
vagrant@AnsibleServer:~$ vim playbook.yml
---
- hosts: AnsibleClient
become: no
roles:
- {role: 'node', tags: ’node’}
vagrant@AnsibleServer:~$ vim ansible.cfg
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
vagrant@AnsibleServer:~$ vim roles/node/tasks/main.yml
- name: remove node.js
become: yes
apt:
name: node.js
state: absent
purge: yes
- name: add repository of node.js
become: yes
shell: curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
- name: apt-get update
become: yes
apt:
update_cache: yes
- name: install latest node.js
become: yes
apt:
name: nodejs
准备已完成。就差最后一步了!
在中国本土只需要一种选择,Ansible的执行
终于要开始执行Ansible了。
在开始执行之前,先确认一下Client的状态。
这次的目标是安装Node.js到Client上,所以先确认一下是否已经安装了。
(如果使用iTerm2在Server和Client之间切换,建议使用双屏操作。)
vagrant@AnsibleServer:~$ exit
$ vagrant ssh AnsibleClient
vagrant@AnsibleClient:~$ node -v
-bash: node: command not found
我确认了它没有进去!
现在我们会再次登录到服务器端。
vagrant@AnsibleClient:~$ exit
$ vagrant ssh AnsibleServer
vagrant@AnsibleServer:~$
因为确认了,所以再次执行Ansible。
请在服务器端执行以下命令。
需要输入密码,请输入”vagrant”。
vagrant@AnsibleServer:~$ ansible-playbook -i hosts playbook.yml -u vagrant -k
SSH password:
PLAY [AnsibleClient] *************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [192.168.8.8]
.
.
192.168.8.8 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
您执行 Ansible 完成了吗?一切顺利的话,应该会收到 ok=5 的响应。那么让我们登录到 Client 并确认是否安装了 Node.js。
vagrant@AnsibleServer:~$ exit
$ vagrant ssh AnsibleClient
vagrant@AnsibleClient:~$ node -v
v10.16.3
这次只安装了Node.js,但你可以把自己想用的东西或想执行的任务都写成任务,这样只需敲一次指令,就可以自动完成。
最后
非常感谢您一直看到最后。
虽然道路漫长,但您是否能够对Ansible有一些了解呢?
这次我们手动进行了测试,
如果在工作中使用的话,我认为同时学习自动测试工具ServerSpec也是很好的选择。
希望通过利用Ansible,能够让大家的工作变得更加轻松!
我对ServerSpec进行了简要概述。
https://qiita.com/Hiro-AGU/items/ac7f4336e266a2208288