Kubernetes(K8s)原先来自于谷歌内部的小组提案,在2000年后,谷歌先后开发了Borg、Omega和Kubernetes这三个容器管理系统。

第一个在谷歌被开发出来的统一的容器管理系统,称之为“Borg”,它管理着长时间运行的生产服务和批处理服务。这两类任务之前是由两个分离开的系统来管理的:Babysitter和Global Work Queue。Borg将这两种应用所用的机器统一成一个池子,这样得以提高资源利用率,进而降低成本。

第二个容器管理系统Omega,则是Borg的延申,它的出现是出于提升Borg生态系统软件工程的愿望。

第三个容器管理系统是Kubernetes,也就是现在说的K8s,那么为什么K8s能够获得业界的认可,并且成为新一代的容器管理系统呢?

容器兴盛的开始

相信大家一定听过Docker,这个在2013 年推出,以码头货柜命名的容器,强调 build, ship and run 的观念, Docker 的轻量虚拟化的技术及易于移植的特性,非常利于现代云端服务的开发及部署。相对来说,传统的虚拟机需要追求高规格,且在基础设施和运维(Ops)上需要花费非常多的工夫和心力。以下是传统虚拟机器与Docker 容器所做的比较。

当开发运维时,最希望的就是在部署后持续监控,当服务器流量过头的时候,可以实现自动扩展;当流量很低迷时,可以自动缩减服务器。除此之外,最重要的是,当一台服务器挂点后,希望可以自动修复,而且随时必须保持服务实例的个数。以上很多功能 Docker 都可以帮您做到,并利用容器来提供服务。这样的服务型态被称作CaaS(Container as a Service),看起来一切都很美好。但是Docker 容器不是万能,在容器/服务个数越来越复杂的情况下,如何管理丛集和服务的生命周期,将会是各家容器编排管理(orchestration) 的能力。其中Google 的Kubernetes 就是一个十分精良的容器编排管理工具。

传统一体化架构到微服务架构的转移

随着应用的发展,程序变得越来越复杂,传统一体化架构 (Monolithic Architecture) 的服务会造成巨大的不便,比如说:1.新增功能与测试放在一起,使得程序十分复杂;2.开发和利用新语言和新框架的效率低;3.安全性低,所有的模块构建在一个process里,一旦出现bug 可能牵一发而动全身。

而微服务 (microservices) 架构正好解决了这样的问题,将每一个具有商业逻辑的服务独立出来,例如不再将所有资料都写入同一个资料库,而是每个单独的服务都有一个最适合自己本身结构的资料库。好处是让每个服务都可以用最适合自己的语言、资料库来开发。从下图可以看到,乘客管理、Web UI、金流等都是一个独立出来的微服务,而每个服务都开放了 REST API 实行客户端或者服务之间的沟通。在实作上,每一个商业功能/服务都可能是一台 VM 或者一个容器。

Kubernetes 特别适合微服务这样的架构。将数个容器组合起来成一个服务(Service,注:Service 是 K8S 的专有名词,下面会介绍),Kubernetes 也提供了良好的服务发现(Service discovery)机制,让每个服务彼此可以通信。最重要的是 K8S 强大的编程可以自动扩展服务,甚至还可以对大规模的容器作滚动更新 (Rolling update) 以及回滚机制 (Rolling back/Undo),更可以整合 CI/CD 等 DevOps 的工具,绝对让您用最小的力气管理最庞大的系统。

Kubernetes的架构独特在哪里?

刚刚提到Kubernetes 特别适合微服务架构,这又是为什么呢?Kubernetes 与 Docker在结构上有何区别呢?

K8s的结构如下:

Kubernetes 中的 master-nodes 架构

Kubernetes属于分布式系统,包括了Master、Node、Clusters。

Master是大管家;

Node是主要工作的节点,上面运行了许多容器,类似于一台虚拟机。Kubernetes 可操控高达 1,000 个 nodes 以上;

Clusters是Master和Node的集合。

再拆分来看Kubernetes的结构如下:

重点来说下Kubernetes区别于Docker的三个组成:

  • Pod
  • Service
  • Deployments (Replication Controller)

1.Pod

容器是位于 pod 内部,一个 pod 包覆著一个以上的容器,这造成 K8S 与一般容器不同的操作概念。在 Docker 裡,Docker container 是最小单位,但在 K8S 可想作 pod 为最小单位。

Pod的特性如下:

1. Pod 拥有不确定的生命週期

2. Pod 内有一个让所有 container 共用的 Volume,这会与 Docker 不同

3. Pod 采取 shared IP,内部所有的容器皆使用同一个 Pod IP,这也与 Docker 不同

4. Pod 内的众多容器都会和 Pod 同生共死

