【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
【Linux】【Services】【SaaS】Docker+kubernetes(3. 用ansible管理机器和软件)的更多相关文章
- Ansible 管理服务和软件
[root@Ansible ~]# ansible RAC -m yum -a 'name=iscsi-initiator-utils state=installed' RAC_Node1 | suc ...
- Docker 运维高级应用管理
Docker 基本应用 1.Docker 介绍及安装 2.Docket 使用命令 3.Docker run命令参数整理 4.Docker 构建镜像 Docker Compose 高级应用 1.Doc ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(1. 基础概念与架构图)
1.简介 1.1. 背景:公司正在进行敏捷开发环境的搭建,以取代传统的架构,好处大大的,我就不赘述了.公司原来负责这个项目的同事要转组,我只好交给另外同事继续,但是为了防止同样的事情,我也需要深入了 ...
- 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh
摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...
- Docker+ Kubernetes已成为云计算的主流(二十五)
前言 最近正在抽时间编写k8s的相关教程,很是费时,等相关内容初步完成后,再和大家分享.对于k8s,还是上云更为简单.稳定并且节省成本,因此我们需要对主流云服务的容器服务进行了解,以便更好地应用于生产 ...
- 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...
- 从Docker 到Jenkins 到Ansible的部署经验
从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作.我从频繁的部署工作中,逐渐找到了一些偷懒的方法.从传统的Java -jar命令启动服务,到通过 ...
- Docker Kubernetes 环境搭建
Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...
- Docker Kubernetes Service 网络服务代理模式详解
Docker Kubernetes Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注 ...
随机推荐
- [python]RobotFramework自定义库实现UI自动化
1.安装教程 环境搭建不多说,网上资料一大堆,可参考https://www.cnblogs.com/puresoul/p/3854963.html,写的比较详细,值得推荐.目前python3是不支持r ...
- url,href,src 之间的区别
url 统一资源定位符 <style> #bg{ background-image:url("img/bg.png"); } </style> 区别: sr ...
- 全球首发-基于.NET 6长线支持Zoomla!逐浪CMS v8.6.0正式发布
传送门: https://www.z01.com/down/3778.shtml 全新Zoomla!逐浪CMS v8.6.0 全于首个基于.net 6长线支持的CMS-Zoomla!逐浪CMS v8. ...
- 我個人喜歡的一些Ubuntu的相關配置
1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...
- [loj2049]网络
考虑整体二分,假设二分到区间$[l,r]$,即要对若干个询问,判断这些询问的答案与$mid=\lfloor\frac{l+r}{2}\rfloor$的关系 根据题意,答案$\le mid$等价于重要度 ...
- [cf1236F]Alice and the Cactus
首先,我们要用到期望的一个性质: 对于两个随机变量$X$和$Y$(不需要相互独立),有$E(X+Y)=E(X)+E(Y)$ 另外,对于一个仙人掌,令$n$为点数,$m$为边数,$c$为简单环个数,$X ...
- [atARC109E]1D Reversi Builder
归纳每一次操作后必然是两个颜色相同的连续段(即ww...bb...或bb...ww...),对操作的位置分类讨论不难证明正确性 当$c_{1}=c_{n}$,由于端点颜色不会修改,再根据该结论,可以得 ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
RocketMQ的前提回顾 RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆 ...
- 基于nexus私服配置项目pom.xml和maven settings.xml文件
备注:搭建nexus私服请参考上一篇文章基于Docker搭建Maven私服Nexus,Nexus详解 一:将jar发送到nexus私服务器 1.pom.xml文件添加配置 pom.xml文件中的这个版 ...
- [NOIP2017 提高组] 宝藏
考虑到这种对于某种操作顺序有一个权值. 且这个权值有一个\(O(n)\)或者更好的复杂度求出. 求最值. 那可以用模拟退火. #include<iostream> #include< ...