Docker+etcd+flanneld+kubernets 构建容器编排系统(1)
Docker: Docker Engine, 一个client-server 结构的应用, 包含Docker daemon,一个 用来和daemon 交互的REST API, 一个命令行应用CLI。 Docker Engine 在命令行中接收并解析、执行docker 命令;
etcd: 是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目;
可以参考: http://www.dockerinfo.net/etcd%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D
flannel: Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
可以参考: http://dockone.io/article/618
kubernets: Kubernetes是一个基于Docker容器的开源编制系统,它能在跨多个主机上管理Docker应用,并提供应用程序部署 维护和扩展的基本机制;
可以参考: https://www.kubernetes.org.cn/k8s
当它们结合在透明地为用户提供原生态系统,如“需要5个 Nginx服务器和1个 MySQL服务器运行". Kubernetes具有自我修复机制,如重新启动 重新启动定时计划 复制容器以确保恢复状态,用户只需要定义状态,那么 Kubernetes就会确保状态总是在集群中。
Docker定义了运行代码时的容器,有命令用来启动 停止 重启 链接容器,Kubernetes使用Docker打包以及实例化应用程序。
一个典型的应用程序必须跨多个主机。 例如,您的web层(Apache )可能运行在一个容器。 同样地,应用程序层将会运行在另外一组不同的容器中。 web层需要将请求委托给应用程序层。 当然,在某些情况下,你可能将web服务器和应用服务器打包在一起放在相同的容器。 但是数据库层通常运行在一个单独层中。 这些容器之间需要相互交互。 使用上面的任何解决方案都需要编制脚本启动容器,以及监控容器,因防止出现问题。 而Kubernetes在应用程序状态被定义后将为用户实现所有这些工作。
给大家推荐一个大神博客: http://www.cnblogs.com/kevingrace/p/5575666.html 以下内容kubernets 参考自这篇文章;
ectd 部署:
可以部署单节点,同时也支持集群,下面我们采用集群方式,(单机部署自己可以玩一下);
1. 下载安装包(服务器采用的是亚马逊服务器,需要FQ)
官方下载地址: https://github.com/coreos/etcd/releases/
wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz
2. 解压文件,并将可执行文件添加到系统路径中
tar xvf etcd-v3.2.18-linux-amd64.tar.gz -C /usr/local
cd /usr/local/etcd-v3.2.18-linux-amd64
cp etcd* /usr/local/bin
3. 将etcd 服务注册为系统单元,使用systemctl 管理
vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=etcd
[Service]
Environment=ETCD_NAME=infra0
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_INITIAL_ADVERTISE_PEER_URLS=http://192.168.209.160:2380
Environment=ETCD_LISTEN_PEER_URLS=http://192.168.209.160:2380
Environment=ETCD_LISTEN_CLIENT_URLS=http://192.168.209.160:2379,http://127.0.0.1:2379
Environment=ETCD_ADVERTISE_CLIENT_URLS=http://192.168.209.160:2379
Environment=ETCD_INITIAL_CLUSTER_STATE new
Environment=ETCD_INITIAL_CLUSTER_TOKEN=Kubernetes
Environment=ETCD_INITIAL_CLUSTER=infra0=http://192.168.209.160:2380,infra1=http://192.168.209.140:2380,infra2=http://192.168.209.158:2380
ExecStart=/usr/local/bin/etcd
[Install]
WantedBy=multi-user.target
解释:
ETCD_NAME: etcd 服务的名字,不等同于主机名
ETCD_INITIAL_ADVERTISE_PEER_URLS: 通知其它Etcd 实例的地址;
ETCD_LISTEN_PEER_URLS: 监听其它Etcd 实例的地址;
ETCD_LISTEN_CLIENT_URLS: 监听客户端地址,此地方必须监听127.0.0.1地址 #
ETCD_ADVERTISE_CLIENT_URLS: 通知客户端地址;
ETCD_INITIAL_CLUSTER_STATE: 初始化群集的状态new 代表新建
ETCD_INITIAL_CLUSTER_TOKEN: 初始化集群的token
#以上几项地址填写本节点的实际地址
ETCD_INITIAL_CLUSTER: 初始化集群节点的地址
4.将配置发送到其它节点上
scp /usr/lib/systemd/system/etcd.service 192.168.209.160:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service 192.168.209.158:/usr/lib/systemd/system/
5. 启动各个节点的etcd 服务
systemctl daemon-reload; systemctl start etcd
6. 查看etcd 节点的信息(正常情况下每个节点都可以查看)
etcdctl member list
7. 测试验证集群是否正常(任意节点均可操作查看)
8. 设置Flannel 子网信息
etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16","SubnetMin":"172.17.1.0","SubnetMax":"172.17.254.0"}'
至此Etcd 集群搭建完毕
Flannel 部署
1. 下载安装包(同样需要FQ)
wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
2. 解压文件,并将可执行文件添加到系统路径中
tar xvf flannel-0.5.5-linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
cp flanneld mk-docker-opts.sh /usr/local/bin/
3. 将flannel 服务注册为系统单元,使用systemctl 管理
vim /usr/lib/systemd/system/flanneld.service
[Unit]
Description=flannel
[Service]
ExecStart=/usr/local/bin/flanneld -etcd-endpoints=http://192.168.209.160:2379 # 这个地址为etcd 的领导地址(etcdctl member list 可以查看到)
[Install]
WantedBy=multi-user.target
4. 需要部署docker 节点都需要安装
将同样配置即可
5. 启动flannled
systemctl daemon-reload ; systemctl start flanneld
6. 启动后系统将会增加一块名字为flannel0 的网卡
4. 查看etcd 可以看到flanneld 申请的记录(记录为对应节点的IP)
[root@localhost lib]# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/172.17.99.0-24
/coreos.com/network/subnets/172.17.80.0-24
/coreos.com/network/subnets/172.17.16.0-24
5. 生成修改Docker 的启动参数(每个flanneld 申请不一样)
要想使 docker 使用flannel 的网络传递数据,要修改一些启动参数
mk-docker-opts.sh -i # 生成的文件在/run/docker_opts.env
[root@localhost local]# cat /run/docker_opts.env
DOCKER_OPT_BIP="--bip=172.17.16.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
6. 安装docker
yum -y install docker 即可
7. 更改docker 启动参数,如果不更改docker 将会使用自己分配的地址段
vim /etc/sysconfig/docker
OPTIONS='--bip=172.17.99.1/24 --ip-masq=true --mtu=1472 --selinux-enabled --log-driver=journald --signature-verification=false'
8. 启动docker, docker 网卡将会和flannel0 同属于一个网段
9. 验证:
使用两个docker 节点,创建两个容器,两个容器间能够直接通讯
注:
本人也在学习docker 中,从最初的etcd 到flannel 也是不断找资料,踩了不少坑,在不断踩坑中,学习了不少东西,个人感觉最主要的是个人学习能力与实际动手操作能力,希望个人经验能够帮助到你
kubernets 将在下篇文章中介绍;
Docker+etcd+flanneld+kubernets 构建容器编排系统(1)的更多相关文章
- 通过重新构建Kubernetes来实现更具弹性的容器编排系统
通过重新构建Kubernetes来实现更具弹性的容器编排系统 译自:rearchitecting-kubernetes-for-the-edge 摘要 近年来,kubernetes已经发展为容器编排的 ...
- 容器编排系统之Kubernetes基础入门
一.kubernetes简介 1.什么是kubernetes?它是干什么用的? kubernetes是google公司用go语言开发的一套容器编排系统,简称k8s:它主要用于容器编排:所谓容器编排简单 ...
- Docker应用:Docker-compose(容器编排)
阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) 前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示 ...
- Win10上的Docker应用:Docker-compose(容器编排)
阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) 前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示 ...
- 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)
[编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...
- 一文带你看透kubernetes 容器编排系统
本文由云+社区发表 作者:turboxu Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的 ...
- 容器编排系统K8s之flannel网络模型
前文我们聊到了k8s上webui的安装和相关用户授权,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html:今天我们来聊一聊k8s上的网络 ...
- 容器编排系统之Pod生命周期、健康/就绪状态探测以及资源限制
前文我们了解了在k8s上的资源标签.标签选择器以及资源注解相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14141080.html:今天我们来聊下k8 ...
- 容器编排系统K8s之ConfigMap、Secret资源
前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...
随机推荐
- c++之常见数据类型(int,double,float,long double long long 与std::string之间)相互转换(含MFC的CString、含C++11新特性函数)
--- 已经通过初步测试---- ------------------ 下面的是传统常见数据类型的转换(非c++11)--------------- std::string 与其他常用类型相互转换, ...
- cmake之Visual studio无法显示头文件
本文演示cmake版本:3.18 1. 问题 使用cmake创建的Visual Studio 项目都没有显示头文件, 比如: 可以清楚的看见,项目lib_pipe没有显示头文件 2. 配置CMakeL ...
- 【LeetCode】1466. 重新规划路线 Reorder Routes to Make All Paths Lead to the City Zero (Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目地址:https://lee ...
- 【九度OJ】题目1178:复数集合 解题报告
[九度OJ]题目1178:复数集合 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1178 题目描述: 一个复数(x+iy)集合,两种 ...
- 1025 - The Specials Menu
1025 - The Specials Menu PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...
- Vue总结第六天:Vuex (全局变量管理~多个页面共享数据)
Vue总结第六天:Vuex (全局变量管理~多个页面共享数据) 目录 一.Vuex (全局变量管理~~多个页面共享数据) ✿ 更详细的可以看官网:开始 | Vuex 1.什么是Vuex? 2.核心概念 ...
- Adversarial Examples Improve Image Recognition
Xie C, Tan M, Gong B, et al. Adversarial Examples Improve Image Recognition.[J]. arXiv: Computer Vis ...
- 物联网大赛 - Android学习笔记(一) Android概念
一.Android 概念 Android是开放式的手机和电脑操作系统,是基于Linux系统做的上层开发. android可以做些什么? Android可以开发各种手机应用APP,也可以开发车载系统等, ...
- C#中ref关键字的用法总结
ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...
- CSS基础 transform属性的基本使用 移动 旋转 缩放
1.实现元素位移效果 语法:transform:translate(x轴水平移动距离,Y轴垂直移动距离) 取值:正负都可以 取值方式:数字+px 百分比 :参照自己本的盒子的百分比 比如:本身自己的宽 ...