一篇带你熟悉ansible-playbook剧本
#playbook介绍
#playbook简单介绍 playbook翻译过来就是剧本,以yml/yaml为后缀结尾的一个文本文件 #playbook组成:分为两部分play(定义主机的角色)和task(具体执行什么任务) play (找谁) 如- hosts: update() tasks (干什么) 如:安装软件,包括文件
#ansible-playbook命令帮助
# man ansible-playbook # ansible-playbook -h #语法格式:ansible-playbook [option] playbook.yml [playbook2 ….] #常用参数: -C, --check #检查,运行但是不做任何的操作 -f FORKS, --forks=FORKS #用来做并发 --list-hosts #列出主机列表 --syntax-check #进行语法检查
#playbook书写格式
#缩进 YAML使用固定的缩进风格表示层级结构,每个缩进两个空格,不适用tabs键,如 - hosts: update tasks: #冒号 除了以冒号结尾的,其他所有冒号后面都必须有空格,如 - hosts: update tasks:(冒号结尾不用空格) #短横线 表示列表项,适用一个短横杠加一个空格。多个项适用同样的缩进级别作为同一列表 - hosts: update tasks: - name:
#使用步骤
#1.定义主机的角色 - hosts: k8s-master #2、在playbooks中定义任务 tasks: - name: task description #任务描述信息 - module_name: module args #需要使用的模块名字:模块参数 #3、ansible-playbook执行命令 [root@ctos1 roles]# ansible-playbook site.yml
#基本使用
1.使用剧本方法给被控制端创建用户组和用户
#1.1、查看定制的组,如果想控制不同功能的服务器,就划分到不同的组 [root@k8s-master yaml]# tail -n 7 /etc/ansible/hosts [k8s-etcd] 192.168.86.131 [k8s-node] 192.168.86.132 192.168.86.133 #1.2、编写yml文件 [root@k8s-master yaml]# pwd /etc/ansible/yaml [root@k8s-master yaml]# cat a1.yml - hosts: k8s-node tasks: - name: creategroup group: name=guoke - name: createuser user: name=demo10 #检查有无语法错误 [root@k8s-master yaml]# ansible-playbook --syntax-check a1.yml playbook: a1.yml #列出这个组的主机列表 [root@k8s-master yaml]# ansible-playbook --list-hosts a1.yml playbook: a1.yml play #1 (k8s-node): k8s-node TAGS: [] pattern: [u'k8s-node'] hosts (2): 192.168.86.133 192.168.86.132 #-C就是检查,白跑的,不会进行任何的操作 [root@k8s-master yaml]# ansible-playbook -C a1.yml #1.3、执行创建 [root@k8s-master yaml]# ansible-playbook a1.yml #1.4、到被控制端查看效果 [root@node1 ~]# id demo10 uid=1005(demo10) gid=1006(demo10) groups=1006(demo10)
2.安装http服务,启动服务并加入开机自启,放行相对应的端口
#需求 安装http服务 yum 编写简单的网页进行测试 copy 启动服务并加入开机自启 service 放行firewalld对应的端口 firewalld [root@game yaml]# cat install_pack.yml - hosts: all tasks: - name: Install httpd Packages yum: name=httpd state=present - name: http configure copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf backup=yes - name: configure content copy: src=/var/www/html/index.html dest=/var/www/html/index.html owner=root group=root mode=644 - name: start httpd services service: name=httpd state=started enabled=yes - name: start firewall services service: name=firewalld state=started - name: configure firewalld firewalld: zone=public service=http permanent=yes immediate=yes state=enabled #进行语法检查 [root@game yaml]# ansible-playbook --syntax-check install_pack.yml [root@game yaml]# ansible-playbook install_pack.yml
3.使用ansible安装并配置nfs服务
#服务端:192.168.228.130 1.安装nfs 2.配置nfs 3.根据配置创建目录,创建用户,授权 4.启动并加入开机自启 #客户端:192.168.228.131 1.准备一个空目录 2.挂载服务端共享的目录 #提示:如果客户端没有安装nfs-utils,需要进行安装再挂载,否则会挂载的时候会报错、 [root@game yaml]# cat nfs.yml - hosts: 192.168.228.130 tasks: - name: Installed nfs Services yum: name: nfs-utils state: present - name: Configure NFS copy: src: /etc/exports dest: /etc/exports backup: yes - name: Create Group group: name: www gid: '666' - name: Create User user: name: www uid: '666' group: '666' shell: /sbin/nologin create_home: no - name: Create Driectory file: path: /data state: directory owner: www group: www recurse: yes - name: Start NFS Server service: name: nfs state: restarted enabled: yes - hosts: 192.168.228.131 tasks: - name: Install NFS Client yum: name: nfs-utils state: present - name: Create Mount Driectory file: path: /nfs_cl state: directory - name: Client Mount NFS Server mount: src: 192.168.228.130:/data path: /nfs_cl fstype: nfs opts: defaults state: mounted #参数解释: 1.file模块:path:指定路径,state:创建的是目录,owner:指定所属主,group:指定所属组,recurse:递归创建 2.mount模块:src:源挂载点,path:本地挂载目录,fstype:类型 3.更多信息可使用ansible-doc +模块名查看帮助 #执行效果 [root@game yaml]# ansible-playbook --syntax-check nfs.yml #语法检查 [root@game yaml]# ansible-playbook nfs.yml