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
  • 相关阅读:
    深入理解Nginx及使用Nginx实现负载均衡
    Linux内存管理之伙伴系统之伙伴系统概述
    TCP 协议如何解决粘包、半包问题
    Linux CPU亲缘性详解
    单实例
    关联容器和无序关联容器的区别
    基于范围的for循环
    vector讲一个容器的内容拷贝到另一个容器,容器的区间删除
    win32窗口添加按钮及按钮消息相应,动态显示时间
    判断是不是纯数字字符串
  • 原文地址:https://www.cnblogs.com/demonzk/p/8203507.html
Copyright © 2011-2022 走看看