2.Service

K8S的 Service 有它的独特方法,我们看看它的特性

1. 每个 Service 包含著一个以上的 pod

2. 每个 Service 有个独立且固定的 IP 地址 – Cluster IP

3. 客户端访问 Service 时,会经由上述提过的 proxy 来达到负载平衡、与各 pod 连结的结果

4. 利用标签选择器 (Label Selector),聪明地选择那些已贴上标签的 pod

3.Deployments

旧版的 K8S 使用了副本控制器 (Replication Controller) 的名词,在新版已经改成 Deployments 囉。Deployments 顾名思义掌控了部署 Kubernetes 服务的一切。它主要掌管了 Replica Set 的个数,而 Replica Set 的组成就是一个以上的 Pod。

1. Deployments 的设定档(底下以 YAML 格式为例),可以指定 replica,并保证在该 replica 的数量运作

2. Deployments 会检查 pod 的状态

3. Deployments 下可执行滚动更新

基于三个组成的特性,Kubernetes 与 Docker 区分开来,也更为适应现在的微服务架构,将不同的功能不同的代码区分开来,以确保其可靠性和开发效率。

目前Kubernetes已在容器管理系统上占据主导地位,成为业内公认的行业标准和未来趋势,虽然Google已在之前就将Kubernetes捐出来作为开源使用,但是由于谷歌多年在Kubernetes上的开发和应用,Google 的 k8s 托管服务,即Google Kubernetes Engine,却将 k8s 托管服务做到了极致,支持自动伸缩节点和调节,进一步实现云计算的无服务化。

Kubernetes(K8s)优势究竟是什么?相关推荐

  1. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  2. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  3. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  4. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  6. kubernetes(k8s)-介绍2

    kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kuber ...

  7. Kubernetes(K8S)入门到运维 ( 六) Helm与功能组件及证书年限

    elm与功能性组件 为什么又来一个Helm? 在向K8S部署应用时,要依次部署Deployment.SVC等,步骤多且麻烦,而且随着越来越多的项目微服务化,复杂的应用在容器中部署以及管理就更为复杂了, ...

  8. Kubernetes(K8s)Events介绍(上)

    Kubernetes Events虽不常被提起,却意义非凡.它存储在Etcd里,记录了集群运行所遇到的各种大事件.本系列文章将一步一步地揭开Kubernetes Events的神秘面纱. 师出有名 前 ...

  9. 使用阿里云和gcr.azk8s.cn镜像安装Kubernetes (K8s)

    使用阿里云和gcr.azk8s.cn镜像安装Kubernetes (K8s) 由于墙的原因,k8s.gcr.io无法从国内访问,因此在安装Kubernetes时需要使用到国内的镜像.本文讲解使用kub ...

  10. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

最新文章

  1. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法
  2. 【拒绝一问就懵】之Activity的启动流程
  3. python安装scrapy框架命令_python爬虫中scrapy框架是否安装成功及简单创建
  4. .net core实践系列之短信服务-Api的SDK的实现与测试
  5. L2-016 愿天下有情人都是失散多年的兄妹 CCCC
  6. 图解 Linux 安装 JDK1.8 、配置环境变量
  7. Seeing that the girl he likes actually married his third uncle
  8. 对警报线程池的警报线程_如何建立更好的警报
  9. 一文了解 Github 上人气最高的十大 JavaScript 框架!
  10. bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)
  11. phpmyadmin安装配置以及相关问题
  12. java语言操作Oracle数据库中的CLOB数据类型
  13. YUV444,YUV420P,YUV420SP,YUV422P,YUV422SP,NV12,NV21,NV16,NV61等格式区分与存储简介
  14. Wifi模块与串口助手通信的常用AT指令集
  15. 工作感想——离开公司
  16. zblog php 调用缩略图,zblog调用文章缩略图的方法
  17. 浙大毕业演讲 --- 马一浮
  18. 完蛋!win 11 ,可能要凉?
  19. idea 报错Process finished with exit code 1
  20. 从王庆根自杀到欧建新自杀之我见

热门文章

  1. java 家庭电视类_Java-家中的电视机
  2. BDD之cucumber
  3. [论文笔记]slope one predictors for online rating-based collaborative filtering
  4. java怎么写桌面日历_Win7桌面怎么添加日历记事本
  5. 涵洞CAD系统必须实现的功能
  6. pccad无法找到所需的动态链接库_快帮忙啊,pccad中的问题!
  7. 开源项目eladmin--笔记
  8. 限制Teams会议中的聊天
  9. 解决Windows Server 2008 R2安装声卡驱动后还是提示无音频设备的问题
  10. Intellij IDEA 2017 debug断点调试技巧与总结详解篇