Ansible初学笔记(CentOS7安装 #1)

Ansible 简易备忘录(CentOS7设置 #1)

首先

在接触到Ansible之前,我有些落后于时代的潮流。我试着研究并创建了一个用于进行CentOS 7的初始设置的工具,现在我想记录下其内容。

如果有了解的人,能給予評論等,我會很高興。

Ansible是什么?

我理解为使用SSH在远程服务器上执行命令的自动化工具。它与Chef和Puppet等类似,但最好的地方是它无需代理。

因为不需要在目标主机上安装代理或软件包,所以不会破坏环境。
而且由于通过 SSH 连接,我觉得人们手动设置服务器和这种方式很接近,感觉直观上更易理解。

就流程而言

    • Ansible サーバを立てる

 

    • 構築対象サーバと ssh 疎通させる

 

    • 構築内容を Ansible サーバ上に設定ファイルとして作成する

 

    • 設定ファイルの内容を Ansible サーバ上で実行する

 

    Ansible が 構築対象サーバへ ssh 接続を繰り返し設定ファイルの内容の操作を順次行う

听起来有这种感觉。

搭建Ansible服务器

除了構建目標的伺服器,我們將建立一個CentOS 7的伺服器,並在那裡安裝Ansible。
實際上,我們打算將其配置在類似跳板伺服器的位置,
但在這次,我們將在個人電腦的虛擬環境中安裝CentOS 7,然後在那裡進行構建。

[Ansible服务器环境]

OS           : CentOS Linux release 7.3.1611 (Core)
(SELinux, Firewalld はとりあえず停止・無効化)

由于epel存储库中存在ansible,因此我们需要添加epel存储库并使用yum进行安装。

[安装 epel]

yum install epel-release

sed -i "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo

Ansible 安装

yum install ansible --enablerepo=epel

ansible --version
- - - - - 
ansible 2.2.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
- - - - - 

我进来了。

建立与目标服务器的 SSH 通信连接

使用 SSH 与构建目标服务器进行通信。
这次让我们确保在服务器之间 root 用户可以通过密钥认证通过 SSH 访问。

首先要准备目标构建服务器。
本次以在ESXi上安装的”CentOS-7-x86_64-DVD-1503-01.iso”镜像为例,构建CentOS7服务器。

[目标构建服务器环境]

OS                 : CentOS7
IP                 : 10.210.104.24
DNS                : 8.8.8.8

使用Ansible服务器生成SSH密钥,并将密钥集发送到目标服务器,以便能够通过SSH无密码方式进行连接。

ssh-keygen

mv /root/.ssh/{id_rsa.pub,authorized_keys}

scp -r /root/.ssh root@10.210.104.24:/root/

※ 纏めて scp した後 id_rsa は構築対象サーバから削除しておきます。

现在,我们可以通过Ansible服务器连接到目标构建服务器了。

在Ansible服务器上创建配置文件作为构建内容 (关于创建的配置文件)

现在我们将在Ansible服务器上创建配置文件。
首先,我想大致确认需要哪些文件。

安装完后的目录如下所示。

[目录结构]

/etc/ansible/
        |------ ansible.cfg      ## Ansible 自体の設定ファイル
        |------ hosts            ## Ansible で管理するリモートホストの一覧
        '------ roles/           ## Ansible に実行させる yaml 形式の設定ファイル置き場(インストール直後は空)

我們從這裡開始,最終的目標是按照以下方式創建文件。

/etc/ansible/
        |------ ansible.cfg
        |------ hosts_org        ## デフォルトのものは保持しておく
        |------ hosts
        '------ roles/
                   |------ files/                              ## 構築対象のリモートホストに配置したいファイルを置く場所
                   |         |------ chrony.conf 
                   |         |------ ifcfg-eth0 
                   |         '------ syslog
                   |------ handlers/                           ## 構築中特定の状態になった時に呼び出される処理の設定ファイル
                   |         |------ reboot_os.yaml
                   |         |------ reload_chrony_config.yaml
                   |         |------ reload_postfix_config.yaml
                   |         |------ reload_chrony_config.yaml
                   |         |------ reload_rsyslog_config.yaml
                   |         '------ reload_sshd_config.yaml
                   |------ setup_CentOS7.yaml                  ## 実行する設定ファイル (playbook) の大本となるファイル
                   '------ tasks/                              ## 実行する処理を大本のファイルから切り出したもの
                             |------ disable_unnecessary_daemons.yaml
                             |------ enable_necessary_daemons.yaml
                             |------ disable_ipv6.yaml
                             |------ disable_selinux.yaml
                             |------ install_and_setup_chrony.yaml
                             |------ install_and_setup_epel.yaml
                             |------ install_utill_packages.yaml
                             |------ setup_eth0_interface.yaml
                             |------ setup_kdump.yaml
                             |------ setup_logrotate.yaml
                             |------ setup_postfix.yaml
                             |------ setup_rsyslog.yaml
                             |------ setup_sshd.yaml
                             '------ setup_unix_users.yaml

在Ansible服务器上创建配置文件作为构建内容(稍微绕了一下路)。

首先,我想编写一个设置文件,以便在Ansible服务器上进行配置更改,并确认文件格式和执行流程。(不仅可以对远程主机进行配置更改,还可以对Ansible服务器本身进行配置更改。虽然与 “ssh root@localhost” 相同。)

由于在密钥文件创建阶段,本地主机的 ssh 已设置为无需密码,因此我们将从 Ansible 的配置开始。
首先,在 /etc/ansible/hosts 文件中写入要管理的目标主机。(在此例中为本地主机)

## デフォルトのファイルを保持
cp -av /etc/ansible/hosts{,_org}

## デフォルトの記載を消して空にする
:> /etc/ansible/hosts

## 空っぽのファイルに新しく記入( とりあえず "localhost" と書いておけば今回は動きます )
vi /etc/ansible/hosts
-追記 - - 
loaclhost
- - - - - 

通过ansible命令检查是否可以连接到本地主机。

## ping モジュールを使って、localhost へ疎通確認
ansible -m ping localhost
## SUCCESS と出ればとりあえず OK
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

本地主机已设为管理对象。

接下来我们要创建一个用于设定实际执行操作的配置文件,这个文件被称为 playbook。
它相当于 Chef 中的 cookbook。

在制作文件之前,让我们确定要做什么。
这次,我想在本地主机上完成以下事项。

    • hostname を “ansible_test001.localdomain” に変更する。

 

    • firawalld を 停止し、自動起動も off にする。

 

    /etc/hosts に ipv6 の設定 “:1” の行があったらその行を削除する。

剧本的格式如下所示。 de .)

無題001.png

为了与刚刚决定的“要做的事情”相匹配,我们会考虑设置的内容。

将主机名更改为”ansible_test001.localdomain”。

使用”hostname”模块来设置服务器的主机名,将要设置的”ansible_test001.localdomain”传递给”name”参数。另外,将任务命名为”更改主机名”。

    - name: Change hostname
      hostname: name=ansible_test001.localdomain

停止firawalld并将自动启动设置为关闭。

请使用名为 “servicec” 的模块来控制服务器的服务,
将要控制的服务名 “firewalld” 作为 “name” 参数传递,
希望服务停止,因此将 “state” 设置为 “stopped”,并且希望在启动时停止,所以将 “enabled” 设置为 “no”。
另外,将任务命名为 “关闭 firewalld 服务”。

    - name: Turn off firewalld service
      service: name=firewalld state=stopped enabled=no

如果在/etc/hosts文件中存在ipv6的”:1″设置行,将该行注释掉。

在进行修改之前,我想要为文件备份,所以使用”shell”模块并直接执行cp命令。

    - name: Keep default /etc/hosts
      shell: cp -a /etc/hosts{,_org}

然后,我们将删除该行。
使用文件重写模块”replace”,
将要编辑的文件路径传递给”dest”,将要匹配的正则表达式传递给”regexp”。
匹配的部分将被替换为传递给”replace”的字符串。

    - name: CommentOut IPv6 row at /etc/hosts
      replace: dest=/etc/hosts regexp='^::1' replace='#::1'

参考:
* 主机名 – 管理主机名。
* 服务 – 管理服务。
* 命令行 – 在节点中执行命令。
* 替换 – 替换所有实例中的特定字符串…

在/etc/ansible/role下创建 playbook,并使用上述内容。

vi /etc/ansible/roles/setup_localhost.yaml

[设置_本地主机.yaml]

---
- hosts: localhost
  tasks:
    - name: Change hostname
      hostname: name=ansible_test001.localdomain

    - name: Turn off firewalld service
      service: name=firewalld state=stopped enabled=no

    - name: Keep default /etc/hosts
      shell: cp -a /etc/hosts{,_org}

    - name: CommentOut IPv6 row at /etc/hosts
      replace: dest=/etc/hosts regexp='^::1' replace='#::1'

让我们试着从命令行中运行这个。

ansible-playbook /etc/ansible/roles/setup_localhost.yaml
PLAY [localhost] ***************************************************************

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [Change hostname] *********************************************************
changed: [localhost]

TASK [Turn off firewalld service] **********************************************
ok: [localhost]

TASK [Keep default /etc/hosts] *************************************************
changed: [localhost]

TASK [CommentOut IPv6 row at /etc/hosts] *******************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=2    unreachable=0    failed=0

得到了如上所示的结果。设定的处理结果部分是。

TASK [Change hostname] *********************************************************
changed: [localhost]

TASK [Turn off firewalld service] **********************************************
ok: [localhost]

TASK [Keep default /etc/hosts] *************************************************
changed: [localhost]

TASK [CommentOut IPv6 row at /etc/hosts] *******************************************
changed: [localhost]

在中文中,只需要一個選項:

↑是指執行所設定的TASK,並表示在伺服器上進行了變更的“changed:”。
如果設定的TASK已經處於所需的狀態,則會輸出“ok:”。

对于 “Turn off firewalld service” 任务,状态已显示为 “ok:”。
顺便提一下,这台 Ansible 服务器上的 firewalld 已经被停止了。

当你注销并重新进行ssh连接后,可以检查设置内容。

[root@ansible_test001 ~]# hostname
ansible_test001.localdomain

[root@ansible_test001 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

[root@ansible_test001 ~]# systemctl list-unit-files | grep "firewalld"
firewalld.service                             disabled

[root@ansible_test001 ~]# diff /etc/hosts{,_org}
2c2
<
---
> ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

根据设定,看起来已经进行了更改。
那么,接下来我们将考虑为远程主机准备 playbook。

广告
将在 10 秒后关闭
bannerAds