容器化实践

说到容器化就免不了说Docker, 毫无疑问,DocKer成了近些年来最火热,甚至最具颠覆性的技术之一。百度Docker,看到Docker官网几个醒目的大字“Build, Ship, and Run Any App, Anywhere”,由此我们想到上世纪90年代Java发布的时候,每一家公司都表示了极大的兴趣,直到他们意识到Java实际上对他们自有的平台其实是一种巨大威胁。Java的愿景是“Write Once,Run Anywhere”, 而Docker提出了“Build once,Run anywhere,Configure once,Run anything”。很大程度上,二者都对某些公司形成了潜在的威胁。尽管我们目前还看不到具体的一些公司针对可能的威胁采取的应对措施,但未来是谁也无法保证类似Java或VMware的历史不会重演。

Docker技术的简要综述:

Docker利用了一些Linux核心工具,比如cGruops、Namespace、SELinux和AUFS等技术,对进程进行封装隔离。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。起初Docker只是LXC容器管理子系统的前端,但它在0.9版本中引入了libcontainer,从 1.11 开始,则进一步演进为使用runC和containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。


docker-execdriver-diagram.png

Docker和虚拟机对比

虚拟机:
简单说虚拟机(VM)是将一台服务器变成多台服务器的物理硬件的抽象。管理程序允许多台虚拟机在单台机器上运行。每个VM都包含一个操作系统的完整副本,一个或多个应用程序,必需的二进制文件和库 - 占用的空间很大。VM启动缓慢。
Docker:

容器是应用程序层的一个抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为孤立进程运行。容器占用的空间少于虚拟机(容器图像的大小通常为几十MB),并且启动速度特别快。说白了,就是一个更轻量级的虚拟机,但是这个虚拟机没有操作系统和设备(操作系统是共享的),则是一种以应用程序为中心的虚拟化技术
Docker-VM.png

Docker使用的阶段

Docker自2013年来非常火热来,随着需求的变化分为两个阶段
第一阶段:Docker还是当初的Docker
是Docker对一个(或一组)进程的封装,一个容器需要绑定宿主机的端口来向宿主机之外的网络提供服务,为了避免端口冲突,对于需要暴露端口的容器,Docker会随机绑定一个宿主机端口,这个时候就需要服务发现来帮助不同机器上的服务来进行通信了。可能更适用是单一个的程序或者程序关联性很小的应用,随着系统慢慢的庞大就会暴露出问题。
第二阶段:开源的容器集群管理系统
常见的开源容器集群管理系统有Kubernetes,Swarm和Mesos 。随着Docker官方宣布支持Kubernetes,Kubernetes大有统一容器天下之势,所以我们主要讲一下kubernetes。
Kubernetes是Docker生态圈里的重要一员,Google开源的容器集群管理系统,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes优势:

  • 容器编排
  • 轻量级
  • 开源
  • 弹性伸缩
  • 负载均衡

讲诉Container在kubernetes的大致过程,用户通过kubectl提交需要运行的docker Container(pod),apiserver负责etcd存储的所有操作,且只有apiserver才直接操作etcd集群,scheduler扫描分配主机,kubelet找到需要跑的Container在当前Node中运行,用户提交RC描述,replication contorller监视集群中的pod并保持pod数量,用户提交service描述文件,由kube proxy负责具体工作流量转发。如下图:


K8sFramework.png

一个kuberbetes集群是由分布式存储(etcd)、服务节点(Minion,etcd现在称为Node)和控制节点(Master)构成的。所有的集群状态都保存在etcd中,Master节点上则运行集群的管理控制模块。Node节点是真正运行应用容器的主机节点,在每个Minion节点上都会运行一个Kubelet代理,控制该节点上的容器、镜像和存储卷等。

kuberbetes组件,如图:


kuberbetes核心组件.png

Pod

Pod是Kubernetes调度的基本单位,Pod 安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。

service

Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签来选取服务后端,一般配合Replication Controller或者Deployment来保证后端容器的正常运行。

Replication Controller

ReplicationController(也简称为rc)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而异常多出来的容器也会自动回收。ReplicationController的典型应用场景包括确保健康Pod的数量、弹性伸缩、滚动升级以及应用多版本发布跟踪等。

apiserver

kube-apiserver是Kubernetes最重要的核心组件之一,主要提供以下的功能

  • 提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等
  • 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)

scheduler

scheduler负责分配调度Pod到集群内的节点上,它监听apiserver,查询还未分配Node的Pod,然后根据调度策略为这些Pod分配节点。
调度器需要充分考虑诸多的因素:

  • 公平调度
  • 资源高效利用
  • 数据本地化
  • 内部负载干扰
  • 服务质量

Controller Manager

Controller Manager是Kubernetes的大脑,它通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态。

Kubelet

每个节点上都运行一个kubelet服务进程,默认监听10250端口,接收并执行master发来的指令,管理Pod及Pod中的容器。每个kubelet进程会在API Server上注册节点自身信息,定期向master节点汇报节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。

proxy

每台机器上都运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡。

应用部署架构图:


K8sDeploy.png

主要讲一下Gkube

容器控制程序,由Jenkins job通过 Execute shell 调用,主要功能是管理kubernetes集群,创建,删除,变更,查看pod(docker)容器。python3.4编写,调用kubernetes etcd glusterfs的API进行资源管理。主要逻辑是当job进行调用后查询etcd是否有该job对应的docker信息,如果有则移交给代码更新脚本,如果没有则创建一个容器,并初始化部署环境,然后发布代码。

部署成果展示:

Kubernetes

访问的K8s跑的应用
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容