Ansible-Role编写之incloud/blockinfile/mode/systemd/

ansible写roles的时候tasks里面需要多个yum的服务需要一起安装,不需要指定多个name,看下面的,正常写是yum: name=ipset state=present
这样一般就安装一个像多个包一起安装这样更方便
  • name: 安装ipvsadm管理工具
    yum:
    name:
    • ipset
    • ipvsadm
      state: present

在ansible当中file模块还支持chmod 权限的更改那就是mode
正常写是file: path=目录 mode=755

  • name: 为ipvs模块配置授予755权限
    file: path=/etc/sysconfig/modules/ipvs.modules mode=755

systemd模块
name: 服务名,例如crond.service,最好带上后缀.service
state: 需要的操作,reloaded, restarted, started, stopped
enabled:是否需要开机启动
daemon_reload:systemd 读取配置文件,每次修改了文件,最好都运行一次,确保应用了

  • name: 重启docker服务,生效所有配置,并设为开机启动
    systemd:
    daemon_reload: yes
    state: restarted
    enabled: yes
    name: docker.service

错误忽略模块
有的命令可以执行成功但是会报错,我们希望忽略掉,不然Ansible不会继续执行

  • name: 启动haproxy
    shell:
    bash "{{ha_dir}}"/start-haproxy.sh bash
    ignore_errors: yes

ansible模块之文件末尾追加blockinfile模块

  • name: 配置kubectl命令
    blockinfile:
    path: ~/.bashrc
    block: export KUBECONFIG=/etc/kubernetes/admin.conf

  • name: 生效配置
    shell: source ~/.bashrc

blockinfile在末尾追加的话只能修改一次,默认再增加会覆盖之前的操作
可以使用lineinfile,在末尾单自在末尾的去添加

  • name: add etcd priority to rc.local
    lineinfile:
    dest: /etc/rc.local
    line: |
    renice -n -20 -P $(pgrep etcd)
    ionice -c2 -n0 -p $(pgrep etcd)

k8s内核导入模块,两种方式,通过直接写一个site.yaml的模版写个tasks,或者直接使用incloud导入
#cat site-kernel-optimization.yml


####################################################################################
##kernel optimization
#####################################################################################

  • name: kernel optimization
    gather_facts: false
    become: yes
    hosts:

    • docker

    roles:

    • kernel-optimization
      tags: kernel-optimization

#cat roles/kernel-optimization/tasks/kubelet.yml


  • name: The kernel optimization
    sysctl:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    sysctl_file: /etc/sysctl.d/90-kubelet.conf
    sysctl_set: yes
    state: present
    reload: yes
    become: true
    with_items:
    • { name: ‘vm.overcommit_memory‘, value: ‘1‘}
    • { name: ‘vm.panic_on_oom‘, value: ‘0‘ }
    • { name: ‘kernel.panic‘, value: ‘10‘}
    • { name: ‘kernel.panic_on_oops‘, value: ‘1‘}
    • { name: ‘kernel.keys.root_maxbytes‘, value: ‘25000000‘}
      ignore_errors: true

或者直接放在一个site.yml的tasks里面,使用include导入,前提
目录下面有这个tasks/kubectl.yml
#ls
kubelet.yml main.yml


  • include_tasks: kubelet.yml