【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

 

posted @ 2018-01-05 11:40  炼狱腾蛇  阅读(194)  评论(0编辑  收藏  举报