zoukankan      html  css  js  c++  java
  • 【Linux】【Services】【SaaS】Docker+kubernetes(3. 用ansible管理机器和软件)

    1. 简介

    1.1. 公司环境使用的puppet,但是我更喜欢ansible,原因有二,第一,我是红帽的忠粉:),第二,我对python比较熟悉

    1.2. ansible官方网站:https://www.ansible.com/

    1.3. ansible中文文档网站:http://www.ansible.com.cn/

    2. 环境

    2.1. ansible:ansible-2.4.2.0-1.el7

    3. 安装

    3.1. 直接yum就好

    yum install ansible

    4. 配置

    4.1. 生成ssh key

    ssh-keygen -t rsa

    4.2. /etc/hosts

    10.210.55.220 service. service
    10.210.55.221 master1. master1
    10.210.55.222 master2. master2
    10.210.55.223 master3. master3
    10.210.55.224 node1. node1
    10.210.55.225 node2. node2
    10.210.55.226 block1. block1
    10.210.55.227 block2. block2
    10.210.55.228 nginx1. nginx1
    10.210.55.229 nginx2. nginx2
    

      

    4.3. 把上一步输出的机器列表粘贴在/etc/ansible/hosts里面,定义好各个组

    [all]
    service ansible_host=10.210.55.220 hostname=service
    master1 ansible_host=10.210.55.221 hostname=master1
    master2 ansible_host=10.210.55.222 hostname=master2
    master3 ansible_host=10.210.55.223 hostname=master3
    node1 ansible_host=10.210.55.224 hostname=node1
    node2 ansible_host=10.210.55.225 hostname=node2
    block1 ansible_host=10.210.55.226 hostname=block1
    block2 ansible_host=10.210.55.227 hostname=block2
    nginx1 ansible_host=10.210.55.228 hostname=nginx1
    nginx2 ansible_host=10.210.55.229 hostname=nginx2
    
    [master]
    master1
    master2
    master3
    
    [etcd]
    master1
    master2
    master3
    
    [worker]
    node1
    node2
    
    [block]
    block1
    block2
    
    [kube-master:children]
    master
    
    [kube-node:children]
    worker
    
    [k8s-cluster:children]
    kube-master
    kube-node
    

      

    4.4. 吧ssh-key拷贝的目标主机上实现免密码登录

    for i in $(grep hctj /etc/ansible/hosts |grep -o "#.*"|cut -d# -f2); do ssh-copy-id $i; done

    4.5. 在/etc/ansible下吧架构搭起来

    [root@services ~]# mkdir -p /etc/ansible/roles/{all,master,etcd,worker,block}/{files,templetes,tasks,handlers,vars,meta}
    
    [root@services ~]# touch /etc/ansible/roles/{all,master,etcd,worker,block}/{tasks,handlers,vars,meta}/main.yml
    
    [root@services ~]# tree /etc/ansible/
    /etc/ansible/
    ├── ansible.cfg
    ├── hosts
    └── roles
        ├── all
        │   ├── files
        │   ├── handlers
        │   │   └── main.yml
        │   ├── meta
        │   │   └── main.yml
        │   ├── tasks
        │   │   └── main.yml
        │   ├── templetes
        │   └── vars
        │       └── main.yml
        ├── block
        │   ├── files
        │   ├── handlers
        │   │   └── main.yml
        │   ├── meta
        │   │   └── main.yml
        │   ├── tasks
        │   │   └── main.yml
        │   ├── templetes
        │   └── vars
        │       └── main.yml
        ├── etcd
        │   ├── files
        │   ├── handlers
        │   │   └── main.yml
        │   ├── meta
        │   │   └── main.yml
        │   ├── tasks
        │   │   └── main.yml
        │   ├── templetes
        │   └── vars
        │       └── main.yml
        ├── master
        │   ├── files
        │   ├── handlers
        │   │   └── main.yml
        │   ├── meta
        │   │   └── main.yml
        │   ├── tasks
        │   │   └── main.yml
        │   ├── templetes
        │   └── vars
        │       └── main.yml
        └── worker
            ├── files
            ├── handlers
            │   └── main.yml
            ├── meta
            │   └── main.yml
            ├── tasks
            │   └── main.yml
            ├── templetes
            └── vars
                └── main.yml
    
    36 directories, 22 files
    

      

     4.6. 配置文件/etc/ansible/start.yml

    - hosts: all
      name: playbook of all servers
      remote_user: root
      roles:
        - all
    - hosts: master
      name: playbook of master
      remote_user: root
      roles:
        - master
    - hosts: etcd
      name: playbook of master
      remote_user: root
      roles:
        - master
    - hosts: worker
      name: playbook of worker
      remote_user: root
      roles:
        - worker
    - hosts: block
      name: playbook of block
      remote_user: root
      roles:
        - block
    
    #定义角色的时候还可以同时传入变量或者添加条件
    ##- host: mysql
    ##  name: mysql
    ##  roles:
    ##  - {role: mysql, username: dbuser}
    ##  - {role: mysql, when: "ansible_distribution_major_version == '7' "}
    

      

    4.7. 添加all角色/etc/ansible/roles/all/tasks/main.yml

    # 一些静态配置文件
    - name: Change resolve.conf
      copy: src=hosts dest=/etc/hosts
    - name: Yum repo
      copy: src=epel.repo dest=/etc/yum.repos.d/epel.repo
    
    #系统默认安装后需要安装的软件都写这下面,我就用tree和htop做了一个例子
    - name: Tools after server installed
      when: ansible_distribution_major_version == "7"
      yum: name={{ item }} state=present disable_gpg_check=yes
      with_items:
      - tree
      - htop
      - net-tools
      - vim
      - bind-utils
    
    #系统默认安装后其他需要安装的软件
    - name: Extra services after server is basic installed
      when: ansible_distribution_major_version == "7"
      yum: name={{ item.name }} state={{ item.state }}
      with_items:
      - { name: 'chrony', state: 'present' }
    
    #定义系统服务启动级别
    - name: Enable/Disable services when server boot
      service: name={{ item.name }} enabled={{ item.enabled }}
      with_items:
      - {name: 'chronyd', enabled: 'true'}
      - {name: 'NetworkManager', enabled: 'false'}
    

      

    4.8. 此时的ansible目录结构如下

    /etc/ansible/
    ├── ansible.cfg
    ├── hosts
    ├── roles
    │   ├── cache
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   ├── ceph
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   ├── default
    │   │   ├── files
    │   │   │   ├── chrony.conf
    │   │   │   ├── resolv.conf
    │   │   │   └── rhel7-actual-x86_64.repo
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   ├── dr
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   ├── etcd
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   ├── k8s
    │   │   ├── files
    │   │   ├── handlers
    │   │   │   └── main.yml
    │   │   ├── meta
    │   │   │   └── main.yml
    │   │   ├── tasks
    │   │   │   └── main.yml
    │   │   ├── templetes
    │   │   └── vars
    │   │       └── main.yml
    │   └── mysql
    │       ├── files
    │       ├── handlers
    │       │   └── main.yml
    │       ├── meta
    │       │   └── main.yml
    │       ├── tasks
    │       │   └── main.yml
    │       ├── templetes
    │       └── vars
    │           └── main.yml
    ├── start.retry
    └── start.yml
    
    50 directories, 35 files

    4.9. 一些常用的命令组合

    ansible-doc -l
    
    ansible-doc -s MODULE_NAME
    
    ansible GROUP_NAME -s MODULE_NAME -a ARGVS
  • 相关阅读:
    ecshop在PHP 5.4以上版本各种错误问题处理
    PHP:字符串转数组,数组转字符串;字符串截取、替换、查找
    js 数据存入数组
    javascript获取焦点对象ID
    ajax 提交序列化表单
    muiwe-选项卡bivew和div模式
    mui的header调整位置
    MUI页面传值取值
    百度地图js自定义控件
    解决百度地图js在移动端点击无效
  • 原文地址:https://www.cnblogs.com/demonzk/p/8203507.html
Copyright © 2011-2022 走看看