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)的更多相关文章

  1. 通过重新构建Kubernetes来实现更具弹性的容器编排系统

    通过重新构建Kubernetes来实现更具弹性的容器编排系统 译自:rearchitecting-kubernetes-for-the-edge 摘要 近年来,kubernetes已经发展为容器编排的 ...

  2. 容器编排系统之Kubernetes基础入门

    一.kubernetes简介 1.什么是kubernetes?它是干什么用的? kubernetes是google公司用go语言开发的一套容器编排系统,简称k8s:它主要用于容器编排:所谓容器编排简单 ...

  3. Docker应用:Docker-compose(容器编排)

    阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) 前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示 ...

  4. Win10上的Docker应用:Docker-compose(容器编排)

    阅读目录: Docker应用:Hello World Docker应用:Docker-compose(容器编排) 前言: 昨天完成了Docker入门示例(Docker应用:Hello World),示 ...

  5. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  6. 一文带你看透kubernetes 容器编排系统

    本文由云+社区发表 作者:turboxu Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的 ...

  7. 容器编排系统K8s之flannel网络模型

    前文我们聊到了k8s上webui的安装和相关用户授权,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14222930.html:今天我们来聊一聊k8s上的网络 ...

  8. 容器编排系统之Pod生命周期、健康/就绪状态探测以及资源限制

    前文我们了解了在k8s上的资源标签.标签选择器以及资源注解相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14141080.html:今天我们来聊下k8 ...

  9. 容器编排系统K8s之ConfigMap、Secret资源

    前文我们了解了k8s上的pv/pvc/sc资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14188621.html:今天我们主要来聊一下 ...

随机推荐

  1. PlatformIO手工升级stcgal到1.6版本

    PlatformIO自带的stcgal版本为1.4, 这个版本只支持到STC15, 不支持STC8. 在使用PlatformIO内建的upload写入STC8A8K64S4A12时, 会提示不识别的协 ...

  2. github访问慢处理办法

    Windows 系统:C:\Windows\System32\drivers\etc\hostsLinux 系统:/etc/hostsMac(苹果电脑)系统:/etc/hostsAndroid(安卓) ...

  3. 再谈多线程模型之生产者消费者(多生产者和多消费者 )(c++11实现)

    0.关于 为缩短篇幅,本系列记录如下: 再谈多线程模型之生产者消费者(基础概念)(c++11实现) 再谈多线程模型之生产者消费者(单一生产者和单一消费者)(c++11实现) 再谈多线程模型之生产者消费 ...

  4. 【LeetCode】1135. Connecting Cities With Minimum Cost 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Kruskal算法 日期 题目地址:https://l ...

  5. 【LeetCode】383. Ransom Note 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...

  6. Python Revisited Day 09 (调试、测试与Profiling)

    目录 9.1 调试 9.1.1 处理语法错误 9.1.2 处理运行时错误 9.1.3 科学的调试 9.2 单元测试 9.3 Profiling 9.1 调试 定期地进行备份是程序设计中地一个关键环节- ...

  7. Simplicial principal component analysis for density functions in Bayes spaces

    目录 问题 上的PCA Hron K, Menafoglio A, Templ M, et al. Simplicial principal component analysis for densit ...

  8. MySQL创建数据库 easyShopping,包括area表、goods表、customer表、orders表、ordersdetall表、test表

    MySQL创建数据库 easyShopping,包括area表.goods表.customer表.orders表.ordersdetall表.test表 商品表表结构: 字段名 说 明 类 型 长 度 ...

  9. springboot配置health接口

    springboot配置health接口 spring-boot-starter-actuator 健康监控配置及使用 这样是可以看到一些结果的 如果在配置文件中用了下面这个,也是可以生效的 # 不进 ...

  10. gPRC基本介绍

    1.说明 gRPC英文全名为Google Remote Procedure Call, 即Google远程过程调用, 是Google发布的一个高性能.通用的开源RPC框架, 2.gRPC定义 gRPC ...