記事ディレクトリ
1.Ansibleの概要
Ansibleは、Pythonベースの構成管理およびアプリケーション展開ツールであり、現在、自動管理の分野でも注目を集めています。これは、多くの昔ながらの操作および保守ツールの利点を組み合わせており、Ansibleは基本的にPabbetおよびsaltstackが実現できる機能を実現できます。
Ansibleは、何千ものホストをバッチ構成、デプロイ、および管理できます。たとえば、以前は、各ホストで実行される1つ以上の操作に切り替える必要がありました。Ansibleを使用するには、固定のAnsibleコントロールノード上のすべてのホストの操作を完了するだけで済みます。
Ansibleはモジュールに基づいて動作します。実行中のフレームワークのみを提供します。タスクを完了する機能はありません。Ansibleのモジュールは実際に操作を実行します。たとえば、コピーモジュールはファイルをリモートホストにコピーするために使用され、サービスモジュールはサービスの開始、停止、再起動などを管理するために使用されます。
Ansibleのより特徴的な機能の1つは、エージェントレスです。つまり、エージェントがありません。通常のコマンドのようなc / sソフトウェアではなく、コントロールノードとしてホストにAnsibleを1回インストールするだけで済みます。通常はssh Connectに基づいて、リモートホストにAnsibleやその他の追加サービスをインストールすることなくリモートホストを制御します。
ユーザーが使用中、サーバー端末でコマンドまたはプレイブックを入力すると、プレイブックは事前に定義されたルールに従って分解され、Ansibleが認識できるタスクに編成され、モジュールとプラグインを呼び出し、ssHを介して一時ファイルを送信します。ホストリストに従ってリモートクライアントに実行し、結果を返します
実行後に自動的に削除します
Ansibleのもう1つの特徴的な機能は、そのモジュールのほとんどがべき等であるということです。いわゆるべき等とは、システムリソースに対する複数の操作または複数の実行の影響が一貫していることを意味します。たとえば、systemctl stop xxxコマンドを実行して、サービスを停止します。停止するターゲットサービスがすでに停止状態になっていることが判明した場合、何も実行されないため、複数回の停止の結果は引き続き停止され、結果は変更されません。べき等です。systemctlrestartxxxはべき等ではありません。
Ansibleの多くのモジュールは、実行時にターゲットノードがタスクを実行するかどうかを最初に決定します。したがって、Ansibleにタスクを安全に実行させることができます。タスクを繰り返し実行しても、ほとんどの場合、副作用は発生しません。
要約:
Ansibleはモジュールを介して動作します。プレイブックを使用して、一連のモジュール操作タスクシーケンスを定義できます。ホストインベントリを介してリモートホストを制御する範囲を決定できます。
Ansibleはエージェントアプリケーションをインストールする必要はなく、SSH接続を介してリモートホストを制御します
Ansibleはべき等です。ansibleコマンドが複数回実行される場合、操作が繰り返されると同じタスクが繰り返し実行されることはありません。
次に、Ansibleのインストール
サーバータイプ | システムIPアドレス | コンポーネント |
---|---|---|
Ansible管理サーバー | Centos7.4 / 192.168.100.135 | Ansible |
マネージドクライアント | Centos7.4 / 192.168.100.142 | ------- |
マネージドクライアント | Centos7.4 / 192.168.100.140 | ------- |
すべてのサーバーでファイアウォールとSElinuxをオフにします
systemctl stop firewalld
setenforce 0
(1)管理側にansibleサービスをインストールします
yum install -y epel-release
yum install -y ansible
yum install tree -y
(2)ホストリストを構成します
vim hosts
[webservers]
192.168.100.142
[dbservers]
192.168.100.140
(3)キーペア検証を構成します
ssh-keygen -t rsa
ssh 192.168.100.142
ssh 192.168.100.140
sshpass -p 'abc123' ssh-copy-id [email protected]
sshpass -p 'abc123' ssh-copy-id [email protected]
3.Ansibleコマンドラインモジュール
コマンド形式:ansible<グループ名>-m<モジュール>-a<パラメーターリスト>
インストールされているすべてのモジュールを一覧表示し、qを押して終了します
ansible-doc -l
1.コマンドモジュール
リモートホストでコマンドを実行します。パイプやリダイレクトなどのシェル機能はサポートしていません。
command:Ansibleのデフォルトモジュール。-mパラメーターが指定されていない場合、コマンドモジュールが使用されます。
一般的なコマンドを使用できますが、コマンドの実行はシェルを介して実行されないため、<> |および&zの操作は不可能であり、パイプラインはサポートされておらず、コマンドはバッチで実行できません。
ipを指定してコマンドを実行し、142のネットワークカード情報を表示します
ansible 192.168.100.142 -m command -a 'ifconfig'
コマンドを実行するグループを指定します
ansible webservers -m command -a 'ifconfig'
すべてのグループ情報を表示
ansible all -m command -a 'ifconfig'
共通パラメータ
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
ansible dbservers -a 'chdir=/home ls ./'
ansible dbservers -a 'creates=/opt/aaa.txt touch test.txt'
ansible dbservers -a 'removes=/opt/aaa.txt touch /opt/111.txt'
2.シェルモジュール
//リモートホストでコマンドを実行します。これは、リモートホストのシェルプロセスを呼び出すのと同じです。次に、シェルの下のサブシェルを開いてコマンドを実行します(パイプシンボルなどの機能をサポートします)。
ansible-doc -s shell ##查看shell模块的详细信息
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin aa'
ansible dbservers -m shell -a 'ifconfig ens33 | awk "NR==2 {print \$2
3.cronモジュール
//リモートホストでタスクスケジュールを定義します。2つの状態があります。現在は追加(省略可能)を意味し、抽象は削除を意味します。
ansible-doc -s cron ##查看此模块的详细信息
//一般的なパラメータ:
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
ansible dbservers -m cron -a 'minute="10" hour="10,22" day="10" month="*/2" job="/usr/bin/cp -f /var/log/messages /opt" name="crontab_test1"'
ansible dbservers -a 'crontab -l'
4.ユーザーモジュール
//ユーザー管理モジュール
ansible-doc -s user
常见的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yes|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录
5.グループモジュール
//ユーザーグループ管理用のモジュール
ansible-doc -s group
ansible dbservers -m group -a 'name=mysql gid=3306 system=yes'
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test1 uid=306 system=yes group=mysql'
ansible dbservers -a 'id test1'
6.コピーモジュール
//指定されたホストファイルをリモートホストにコピーするために使用されます
ansible-doc -s copy
//一般的なパラメータ:
dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主
group:指出复制时,目标文件的属组
content:指出复制到目标主机上的内容,不能与src一起使用
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -m copy -a 'src=./test.txt dest=/opt/test1.txt owner=test mode=777 group=root'
ansible dbservers -m copy -a 'content="i love you" dest="/opt/ct.txt"
7.ファイルモジュール
//ファイルのプロパティを設定します
ansible-doc -s file
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'
####修改属主 属组
ansible dbservers -m file -a 'path=/opt/ansible.txt state=touch'
###指定路径创建文件
ansible dbservers -m file -a "path=/opt/ct.txt state=absent"
##删除文件
8.ホスト名モジュール
//リモートホストのホスト名を管理するために使用されます
ansible dbservers -m hostname -a "name=mysql01"
9.pingモジュール
//リモートホストの接続を確認します
absible all -m ping
10.yumモジュール
//リモートホストにパッケージをインストールおよびアンインストールします
ansible-doc -s yum
ansible webservers -m yum -a 'name=httpd' #安装服务
ansible webservers -m yum -a 'name=httpd state=absent' #卸载服务
11. service/systemdモジュール
//リモートホストでの管理サービスの実行ステータスを管理するために使用されます
ansible-doc -s service
//常用的参数:
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
ansible webservers -a 'systemctl status httpd' #查看web服务器httpd运行状态
ansible webservers -m service -a 'enabled=true name=httpd state=started' #启动httpd服务
12.scriptモジュール
//ローカルシェルスクリプトのリモートバッチ実行を実現します
ansible-doc -s script
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt
chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'
13.セットアップモジュール
// factsコンポーネントは、セットアップモジュールを使用して取得できる管理対象ノード情報を収集するために使用されます
ansible-doc -s setup
ansible webservers -m setup #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4' #使用filter可以筛选指定的facts信息
第四に、インベントリホストリスト
//インベントリはホストのグループ化をサポートします。各グループで複数のホストを定義でき、各ホストは任意の1つ以上のホストグループで定義できます。
//類似した名前のホストの場合は、リストを使用して各ホストを識別できます。
vim / etc / ansible / hosts
[webservers]
192.168.80.11:2222 #冒号后定义远程连接端口,默认是 ssh 的 22 端口
192.168.80.1[2:5]
[dbservers]
db-[a:f].example.org #支持匹配 a~f
在庫の変数
インベントリ変数名 | 意味 |
---|---|
ansible_host | ansibleがノードに接続するときのIPアドレス |
ansible_port | 接続パートナーのポート番号。ssh接続のデフォルトは22です。 |
ansible_user | リモートホストに接続するときに使用するホスト名。指定しない場合、ansibleまたはansible-playbookコマンドを実行するユーザーが使用されます |
ansible_password | 接続時のユーザーのsshパスワード。キーペア認証が使用されていない場合にのみ有効です。 |
ansible_ssh_private_key_file | キー認証ssh接続用の秘密キーファイルを指定します |
ansible_ssh_common_args | ssh、sftp、scpコマンドに提供される追加の引数 |
ansible_become | 特権の昇格を許可する |
ansible_become_method | sudo / su/runasなどの特権を昇格する方法を指定します。 |
ansible_become_user | アップグレード先のユーザーの特権、rootへのデフォルトのアップグレード |
ansible_become_password | 指定されたユーザー権限にエスカレーションするときのパスワード |
(1)ホスト変数
vim / etc / ansible / hosts
192.168.100.142 ansible_port=22 ansible_user=root ansible_password=abc123
(2)グループ変数
vim / etc / ansible / hosts
[webservers:vars]
ansible_port=22
ansible_user=root
ansible_password=abc123
[all:vars] #表示为所有组内的所有主机定义变量
ansible_port=22
(3)グループネスティング
[nginx]
192.168.80.20
192.168.80.21
192.168.80.22
[apache]
192.168.80.3[0:3]
[webs:children] #表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache