欢迎来到容器世界,我是你们的导游 - 阿良

从14年开始关注容器技术,15年开始使用容器技术,这些年看到了容器技术爆发式发展、版本的快速迭代,记得当时Docker版本还是0.7,Kubernetes版本是1.0,到现在Docker CE 18,Kubernetes 11。
一门新技术的产生必定是为解决某些问题而存在的,同样也会带来一定的问题,容器技术是一项颠覆性技术,改变了企业的CI/CD(持续集成/持续交付,部署)环节的方式,开启了一场革命,我们一起看看这场革命怎么实行的!

Docker是什么?

2013年初,Docker横空出世,一个怀揣着改变应用程序部署的革命技术,目前看来,显然它做到了!
Docker是一个开源的应用容器引擎,对应用进程进行封装隔离,并且独立于宿主机与其他进程。Docker理念是将应用及依赖包打包到一个可移植的镜像中,可以运行到任意Docker引擎上。具有快速部署、可移植性、环境隔离等特点。

Kubernetes是什么?

Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。
K8S在Docker容器技术的基础之上,大大地提高了容器化部署应用简单高效。并且具备了完整的集群管理能力,例如服务发现、资源配额、缩容扩容、动态更新、持久化存储、监控、日志等,涵盖项目周期的各个环节。
经过这几年的快速发展,K8S已经成为建设容器云平台的首选方案。

Docker与Kubernetes有什么联系?

说到这里,就涉及到容器云平台核心组成了。
Docker是一个容器引擎,用于运行容器,Kubernetes是一个容器编排系统,不具备容器引擎功能,相比Docker是一个更高级封装,而他们在一起堪称珠联璧合,一起搞大事!如图:

企业典型案例

1.IBM基于Kubernetes建设私有云平台
https://www.ibm.com/cloud/container-service
2.红帽OpenShift容器平台基于Kubernetes作为基础
https://www.openshift.com/
3.京东从OpenStack迁移到Kubernetes
http://www.cdrpic.com/html/41001.html
4.阿里云上线Kubernetes服务
https://www.aliyun.com/product/kubernetes?spm=5176.10695662.cloudEssentials.10.3417590e9oyJ9e
5.奇虎360容器云平台
https://wenku.baidu.com/view/6e1d3b2869dc5022abea007a.html (文档较早)
6.新浪微博基于Docker的混合云架构与应用实践
http://www.dockerinfo.net/3527.html

还有网易、美团、搜狗等众多互联网公司基于Docker+Kubernetes容器云平台支撑核心业务。容器技术大势所趋,深得民心,已经成为运维工程师、架构师的必备技能之一。

聊聊工作中的痛点

我的想法很简单,研究自己喜欢的技术,成为一名合格的工程师,把领导交代的任务如期的完成好。这样就够了嘛?

在日常运维中:

1. 多开发语言,多运行环境

公司发展迅速,业务量蹭蹭的往上涨,同时也会开展其他业务线,打造自己的生态圈。多业务线维护给运维也带来一定挑战,例如多项目、多开发语言,例如开发语言有Java、Go、Python、还有PHP,这就意味着运行环境可能非常复杂,还要要维护多个版本,写N个脚本、长期积累还会导致环境臃肿、杂乱、故障率高、不易维护等问题,当迁移业务时,这个不敢动,那个不敢动!

2. 环境不一致引发的争议

开发人员通常在Mac、Windows系统上开发项目,功能上线,合并代码到版本仓库,随后通知测试部门测试,测试通过后发布到生产环境,目前大多数互联网公司都是这种流程。
那么问题来了,项目可能在测试环境或生产环境就运行不起来...,为什么呢?操作系统、软件版本、少依赖包、配置忘记修改了等等?从而出现这些神秘的Bug,神秘的配置。有同学可能说:写一个参考文档。通常还会有遗漏,而且这依赖于文档编写能力和理解能力。

3. 微服务架构带来的问题

微服务架构是当下最流行的一种业务架构开发模式,目的是让臃肿的业务系统拆分成多个微服务,一个微服务完成某个特定的功能,如电商的购物车、支付、用户后台、消息等等。每一个微服务都是微型六角形应用,都有自己的业务逻辑和适配器,微服务部署在多台服务器上,每次项目升级都要java -jar启动服务,维护几十台这样的服务器,简直苦不堪言,感觉要吐血了。

4. 项目上线周期长

马上就618、双11了,到时业务访问量会很大,得扩容服务器了。
新项目/扩容大致流程:申请资源 -> 资源审批 -> 虚拟机创建 -> 环境部署 -> 代码测试 -> 上线。
多部门协作,这个流程起码得一周吧!流程化提高一定生产力也可能带来一定局限:增加事项落实时间;那如何才能做到业务快速扩展并发能力和缩短上线周期呢?难道这个流程真的不能再优化了嘛?

上述问题你有遇到过吗?有什么解决办法吗?在容器技术未出现之前可能很难解决这些问题,但容器技术的出现针对这些痛点交出一份满意的答卷,能帮助企业IT基础架构解决或者改善现状,接下来让我们一起看看如何改变这个局面的!

你能从本专栏获得什么?

本专栏从当下容器领域最为主流的DockerKubernetes技术为讲解对象,深入浅出地讲解基于Docker/Kubernetes建设容器云平台涉及的技术点及注意事项,为你在企业中落地容器云平台提供实战型指导,以便快速在工作中实践容器技术。
学习容器技术最大障碍不是网上资源太少,而是网上资源太多。大多数缺章少节的,很难按照教程跑通,本专栏根据企业实践经验及1年容器技术教学经验重新梳理出最实用的课程体系,无论是开发、运维,还是测试,都能帮助你大大提高工作效率与架构思想。

学习目标:

1.掌握Docker、Kubernetes核心概念
2.熟悉Docker日常运维管理
3.熟练部署Kubernetes集群
4.熟悉容器云平台日常运维管理
5.容器云平台架构设计及规划
6.将微服务业务架构迁移到容器云平台
7.Kubernetes核心功能企业应用,包括Pod、Service、Ingress、Volume、PersistenVolumes、HA、监控、日志、网络及工作原理。

实践过的朋友可能有这些问题:

1.微服务业务架构怎么部署?
2.怎么发布部署的应用?
3.项目在Kubernetes集群中的生命周期是怎样的?
4.如何基于Kubernetes、Jenkins构建一套高效的自动化CI/CD流水线?
5.jenkinsfile一般放到git项目库还是单独做项目?
6.如何构建符合自身业务的Jenkins Slave镜像?
7.如何动态配置不同的编译环境?

有人说Kubernetes学习门槛高?也许吧,K8S具备丰富的功能,相对比较复杂,学习成本自然是有的;再说了,很简单的技术在网上随便找资料就能学会,也就没什么价值了。因此,根据我的实践经验重新梳理课程体系,以项目生命周期每阶段为讲解对象,细说涉及的技术点,帮助你快速建立学习体系。

总结

企业是一个大团队,要想体现个人价值,管好自己的一亩三分地是不行的,我们需要从一个全局角度看事情,发现其中的痛点去解决它;并且大家要建立一个统一的目标,共同围绕这个方向使劲,向自己的客户或用户交付最大化价值及最高质量的成果;团队以项目为导向,而不是职责!
这种文化也是DevOps所倡导的,频繁的交付带来更迅速的反馈,更高效的CI/CD流程可间接带来效益。

本专栏环境

软件环境

软件 版本
操作系统 CentOS7.4_x64
Docker 18.03.1-ce
Kubernetes 1.11

容器平台架构规划

角色 IP 组件
k8s-master1 192.168.0.11 kube-apiserver,kube-controller-manager,kube-scheduler,etcd
k8s-master2 192.168.0.12 kube-apiserver,kube-controller-manager,kube-scheduler,etcd
k8s-node1 192.168.0.13 kubelet,kube-proxy,docker,flannel,etcd
k8s-node2 192.168.0.14 kubelet,kube-proxy,docker,flannel
负载均衡 192.168.0.10 LVS