NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Kubernetes+Docker+Istio 容器云实践(一)

  • 2020-02-06
  • 本文字数:2384 字

    阅读完需:约 8 分钟

Kubernetes+Docker+Istio 容器云实践(一)

随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求。近年来,互联网、移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于 Kubernetes+Docker 的容器云方案也随之进入了大众的视野。开普勒云是一个基于 Kubernetes+Docker+Istio 的微服务治理解决方案。

一、Microservices

1571208174990085051.png

1.1 解决大应用微服务化后的问题

现在各大企业都在谈论微服务,在微服务的大趋势之下技术圈里逢人必谈微服务,及微服务化后的各种解决方案。

1.2 当我们在讨论微服务的时候我们在讨论什么?

使用微服务架构有很多充分的理由,但天下没有免费的午餐,微服务虽有诸多优势,同时也增加了复杂性。团队应该积极应对这种复杂性,前提是应用能够受益于微服务。

1.2.1 如何微服务化的问题

  • 微服务要如何拆分

  • 业务 API 规则

  • 数据一致性保证

  • 后期可扩展性考虑


当然这不是本文主要讨论的问题,我不讲微服务具体要如何拆分,每个企业每个应用的情况都不太一样,适合自己的方案就是最好的拆分方案。我们主要来解决微服务化后所带来的一些问题。

1.2.2 微服务化后带来的问题

  • 环境一致性

  • 如何对资源快速分配

  • 如何快速度部署

  • 怎么做基本监控

  • 服务注册与发现

  • 负载均衡如何做


以上都是大应用微服务化所需要解决的基础问题,如果还按照传统的方式使用虚拟机来实现,资源开支将会非常大。那么这些问题要怎么解决呢?比如:


  • 流量管理

  • 服务降级

  • 认证、授权


当然面对上述这些问题我们广大的猿友们肯定是有解决方案的。

1.3 Service governance

1.3.1 Java 体系

假设我们是 Java 体系的应用,那解决起来就很方便了,比如我们可以考虑使用 SpringCloud 全家桶系列。也可以拆分使用:


  • Eureka

  • Hystrix

  • Zuul

  • Spring-cloud

  • Spring-boot

  • ZipKin


Java 体系下能很方便的做以我们微服务化后的基础部分,但依然不能非常舒服地解决环境一致性,并且如果有其他语系的服务将很难融入进去。


我们来看基础编程语言一般有什么组合方式来解决基础问题。

1.3.2 其他体系

  • Consul

  • Kong

  • Go-kit

  • Jaeger/Zipkin


假设我们是使用 Golang 语言,这里再捧一下 Golang 语言。go 语言简直就是天生为微服务而生的语言,实在不要太方便了。高效的开发速度及相当不错的性能,简单精悍。


跑题了~我们使用上面这些工具也可以组成一套还不错的微服务架构。


  • Consul: 当作服务发现及配置中心来使

  • Kong: 作为服务网关

  • Jaeger: 作为链路追踪来使

  • Go-kit: 开发组件


但是这种方案也有问题,对服务的侵入性太强了,每个服务都需要嵌入大量代码,这还是很头疼的。

二、Docker & Kubernetes

基于 Docker+k8s 搭建平台的实践方案。


1571209168494083872.png

2.1 Docker

Docker 是一个非常强大的容器。


  • 资源利用率的提升

  • 环境一致性、可移植性

  • 快速度扩容伸缩

  • 版本控制


使用了 Docker 之后,我们发现可玩的东西变多了,更加灵活了。不仅仅是资源利用率提升、环境一致性得到了保证,版本控制也变得更加方便了。


以前我们使用 Jenkins 进行构建,需要回滚时,又需要重新走一次 jenkins Build 过程,非常麻烦。如果是 Java 应用,它的构建时间将会变得非常长。


使用了 Docker 之后,这一切都变得简单了,只需要把某个版本的镜像拉下来启动就完事了(如果本地有缓存直接启动某个版本就行了),这个提升是非常高效的。


1571209181102046807.jpeg


(图片来源网络)


既然使用了 Docker 容器作为服务的基础,那我们肯定需要对容器进行编排,如果没有编排那将是非常可怕的。而对于 Docker 容器的编排,我们有多种选择:Docker Swarm、Apache Mesos、Kubernetes,在这些编排工具之中,我们选择了服务编排王者 Kubernetes。

2.1.1 Docker VS VM

1571209258505054073.jpeg


  • VM: 创建虚拟机需要 1 分钟,部署环境 3 分钟,部署代码 2 分钟。

  • Docker: 启动容器 30 秒内。

2.2 Why choose Kubernetes

我们来对比这三个容器编排工具。

2.2.1 Apache Mesos

Mesos 的目的是建立一个高效可扩展的系统,并且这个系统能够支持各种各样的框架,不管是现在的还是未来的框架,它都能支持。这也是现今一个比较大的问题:类似 Hadoop 和 MPI 这些框架都是独立开的,这导致想要在框架之间做一些细粒度的分享是不可能的。


但它的基础语言不是 Golang,不在我们的技术栈里,我们对它的维护成本将会增高,所以我们首先排除了它。

2.2.2 Docker Swarm

Docker Swarm 是一个由 Docker 开发的调度框架。由 Docker 自身开发的好处之一就是标准 Docker API 的使用。Swarm 的架构由两部分组成:


1571209269456054048.jpeg


