通常部署分布式集群的时候都会用到hosts文件,咱们通常会把ip地址和主机名写进去,那么编写Ansible的时候渲染如何实现?
首先定义这个roles角色node
[root@ansible kubeadm-high-install]# ls ansible.cfg group_vars hosts roles site-all.yml
第一个文件将默认的etc/ansible的cfg文件拿过来,将key去掉,否则会报ssh的问题,group_vars/all.yml放变量的,写这个hosts也用不到,最重要的就是后面三个hosts、roles、site-all.yml,用来编写整个playbookdom
[root@ansible kubeadm-high-install]# cat hosts [master] 192.168.30.51 node_name=k8s-master1 192.168.30.52 node_name=k8s-master2 192.168.30.53 node_name=k8s-master3 [node] 192.168.30.54 node_name=node1 [k8s:children] master node
roles就是这个角色,init就是系统初始化的这个角色,tasks具体的任务细节都经过main.yml来实现编写,这里使用的template模块,若是下面templates的J2就会直接引用上ssh
[root@ansible kubeadm-high-install]# cat roles/init/tasks/main.yaml --- #这个playbook须要初始化每一个节点 - name: 添加hosts template: src=host.j2 dest=/etc/hosts
而这个j2文件里面说的是经过k8s这个组,也就是咱们在hosts定义的k8s:children这个组下来的,hostvars来获取k8s组下面的ip ,后面定义咱们hosts里面的主机名node_name是什么hostname定义的直接也就获取到了 inventory_hostname 获取被操做的当前主机主机名 以及自定义的node_name,这样就渲染过来了
[root@ansible kubeadm-high-install]# cat roles/init/templates/host.j2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 {% for host in groups['k8s'] %} {{ hostvars[host].inventory_hostname }} {{ hostvars[host].node_name }} {% endfor %}
测试执行分布式
[root@ansible kubeadm-high-install]# ansible-playbook -i hosts site-all.yml PLAY [一、主机初始化] ********************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************** ok: [192.168.30.53] ok: [192.168.30.52] ok: [192.168.30.54] ok: [192.168.30.51] TASK [init : 添加hosts] *************************************************************************************************************** changed: [192.168.30.52] changed: [192.168.30.51] changed: [192.168.30.54] changed: [192.168.30.53] PLAY RECAP ************************************************************************************************************************** 192.168.30.51 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.30.52 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.30.53 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.30.54 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
查看是否成功渲染ide
[root@ansible kubeadm-high-install]# ansible all -a "cat /etc/hosts" 192.168.30.51 | CHANGED | rc=0 >> 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.30.51 k8s-master1 192.168.30.52 k8s-master2 192.168.30.53 k8s-master3 192.168.30.54 node1 192.168.30.54 | CHANGED | rc=0 >> 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.30.51 k8s-master1 192.168.30.52 k8s-master2 192.168.30.53 k8s-master3 192.168.30.54 node1 192.168.30.52 | CHANGED | rc=0 >> 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.30.51 k8s-master1 192.168.30.52 k8s-master2 192.168.30.53 k8s-master3 192.168.30.54 node1 192.168.30.53 | CHANGED | rc=0 >> 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.30.51 k8s-master1 192.168.30.52 k8s-master2 192.168.30.53 k8s-master3 192.168.30.54 node1