ansible剧本使用进阶

前言:ansible中的playbook是一个优秀的功能,能够实现不同的批量管理需求,刚完成了一个剧本搭建k8s集群的任务,记录下注意点与小技巧。

使用模块:

  yum、lineinlife、shell、service,yum完成服务组件的安装,lineinlife完成配置文件的修改,shell完成集群搭建的配置,service对服务实现有序管理。

其中需要注意的要点:

  shell模块同样可以实现配置文件的修改,不过需要注意的是,lineinlife能够更智能的实现,如使用不同的字段在修改之前备份或者在文件不存在时创建等,还可以在不符合查询条件的情况下终止操作,避免配置文件的出错。

内容如下:

- hosts: master
  remote_user: root
  tasks:
  - name: install k8s master
    yum: name=etcd,kubernetes-master state=latest
  - name: update conf file
    lineinfile:
      dest: /etc/etcd/etcd.conf
      regexp: '^ETCD_LISTEN_CLIENT_URLS='
      line: 'ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/apiserver
      regexp: '^KUBE_API_ADDRESS='
      line: 'KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/apiserver
      regexp: '^# KUBE_API_PORT='
      line: 'KUBE_API_PORT="--port=8080"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/apiserver
      regexp: '^# KUBELET_PORT='
      line: 'KUBELET_PORT="--kubelet-port=10250"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/apiserver
      regexp: '^KUBE_ADMISSION_CONTROL='
      line: 'KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"'
  - name: enable and start etcd
    service: name=etcd state=started enabled=yes
  - name: enable and start kube-apiserver
    service: name=kube-apiserver state=started enabled=yes
  - name: enable and start kube-controller-manager
    service: name=kube-controller-manager state=started enabled=yes
  - name: enable and start kube-scheduler
    service: name=kube-scheduler state=started enabled=yes
  - name: create etcd network
    shell: etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
- hosts: node
  vars:
    IP: "{{ ansible_ens33['ipv4']['address'] }}"
  remote_user: root
  tasks:
  - name: install k8s node
    yum: name=flannel,kubernetes-node state=latest
  - name: update conf file
    lineinfile:
      dest: /etc/sysconfig/flanneld
      regexp: '^FLANNEL_ETCD_ENDPOINTS='
      line: 'FLANNEL_ETCD_ENDPOINTS="http://192.168.92.145:2379"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/config
      regexp: '^KUBE_MASTER='
      line: 'KUBE_MASTER="--master=http://192.168.92.145:8080"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/kubelet
      regexp: '^KUBELET_ADDRESS='
      line: 'KUBELET_ADDRESS="--address=0.0.0.0"'
  - name: update conf file
    lineinfile:
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/kubelet
      regexp: '^# KUBELET_PORT='
      line: 'KUBELET_PORT="--port=10250"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/kubelet
      regexp: '^KUBELET_API_SERVER='
      line: 'KUBELET_API_SERVER="--api-servers=http://{{IP}}:8080"'
  - name: update conf file
    lineinfile:
      dest: /etc/kubernetes/kubelet
      regexp: '^KUBELET_API_SERVER='
      line: 'KUBELET_API_SERVER="--api-servers=http://192.168.92.145:8080"'
  - name: enable and start kube-proxy
    service: name=kube-proxy state=started enabled=yes
  - name: enable and start kubelet
    service: name=kubelet state=started enabled=yes
  - name: enable and start docker
    service: name=docker state=started enabled=yes
  - name: enable and start flanneld
    service: name=flanneld state=started enabled=yes

   值得再学习的一个小技巧就是,playbook功能中变量的定义及引用:如上文代码中所示的红色部分就是变量的定义,只不过"{{ ansible_ens33['ipv4']['address'] }}"是代表本地IP的特殊代码而已。红色部分标出的内容起到相同的作用。

在playbook完成之后,首先需要做的就是

(1)检查语法:

        ansible-playbook  --syntax-check  /path/to/playbook.yaml

 

这一步会检测你的yaml文件的定义是否有问题,当然,只代表yaml文件的格式是否正确。

(2)测试运行:

      ansible-playbook -C /path/to/playbook.yaml

 

 这一步会在主机上测试执行playbook,如果有问题,说明playbook的逻辑,或者主机上的条件不足以执行playbook中的tasks。

    (3) 运行

        ansible-playbook  /path/to/playbook.yaml

 

这一步才是真正在主机上执行playbook,不过需要注意的是,有的时候测试运行时没有报错,而正式运行时却发生了问题,这就要根据报错信息来处理了。

结语:

  总的来说playbook还是非常的方便的,在运维工作日趋自动化的今天,是一个很方便的工具。

 

posted @ 2020-03-19 11:37  小雨淅淅o0  阅读(518)  评论(0编辑  收藏  举报