本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重!

作者: 肖德时

原文:

http://www.infoq.com/cn/articles/deploy-your-application-like-google

【编者按】Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源。Docker提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。为了更好的促进Docker在国内的发展以及传播,我们决定开设《深入浅出Docker》专栏,邀请Docker相关的布道师、开发人员、技术专家来讲述Docker的各方面内容,让读者对Docker有更深入的了解,并且能够积极投入到新技术的讨论和实践中。另外,欢迎加入InfoQ Docker技术交流群交流Docker的最佳实践,QQ群号:124378115。

1.概述

谷歌发起的开源项目从来都是广受技术圈的关注和讨论,本文将介绍的就是最新的容器编排管理系统Kubernetes。Kubernetes开源项目版本更新频繁,对于初次使用者来说其定义大量的技术术语并且随时会有新术语出现。在这种不稳定的技术框架之下,对使用者来说确实带来了一定的技术门槛。为了掌握Kubernetes的核心技术概念,本文尝试通过深入阅读官方文档资料并整理出核心的使用实践思路,以飧国内Kubernetes技术爱好者参考研究。

1.1 Kubernetes是什么

Kubernetes是一个容器集群的编排管理系统。这里对于“编排”的理解应该基于如何在跨Docker主机的场景之下统一管理容器集群的方法。当前的Docker技术主要提供单机版的容器管理实践,很多第三方厂商通过自己以往的网络经验推出自己的容器编排工具,Google推出的Kubernetes技术是在这个背景下创立的开源项目。这个项目尝试要解决的问题就是简化开发和运维容器集群的工作,让开发和运维能把这个系统当一台电脑看待。这个思想在没有Docker容器技术之前,早已在分布式系统中得到大量应用,类如Hadoop、Mesos、Yarn。由于虚拟化技术的限制,对于更大实例规模仍然有很大的局限性。Docker技术出现后,本来已经很复杂的分布式系统开始尝试向更大规模的集群规模实现,这个实现标准的诱惑力让更多的厂商参与进来并尝试在原有Mesos、Yarn类集群调度系统中开始应用Docker技术。那么Kubernetes和Mesos类相比较,它的优势是没有资源调度算法,只关注容器的管理。而Mesos、Yarn之类调度系统本身有完善的调度系统经验,如何把Docker编排的架构加入到原有系统中,需要一些标准设计参考实现,这个时候Kubernetes的出现正好弥补了这个需要。

1.2 Kubernetes技术术语概览

第一,在Kubernetes的集群环境里Pods是最小的可部署单元,它表示同属于一个应用的容器群的逻辑集合。

第二,Master节点提供了集群统一视图的中心控制点。我们可以用一个Master节点来控制多个Minion节点。

第三,Minion是一个工作节点,它将运行Master节点交付的任务。Minions能运行一个或多个Pods。它提供了在容器环境下一个应用级别的虚拟机。

通过以下概念图,我们可以更加清晰的看到Kubernetes的技术全貌。

让我们再深入一点,讲一讲Kubernetes是如何做到这些特性的。

1.3 与Docker工具链的关系

Docker近期推出的三大套件:Compose、Swarm、Machine都提供了一些Kubernetes的功能,我们需要了解他们之间的区别,让我们能更好的利用Kubernetes做好基础。

2.使用实战

我们可以参照官方提供的各类平台安装脚本来部署Kubernetes集群系统,本文采用Ubuntu系统作为基础系统用来安装Kubernetes集群。官方提供的脚本按照以下几步安装即可安装成功:

首先,把Kubernetes的源码下载到每一台集群机器上,自行构建最新版的套件。

