• 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还是非常的方便的,在运维工作日趋自动化的今天,是一个很方便的工具。

  • 相关阅读:
    服务器控件的 ID,ClientID,UniqueID 的区别
    GridView使用总结
    javascript对象
    如何对SQL Server 2005进行设置以允许远程连接(转载)
    Master Pages and JavaScript document.getElementById
    Linux paste命令
    linux脚本和代码的加密
    SDWAN的优势
    dsd
    ASA防火墙忘记密码之后的恢复步骤
  • 原文地址:https://www.cnblogs.com/xiaoyuxixi/p/12523031.html
Copyright © 2020-2023  润新知