(图片来源网络)


它的使用,这里不再具体进行介绍。

2.2.3 Kubernetes

Kubernetes 是一个 Docker 容器的编排系统,它使用 label 和 pod 的概念来将容器换分为逻辑单元。Pods 是同地协作(co-located)容器的集合,这些容器被共同部署和调度,形成了一个服务,这是 Kubernetes 和其他两个框架的主要区别。相比于基于相似度的容器调度方式(就像 Swarm 和 Mesos),这个方法简化了对集群的管理.


不仅如此,它还提供了非常丰富的 API,方便我们对它进行操作,及玩出更多花样。其实还有一大重点就是符合我们的 Golang 技术栈,并且有大厂支持。


Kubernetes 的具体使用这里也不再过多介绍,网站上有大把资料可以参考。

2.3 Kubernetes in kubernetes

kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署、调度和节点集群间扩展。


  • 自动化容器的部署和复制

  • 随时扩展或收缩容器规模

  • 将容器组织成组,并且提供容器间的负载均衡

  • 很容易地升级应用程序容器的新版本

  • 提供容器弹性,如果容器失效就替换它,等等…

2.4 Kubernetes is not enough either

到这里我们解决了以下问题:


  • Docker: 环境一致性、快速度部署。

  • Kubernetes: 服务注册与发现、负载均衡、对资源快速分配。


当然还有监控,这个我们后面再说。我们先来看要解决一些更高层次的问题该怎么办呢?


在不对服务进行侵入性的代码修改的情况下,服务认证、链路追踪、日志管理、断路器、流量管理、错误注入等等问题要怎么解决呢?


1571209280325062846.jpeg


这两年非常流行一种解决方案:Service Mesh。


本文转载自宜信技术学院。


原文链接:http://college.creditease.cn/detail/309


2020-02-06 21:291176

评论

发布
暂无评论
发现更多内容

【云原生 | 从零开始学Kubernetes】一、kubernetes到底是个啥

泡泡

云计算 云原生 k8s 9月月更

开发者有话说|时间过得真快,我也是一个“奔三”的人了

武师叔

个人成长

深入理解MYSQL之缓存

C++后台开发

MySQL 数据库 缓存 中间件 后端开发

kube-prometheus 监控系统使用与总结

CTO技术共享

40 岁程序员会有哪些肺腑之言?这篇文章告诉你

宇宙之一粟

学习 程序员 读书感悟 9月月更

SSM整合(功能模块的开发)

十八岁讨厌编程

Java ssm 后端开发 9月月更

ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

矜辰所致

ESP32-C3 9月月更 UART

4 分钟优化 Fetch 函数写法~

掘金安东尼

前端 9月月更

Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

墨菲安全

网络安全 开发安全 漏洞分析 软件供应链安全

EMQ走进亚马逊云科技:携手云端,共筑「面向未来」的IoT基础设施底座

EMQ映云科技

物联网 IoT 解决方案 亚马逊云科技 9月月更

数字化转型新抓手:一看就懂的《企业应用现代化行动指南》(附下载)

York

容器 微服务 云原生 应用现代化

概述构建应用智能运维系统的核心能力

阿泽🧸

智能运维 9月月更

C++学习---cstdio的源码学习分析04-创建临时文件函数tmpfile

桑榆

c++ 源码阅读 9月月更

阿里云PolarDB-X 荣获“2022 OSCAR 尖峰开源项目及开源社区”奖

阿里云数据库开源

阿里云 分布式数据库 开源数据库 PolarDB-X 可信开源

用户组角色绑定(原生element-plus-ui表格)

青柚1943

Element Plus Vue3 Typescript

Ubuntu服务器上部署Kubernetes集群

CTO技术共享

监控系统的阶段建设

穿过生命散发芬芳

监控系统 9月月更

获得多家大厂SSP的清华应届毕业生—田原:大厂各轮面试中开源经验有什么用|《大神详解开源 BUFF 增益攻略》讲座回顾

Apache IoTDB

数据库 开源 求职 Apache IoTDB 企业号九月金秋榜

开发者有话说 | 一个普通人的前端职业成长之路

范文杰

个人成长

ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)

矜辰所致

I2C I2C协议 ESP32-C3 9月月更

开发者有话说|情分 or 本分

卷卷龙

个人成长 职场 PUA

springboot搭建基于minio的高性能存储

CTO技术共享

[SSM]SSM整合①(整合配置)

十八岁讨厌编程

Java 后端开发 9月月更

SSM整合(接口测试)

十八岁讨厌编程

Java SSM框架 后端开发 9月月更

Web3.0杂谈-#001(47/100)

hackstoic

Web3.0

【数据结构】五分钟带你了解及自定义有向图

迷彩

数据结构 算法 无向图 9月月更 有向图

干货分享|使用 Istio 实现灰度发布

北京好雨科技有限公司

istio #Kubernetes#

数据平台发展史-从数据仓库数据湖到数据湖仓

明哥的IT随笔

hadoop spark 数据仓库 数据湖 湖仓一体

跟着卷卷龙一起学Camera--CCM

卷卷龙

ISP 9月月更

RAID(独立冗余磁盘阵列)

阿柠xn

Linux 运维 操作系统 raid 9月月更

面试突击85:为什么事务@Transactional会失效?

王磊

Java 面试

Kubernetes+Docker+Istio 容器云实践(一)_云原生_王聪_InfoQ精选文章