写点什么

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:291415

评论

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

理性探讨AIGC未来的发展方向

加入高科技仿生人

人工智能 低代码 AIGC

阿里云加入“一云多芯”应用创新计划,首批通过金融专有云能力评估

云布道师

混合云

Mac OS如何显示隐藏文件和文件扩展名

互联网搬砖工作者

一次偶然机会发现的MySQL“负优化”

Java MySQL 数据库 性能优化

2023年广州堡垒机采购选哪家好?咨询电话多少?

行云管家

等保 堡垒机 等级保护 广州

软件测试/测试开发丨Web自动化总卡在文件上传和弹框处理上?

测试人

软件测试 自动化测试 测试开发 selenium

如何通过Java代码在PowerPoint 幻灯片中插入公式

在下毛毛雨

PowerPoint 公式 java‘

亚信科技AntDB数据库荣获互联网周刊金i奖“2022年度产品”

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 4 月 PK 榜

亮相数字化转型大会!卡奥斯助力两化融合工业转型!

Openlab_cosmoplat

工业互联网 开源社区

ChatGPT也BUG?带你走进ChatGPT背后的网络基础设施

郑州埃文科技

人工智能 ChatGPT

你的收藏不能少的Spring笔记,阿里十年架构师手写Spring笔记

小小怪下士

Java spring 程序员

网心科技多项边缘计算成果亮相第十届中国网络视听大会

网心科技

让ChatGPT手把手教我们学操作系统是一种怎样的体验?

Java全栈架构师

程序员 AI 后端 操作系统 计算机

Redis缓存穿透/击穿/雪崩以及数据一致性的解决方案

Java 缓存 穿透 击穿 雪崩

深耕智能边缘研究和应用,英特尔中国研究院、南京英麒联合探索算力前沿

科技热闻

迪士尼的“元宇宙梦”醒了

Openlab_cosmoplat

开源社区 元宇宙

The Foundry Modo 16 Mac版(专业的三维建模软件)

Rose

mac软件下载 Foundry Modo 三维建模软件

Java:如何在PowerPoint幻灯片中创建散点图

在下毛毛雨

图表 PowerPoint java‘

Double-check 技术:Golang 中多线程编程的必备技能

Jack

golang 设计模式

三种Web通信技术之间的差异

郑州埃文科技

YonTalk 大咖论道:YonBuilder 低代码开发平台能力解析

YonBuilder低代码开发平台

软件测试/测试开发丨做web自动化时,定位元素常用方法有哪些?

测试人

软件测试 自动化测试 测试开发 Web自动化测试

软件测试/测试开发丨4步,用 Docker搭建测试用例平台 TestLink

测试人

Docker 软件测试 自动化测试 测试开发 testlink

喜报:旺链科技成为龙芯生态重要合作伙伴

旺链科技

区块链 生态合作

Feast on Amazon 解决方案

亚马逊云科技 (Amazon Web Services)

人工智能

格式塔理论

Data 探险实验室

可视化 大屏可视化 可视化看板 大屏布局 仪表板

苹果电脑删除磁盘分区及双系统分区的办法

互联网搬砖工作者

审计录像是什么意思?堡垒机有审计录像功能吗?

行云管家

堡垒机 审计 审计日志 审计录像

GitHub开源几分钟被下架!神作《Spring Boot实战项目》竟昙花一现

Java 微服务 Spring Boot 框架

GitHub开源2小时Star破10万,阿里Java高并发集合手册终是被公开

Java 高并发 集合框架

卡奥斯赋能发展引擎,“工赋山东”再加“数”!

Openlab_cosmoplat

工业互联网 开源社区

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