阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Centos8 安装并使用Ansible(二)

34次阅读
没有评论

共计 3936 个字符,预计需要花费 10 分钟才能阅读完成。

导读 Ansible 是一个开源的配置管理工具,我们用于自动化任务、部署应用程序。使用 Ansible,您可以自动执行日常任务,例如更新系统、安装软件、和配置服务。
配置 /etc/hosts 文件

觉得用 ip 地址麻烦,可以在 Master 控制节点中的 /etc/hosts 文件中添加主机名对应着节点名称:

[root@Master ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.131 Master
192.168.43.165 node1
192.168.43.166 node2
192.168.43.167 node3

Centos8 安装并使用 Ansible(二)
在上一篇文章中,创建了一个名为 Master 的控制节点和四个受控节点(node1、node2、node3 和 node4)。现在,为了让 Ansible 与受控节点通信,需要为 Master 节点的 ansible 用户配置免密登录四个受控节点。

ansible 用户配置 ssh 免密登录

在 Master 和 node1-node4 中都需要创建 ansible 用户:

# 在 Master 节点创建用户,添加到 wheel 组,并设置 ansible 用户密码
[root@Master ~]# useradd ansible
[root@Master ~]# usermod -aG wheel ansible
[root@Master ~]# echo '123'|passwd --stdin ansible
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
# 在 node1 节点创建用户,添加到 wheel 组,并设置 ansible 用户密码
[root@node1 ~]# useradd ansible
[root@node1 ~]# usermod -aG wheel ansible
[root@node1 ~]# echo '123'|passwd --stdin ansible
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
# 在 node2 节点创建用户,添加到 wheel 组,并设置 ansible 用户密码
[root@node2 ~]# useradd ansible
[root@node2 ~]# usermod -aG wheel ansible
[root@node2 ~]# echo '123'|passwd --stdin ansible
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
# 在 node3 节点创建用户,添加到 wheel 组,并设置 ansible 用户密码
[root@node3 ~]# useradd ansible
[root@node3 ~]# usermod -aG wheel ansible
[root@node3 ~]# echo '123'|passwd --stdin ansible
Changing password for user ansible.
passwd: all authentication tokens updated successfully.

在 Master 和 node1-node4 中执行 visudo 命令,将 %wheel ALL=(ALL) NOPASSWD: ALL 前面的注释去掉,这样 ansible 用户使用 sudo 时不需要输入密码了:

[root@Master ~]# visudo

Centos8 安装并使用 Ansible(二)
在控制节点 Master 上切换到 ansible 用户,生成 SSH 密钥,然后将 SSH 公钥复制到所有受控节点。

[root@Master ~]# su - ansible
[ansible@Master ~]$ ssh-keygen

Centos8 安装并使用 Ansible(二)
现在,将 SSH 公钥复制到所有受控节点,这让 ansible 用户无需输入密码即可登录所有节点主机了:

[ansible@Master ~]$ ssh-copy-id ansible@node1
[ansible@Master ~]$ ssh-copy-id ansible@node2
[ansible@Master ~]$ ssh-copy-id ansible@node3

Centos8 安装并使用 Ansible(二)

配置文件

默认的 Ansible 配置文件位于 /etc/ansible/ansible.cfg 下。Ansible 的大部分设置都可以使用此配置文件进行修改以满足环境需求,下面了解一下 Ansible 在哪里搜索配置文件,Ansible 按以下顺序搜索配置文件,ansible 找到的第一个配置文件,然后忽略其余文件:

  • $ANSIBLE_CONFIG如果设置了此变量
  • ansible.cfg如果在当前目录中
  • ~/.ansible.cfg如果它在用户的主目录中。
  • /etc/ansible/ansible.cfg默认的配置文件

默认清单文件位于 /etc/ansible/hosts 中,但可以在配置文件中更改此位置。您还可以通过 -i 选项指定要使用的清单文件。

下面在 ansible 的家目录创建一个 ~/.ansible.cfg 配置文件,然后创建一个 inventory 清单文件:

[ansible@Master ~]$ touch ~/.ansible.cfg
[ansible@Master ~]$ touch inventory

~/.ansible.cfg 中制定 inventory 文件的位置:

[ansible@Master ~]$ cat ~/.ansible.cfg 

[defaults]
inventory = /home/ansible/inventory

Centos8 安装并使用 Ansible(二)
下面将主机节点写入到 inventory 文件中,内容中创建了三个组,nodes、test、prod:

[ansible@Master ~]$ vim inventory 

[nodes]
node1
node2
node3

[test]
node1

[prod]
node2
node3

Centos8 安装并使用 Ansible(二)

Ansible ad-hoc 命令

ad-hoc 可以在命令行快速执行命令,不需要编写 playbook。

使用 ad-hoc 检查节点的连通性

使用 ping 模块检查与节点主机的连接。

[ansible@Master ~]$ ansible all -m ping

Centos8 安装并使用 Ansible(二)
在上面的命令中,all 表示让 Ansible 在所有主机上运行此命令。

使用 ad-hoc 管理包

使用 Ansible 的 ad-hoc 命令,还可以将软件包安装到节点主机。下面实例是将 httpd 安装在 [test] 组中:

[ansible@Master ~]$ ansible test -b -m yum -a "name=httpd state=present"
node1 | SUCCESS => {
    "ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []}

Centos8 安装并使用 Ansible(二)

使用 ad-hoc 管理服务

由于在上一步中成功安装了 httpd 服务器,下面使用 Ansible 的 ad-hoc 命令启动和启用 httpd 服务,以便 Web 服务器启动并运行。

[ansible@Master ~]$ ansible test -b -m service -a "name=httpd enabled=yes state=started"

Centos8 安装并使用 Ansible(二)

Playbook

与 Ansible ad-hoc 命令不同,Ansible 剧本可以保存和重复使用。每个 playbook 由一个或多个 playbook 组成。下面是一个简单的 Ansible 剧本,在不同的节点安装不同的服务。下面实例文件名为 httpd.yaml,用于在 prod 组安装 httpd 服务,启动服务,防火墙开放 80 端口。然后再所有节点安装 git 安装包:

# 在 vim 编辑器中添加这条信息,让缩进更方便一些。[ansible@Master ~]$ echo 'autocmd FileType yaml setlocal ai ts=2 sw=2 et' > .vimrc
[ansible@Master ~]$ vim httpd.yml 
---
- name: Install httpd on prod group.
  hosts: prod
  become: yes
  tasks:
  - name: Install httpd
    yum:
      name: httpd
      state: latest
  - name: enable httpd service
    service:
      name: httpd
      enabled: yes
    notify: restart httpd
  handlers:
  - name: restart httpd
    service:
      name: httpd
      state: restarted
      
- name: Install git on all hosts
  hosts: all
  become: yes
  tasks:
  - name: Install Git
    yum:
      name: git
      state: latest

编写完成 playbook 时,可以试运行一下,然后再真正的运行:

[ansible@Master ~]$ ansible-playbook httpd.yml -C
[ansible@Master ~]$ ansible-playbook httpd.yml

Centos8 安装并使用 Ansible(二)
Centos8 安装并使用 Ansible(二)

总结

Ansible 简单、易于设置且功能强大。Ansible 是无代理的,这使系统管理员可以轻松开始自动化并花费更少的时间进行配置。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计3936字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中