概要概要
AnsibleのコアはPlaybooks(Playbookに翻訳可能)です。PlaybookはYAML構文で記述されており、管理対象マシンで実行する必要のある一連の操作を記述します。このスクリプトは、管理対象のマシンを指定された外観にする方法を段階的に記録する調理マニュアルに相当します。
YAMLの構文は非常に単純です。読者がYAMLについて聞いたことがなくても、それは問題ではありません。YAMLはJSON形式よりも簡単に記述できます。
次に、nginxをインストールして、ほとんどすべての友達がよく知っているプレイブックの基本的な使用法を示します。
例-nginxをインストールする
読者が直感的に理解できるように、純粋なマニュアル、シェルスクリプト、プレイブックの3つの方法を使用してnginxをデプロイします
マシンはEPELソースを開く必要があります。https://blog.csdn.net/xys2015/article/details/109378741を参照してください。
1つの純粋なマニュアル
yum install --quiet -y nginx
cat << 'EOF' > /etc/nginx/conf.d/xtest1.conf
server {
listen 7001;
server_name localhost;
location / {
root /opt/xtest1;
index index.html;
}
}
EOF
mkdir -p /opt/xtest1
echo "xtest-7001" > /opt/xtest1/index.html
systemctl start nginx
systemctl enable nginx
curl localhost:7001
2シェルスクリプト
上記で手動で実行したコマンドは、スクリプトとして直接使用できます
3つのプレイブック
# cat nginx_playbook.yml
---
- hosts: all
tasks:
- name: Install Nginx
shell: yum install --quiet -y nginx
- name: Copy configuration files
shell: cp xtest1.conf /etc/nginx/conf.d/xtest1.conf
- name: Start Nginx and configure it to run at boot
shell: systemctl start nginx && systemctl enable nginx
誰もが今このプレイブックを実行すると、コマンド
ansible-playbook nginx_playbook.yml
エラーが報告され、プロンプトが表示されますcannot stat ‘xtest1.conf’: No such file or directory
。これは予想の範囲内です。理由は、上記のプレイブックで直接使用されるシェルコマンドは、上記のコマンドの各行を個別に取り出し、ターゲットマシンにログインして実行するのと同じであるためです。したがって、対応する構成ファイルはありません。実際の作業では、nginx構成ファイルを管理ノードに配置します。以下では、Ansible独自のモジュールを使用して上記のプレイブックを書き直しています。
# cat nginx_playbook.yml
---
- hosts: 192.168.31.100
tasks:
- name: Install Nginx
yum:
name: nginx
state: present
- name: Copy configuration files
copy:
src: xtest1.conf
dest: /etc/nginx/conf.d/xtest1.conf
owner: root
group: root
mode: 0644
- name: Make sure Nginx is started now and at boot
service: name=nginx state=started enabled=yes
現時点では、Ansibleリソースディレクトリの合理的な計画に注意を払う必要はありません。任意にディレクトリを作成し、上記のファイルをそのディレクトリに配置してから、構成ファイルをディレクトリに配置します。の内容については、上記を参照してください。以下のスクリーンショットに示すように、構成ファイル。
上記のプレイブックを実行したい場合は、プレイブックが置かれているディレクトリに移動しansible-playbook nginx_playbook.yml
て実行しますが、急いで実行しないでください。このプレイブックについて注意深く説明しましょう。
---
固定写法,一个标记,类似php代码开头都有<?php一样,在k8s里如果一个yml文件里定义多个资源也是用---分割
- hosts: 192.168.31.100
表示管理的机器,同样这个IP必须已经存放到主机清单里,all表示所有机器,这块的规则跟使用ad-hoc命令一致
yum、service模块这里非常简单,即便无任何Ansible经验也能读懂,不多解释
copy模块这里,表示的是把本机(管理机器)当前目录(相对于执行的命令)下的xtest1.conf,拷贝到目标机器的 /etc/nginx/conf.d/xtest1.conf
それを実行して効果を確認してください
繰り返し実行した後、ターゲットマシンは二度と変更されず、べき等であることがわかります。
基本的な文法規則
# cat nginx_playbook.yml
---
- hosts: 192.168.31.100
tasks:
- name: Install Nginx
yum:
name: nginx
state: present
- name: Copy configuration files
copy:
src: xtest1.conf
dest: /etc/nginx/conf.d/xtest1.conf
owner: root
group: root
mode: 0644
- name: Make sure Nginx is started now and at boot
service: name=nginx state=started enabled=yes
- で始める必要があります— 3つのマイナス記号、そして行の一番上に書く
- #記号コメントを使用します(最初のコメントにプレイブック関数を記述できます)
- インデントは均一である必要があり、スペースとタブを混在させることはできません。インデントとして2つのスペースを均一に使用することをお勧めします。
- キー/値は、大文字と小文字を区別して1行または複数行に書き込むことができます
- プレイブックの実行は、上から下へと順番に行われます。
本当に比較したい場合、複数行で書くことの利点は、gitが違いを追跡して比較するのに便利なことです。
共通のコアパラメータ
--inventory=PATH (-i PATH) 手动指定主机清单文件,默认是 /etc/ansible/hosts
-v 输出详细信息
-vvv 输出更详细信息
-vvvv 调试(debug)模式
--forks=NUM 指定并发执行数,默认是5
--check (-C) 不实际执行,运行检查模式
--syntax-check 语法检查
--limit ${ip} 限制执行只在单个或多个IP内(逗号分割)
--list-hosts 显示本次执行操控的IP
実際の作業シナリオの2つの例を次に示します。マシンのバッチの初期化と単一のマシンの初期化、上記のパラメーターの使用方法を見てください。準備された環境は次のとおりです。
[root@192-168-31-106 ~/install_nginx]# ls
nginx_playbook.yml xtest1.conf
[root@192-168-31-106 ~/install_nginx]# cat nginx_playbook.yml
---
- hosts: all
tasks:
- name: Install Nginx
yum:
name: nginx
state: present
- name: Copy configuration files
copy:
src: xtest1.conf
dest: /etc/nginx/conf.d/xtest1.conf
owner: root
group: root
mode: 0644
- name: Make sure Nginx is started now and at boot
service: name=nginx state=started enabled=yes
[root@192-168-31-106 ~/install_nginx]# cat xtest1.conf
server {
listen 7001;
server_name localhost;
location / {
root /opt/xtest1;
index index.html;
}
}
シナリオ1: nginxマシンのバッチを7層のロードバランサーとして初期化します
#查看操控了哪些机器
ansible-playbook nginx_playbook.yml --list-hosts
#检查语法
ansible-playbook nginx_playbook.yml --syntax-check
#模拟执行 (这个模拟执行并不是万能模拟)
ansible-playbook nginx_playbook.yml --check
#实际执行
ansible-playbook nginx_playbook.yml
次の図に示すように、シミュレーションの実行ではエラーは報告されませんでしたが、実際の実行ではエラーが報告されました。理由は、マシン192.168.31.106でポート80がすでに使用されているためです。次に、nginxを起動し、ポート80でリッスンします。 。競合が発生し、エラーが報告されたため、シミュレーションが実行されます。機能は全能ではありません。大まかにしかシミュレーションできません。ここから、マシンがエラーを実行し、の通常の動作に影響を与えないことがわかります。他のマシン。
シナリオ2はボリュームが大きく、以前の7層マシンはそれに耐えられません。新しい7層マシン(192.168.31.102)が追加されます。
#查看操控了哪些机器
ansible-playbook nginx_playbook.yml --list-hosts
#检查语法
ansible-playbook nginx_playbook.yml --syntax-check
#限制某台机器模拟执行
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102
#如果要限制多台,则以逗号分割
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102,192.168.31.100
#可以配合--list-hosts,再次确认
ansible-playbook nginx_playbook.yml --check --limit 192.168.31.102,192.168.31.100 --list-hosts
#实际执行
ansible-playbook nginx_playbook.yml --limit 192.168.31.102
ちなみに、-v
パラメータ出力の効果をみんなに見てもらいましょう
プレイブックとシェルスクリプトの違いの比較
- Ansibleが実行されると、明確な痕跡が残り、Ansibleが何をしたかがわかります。
- 設計が合理的である場合、Ansibleはかなりの程度のべき等サポートを提供できます(少なくとも、プレイブックがべき等であるかどうかを確認できます)
--check
機会の実装、シミュレーションの実行の前に同様の議論を提供しますが、実際にはターゲットマシンに変更を加えません- 大規模なシェルスクリプトの意味は維持されます。問題が発生すると、デバッグが困難になり、適切に設計されたAnsiblePlaybookにはそのような問題はほとんどありません。
ansible-docヘルプを表示
#1 查看系统里全部模块
ansible-doc --list > /tmp/tmp.txt
#2 搜索某个模块的用法
ansible-doc --list > /tmp/tmp.txt; grep copy /tmp/tmp.txt
ansible-doc copy
これは、公式文書をチェックするよりも便利なことがよくあります。結局のところ、インターネットに接続する必要はなく、さらに重要なことに、バージョンは一貫している必要があります。
デバッグモジュール
このモジュールは、Ansibleの一般的に使用されるいくつかの機能をテストするのに非常に便利です
[root@192-168-31-106 ~/install_nginx]# cat debug_playbook.yml
---
- hosts: all
tasks:
- name: debug test 1
debug:
msg: 主机名 {
{ ansible_hostname }}
- name: debug test 2
debug:
msg: 操作系统 {
{ ansible_distribution }} 版本 {
{ ansible_distribution_major_version }}
[root@192-168-31-106 ~/install_nginx]# ansible-playbook debug_playbook.yml
上記で使用されている変数は、Ansibleシステムの組み込み変数であり、中括弧が2つあり、両側にスペースを残し、中央に変数名を記述します。これは固定使用法です。使用できる他の変数は、次のコマンド
ansible 192.168.31.100 -m setup
非rootユーザーとして実行する
# cat none-root-user.yml
- hosts: test
tasks:
- name: debug info 4
become: yes
become_user: www
shell: whoami > /tmp/tmp2.txt
ラベルと指定されたオペレーティングシステム
---
cat tags_playbook.yml
- name: copy node-ps single binary to remote machine /etc/dAppCluster
copy: src=node-ps dest=/etc/dAppCluster/node-ps mode=0744
tags:
- INSTALL_OR_UPDATE
when:
- ansible_distribution == "CentOS"
- ansible_distribution_major_version == "6" or ansible_distribution_major_version == "7"
- name: copy node-ps manager scripts CENTOS7
copy: src=node-ps.service dest=/usr/lib/systemd/system/node-ps.service
tags:
- UPDATE
when:
- ansible_distribution == "CentOS"
- ansible_distribution_major_version == "7"
#不指定tag,则全部执行
ansible-playbook tags_playbook.yml --limit 192.168.31.100
#指定具体的tag,则只执行该tag下面的任务
ansible-playbook tags_playbook.yml --tags UPDATE --limit 192.168.31.100
特定のタグを使用すると、さまざまなシナリオで実行されるタスクを区別できます。たとえば、インストールはタグ、アップグレードはタグであり、テストにも使用できます。
Ansibleプロンプトの色情報の説明
- 黄色の翔:リモートノードに対応する変更を加える
- ハットグリーン:リモートノードを変更しないでください。または、リモートノードの情報を表示するだけです。
- クリムゾン:操作実行コマンドが異常です
- 薄紫:コマンドの実行に対して警告メッセージが発行されたことを示します(問題の可能性があります。いくつかの提案をしてください)
参照リンク
https://docs.ansible.com/ansible/latest/cli/ansible-doc.html