$ cd cluster/ubuntu-cluster
$ sudo ./build.sh
$ sudo cp ./binaries/* /opt/bin   #复制到/opt/bin目录,主要是为了方便部署脚本调用。

然后,配置Kubernetes集群组件,假设我们的机器清单如下:

IP Address

Role

192.168.100.30

master

192.168.100.31

minion

192.168.100.32

minion

只需要到cluster/ubuntu-cluster目录下执行一遍configue.sh就可以完成配置。

比如在master节点(192.168.100.30)上:

$ sudo ./configure.sh
Welcome to use this script to configure k8s setupPlease enter all your cluster node ips, MASTER node comes first
And separated with blank space like "  ":  192.168.100.30 192.168.100.31 192.168.100.32This machine acts asboth MASTER and MINION:    1only MASTER:               2only MINION:               3
Please choose a role > 2IP address of this machine >  192.168.100.30Configure Success

当你看到信息“Configure Success” 时代表这台机器的配置算完成了。

当然,在官方的Ubuntu例子中,它使用Flannel创建了一套覆盖网络(Overlay Network),通过这个网络实现了跨主机的容器互联互通。大家可以通过图1flannel网络截图知道flannel0和docker0被分在同一网段,Docker内部容器ip和docker0网关之间是有NAT的,通过flannel+etcd提供自定义的udp数据包,实现跨主机的容器之间的互联,通过这个例子可以帮我们深入的理解跨主机容器互联SDN的主要实现思路。

图1 flannel网络截图

在部署完Kubernetes系统后我们可以通过内置的命令来验证服务是否正常。比如运行

$ kubectl get minions
NAME                LABELS              STATUS
192.168.100.30                  NotReady
192.168.100.31                  Ready
192.168.100.32                  Ready

好了,系统成功了。我在部署的过程中发现,并不是每次都能顺利完成安装。比如端口被占用,关键服务没起来等情况。那么我把这些情况总结一下,方便大家排除故障:

  • master节点,主要的服务是kube-apiserver、kube-controller-manager、kube-scheduler,如下截图显示需要保证能运行:

    如果没有看到运行的进程,应该去看一下运行日志,在Ubuntu的安装实例中,日志统一放在/var/log/upstart/目录下。

  • slave节点,主要的服务是kube-proxy、kubelet两个服务,如下截图显示需要保证能运行:

  • 网络相关的组件,主要是etcd服务,还有SDN的组件服务类如Flannel。这一块出问题的情况很少,我遇到大多数问题都是集中在网络拓扑上,通过学习理解这种网络就可以基本解决问题。
  • Kubernetes项目还不是生产级别的工程,没有在实际的场景中经过生产级别的验证。我们正好通过官方提供的example目录中的例子理解我们的场景中到底需要什么功能,然后反馈到社区,让Kubernetes越来越成熟。

3.总结

Kubernetes在2014年9月发布第一个版本之后,版本迭代都是按周实施的。官方还不建议用户在生产环境中使用这套系统。但是它的设计思想以及简洁的架构设计足以让我们借鉴到很多工程上的宝贵经验。在借鉴的成功案例中,红帽的Openshift最新版本V3中就成功应用了Kubernetes实现技术。所以,Kubernetes项目是一个值得大家借鉴学习的优秀开源项目,通过理解它的设计思想,可以很快应用到本地的容器编排集群系统实现中。

4. 作者简介

肖德时,数人科技(www.dataman.io)CTO,致力于构建基于Mesos/Docker的容器云计算平台。Twitter/微博账号:xds2000,邮箱:xiaods@gmail.com

深入浅出Docker(六):像谷歌一样部署你的应用相关推荐

  1. 深入浅出Docker(四):Docker的集成测试部署之道

    本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重! 作者: 肖德时 原文: http://www.infoq.com/cn/articles/d ...

  2. 《深入浅出Docker》学习笔记

    <深入浅出Docker>学习笔记 第三章:docker 安装 linux服务器安装:-略 windows服务器安装:-略 确认安装结果 docker --version 第四章:纵观DOc ...

  3. 深入浅出Docker(一):Docker核心技术预览

    [编者按]Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种 ...

  4. 深入浅出Docker(五):基于Fig搭建开发环境

    本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重! 作者: 肖德时 原文: http://www.infoq.com/cn/articles/d ...

  5. 深入浅出Docker(二):Docker命令行探秘

    本文原创版权归 infoq 肖德时 所有,此处为技术收藏,如有再转,请于篇头保留原创作者及出处,以示尊重! 作者: 肖德时 原文: http://www.infoq.com/cn/articles/d ...

  6. Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

    转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...

  7. Docker私有仓库与Harbor部署使用

    Docker私有仓库与Harbor部署使用 一.本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 3. 运行registry容器 4. Docke ...

  8. Linux下使用Docker做mysql的镜像部署

    接着上一篇文档,上一篇文档讲述了如何使用Docker在Linux环境中部署一个javaWeb项目,这篇文档来讲一下如何做mysql镜像部署. 一.拉取mysql镜像 Docker中执行命令: # do ...

  9. Docker Swarm集群中部署Traefik负载均衡器

    一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...

最新文章

  1. 关于mpvue音乐小程序github仓库设置私有的声明
  2. 在IIS 5.1 或IIS6 中配置PHP 的FastCGI模式
  3. html如何将多个复选框组织成一组_[Selenium]18.如何处理一组元素
  4. matlab作业5答案,《matlab作业题答案》.doc
  5. 异域linux内核漏洞,Linux内核再现漏洞!这次11年后才发现
  6. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)...
  7. Sass--占位符 %placeholder
  8. 酷Q萌萌机器人_GitHub - Titvt/CQRobot: 酷Q机器人——麦萌萌小管家
  9. 怎样在计算机硬盘里新建文件,高手教你轻松新建文件夹
  10. mysql win10 优化设置_Win10电脑优化必做的几个优化技巧提升速度!
  11. 数26个大写字母里带圈的字母个数
  12. 中秋赏月地图出炉,跟随锦江之星去赏月
  13. cc150第一章JAVA字符串和数组总结
  14. CSS 弹性盒子布局详解
  15. C语言实现在不知道具体行数的情况下实现多行字符串的输入
  16. STM32F103RC 2路ADC 采集显示,水位传感器、MQ2
  17. SpringCloud-Gateway之RoutePredicateFactory
  18. web应用使用skype教程
  19. 谷歌浏览器如何安装vue调试工具
  20. Android手游SDK那点事(一)简述

热门文章

  1. 利用c51进行数模转换并在液晶屏上显示_7.0寸tft触摸液晶屏可满足不同操作需求...
  2. 什么是联表查询?(深度刨析,建议收藏)
  3. PTA—计算摄氏温度(C语言)
  4. HTML/CSS 面试总结
  5. git 小乌龟 TortoiseGit 记住账号密码
  6. pcl之解决No CMAKE_CUDA_COMPILER could be found.
  7. html菜单wodpress,wordpress进阶教程(二十二):初步了解菜单
  8. error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析
  9. Halcon缺陷检测——差分
  10. Android每日一记