【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
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号