云原生技术kubernetes(K8S)简介

目录
  • 01 kubernetes是什么?
  • 02 kubernetes和Compost+Swarm之间的区别
  • 03 一点总结

今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下学习的笔记。

今天站的角度比较高,概念性质的东西会多一点。

01 kubernetes是什么?

曾经我认为这个问题很好回答,直到不断的去理解kubernetes,不断的深入之后,我发现这个问题很难回答的全面。

要想搞明白这个问题,首先你得知道容器是什么?在前面的文章中,我们说过,容器是一个特殊的进程,实际上是由Namespace、Cgroup、以及rootfs三种技术构建出来的一种特殊的进程的隔离环境。 这个隔离环境最主要的目的,是要运行我们自己的应用程序。

对于云厂商来说,如果能够将用户提交上来的docker镜像运行在自己平台的容器环境中,并很好的管理起来,那么这个云平台就有了商业价值。事实上,也确实是这么实现的。

然而,想要得到用户的认可,绝不仅仅是支持一个容器、一个用户的docker镜像,更多的是支持无数开发者,庞大的容器集群,才能让你的平台得到云原生整个生态的认可。基于这个现实情况,不难发现,谁能够更好的组织、调度、编排、规范化管理容器集群,谁就能够得到容器领域的青睐。

这里面,我标红了2个词语,分别是调度和编排,对这两个词语,有必要解释一下:

调度:把一个容器,按照某种规则,放置在某个最佳节点上运行起来

编排:按照用户的意愿和整个系统的规则,完全自动化地处理好容器之间的各种关系

在这样的背景下面,docker公司原生的Compose+Swarm组合、以及google公司的kubernetes项目应运而生。为什么kubernetes最终胜出?我们慢慢来看。

Kubernetes项目的理论基础要比工程实践走得更靠前,kubernetes项目起源于Borg,一个Google公司基础设施的核心系统,相比于其他的容器编排项目,它体现出了一系列的"先进性"和"完备性",而这些特性,成为了kubernetes项目赖以生存的核心价值。

kubernetes的问世,解决了容器的编排、调度和集群管理中的瓶颈,它解决了用户一个痛点问题:我有一个应用程序的容器镜像,请帮我在一个集群上将这个应用程序运行起来。然而,这并不足以让它替代Compose+Swarm的架构,因为docker公司原生的Compose+Swarm架构也能够解决容器的运行和基本的运维管理功能。

kubernetes更有价值的地方在于,它从一开始,就不是围绕docker这个特定的容器去设计的,它将docker仅仅看成是底层的一个容器实现,它着重解决的问题是:运行在大规模的任务之间,实际上存在着各种各样的关系,这些关系的处理,才是任务编排和系统管理最困难的地方。

这些任务之间的关系有很多类型,例如,一个web应用和MySQL数据库之间的关系、一个负载proxy和后端服务之间的关系等等。

传统的虚拟机处理这种类型的任务,通常情况是将它们部署在一起,因为各个任务之间会有tcp或者http的请求发生。但是容器技术出现之后,各个任务都可以通过镜像的方式,封装在不同的容器中,它们之间不相互干涉,拥有各自的资源配置,也可以被集群调度在不同的机器上。如下:

02 kubernetes和Compost+Swarm之间的区别

这种任务之间的关系处理,也是kubernetes项目区别于Compost+Swarm架构最明显的地方。

以web应用和MySQL这两个服务为例,在Compost+Swarm架构中,会为这两个服务中间定义一个"link",Docker项目会负责维护这个"link"。Docker会在这个web应用的容器中,将DB容器的IP、port以环境变量的方法给注入进去,供应用进程使用,当DB容器的连接信息发生变化的时候,更新环境变量。

Compost+Swarm这种设计模式,可以比较好的支持web应用和MySQL的服务之间联系,但是未来可能出现更多类型的任务之间的联系,这种简单的处理依赖关系的能力,一定会遇到瓶颈。

Kubernetes 项目最主要的设计思想是:从更宏观的角度,以统一的方式来定义任务之间的各种关系,并且为将来支持更多种类的关系留有余地。

例如,Kubernetes为容器之间的相互调用进行了分类,来区分哪些交互式频繁的tcp交互,哪些交互仅仅是磁盘文件的交互等等。对于这些需要交互的任务,常规的做法是各种任务部署在同一台机器上,通过Localhost进行通信,而Kubernetes引入Service的概念,让两个本来互相依赖的服务,甚至可以部署在不同的机器上。每一个Service的背后,都是若干个Pod,Service的作用就是为Pod提供固定的代理入口,而Pod的分布,完全是随机的。

这样,对于 Web 应用的 Pod 来说,它需要关心的就是数据库 Pod 的 Service 信息。不难想象,Service 后端真正代理的 Pod 的 IP 地址、端口等信息的自动更新、维护,则是 Kubernetes 项目的职责。

03 一点总结

今天我们从容器这个最基础的概念出发,提出了k8s产生的背景,又通过web应用和MySQL服务之间的“紧密协作”关系,扩展到了 Pod,有了 Pod 之后,我们希望能一次启动多个应用的实例,这样就需要Deployment 这个 Pod 的多实例管理器(后面会讲到);而有了这样一组相同的 Pod 后,我们又需要通过一个固定的 IP 地址和端口以负载均衡的方式访问它,于是就有了 Service,如果web应用访问MySQL需要账号密码,我们又会引出Secret......最终,你会看到下面的一张图:

具体的内容,我们后续慢慢分析。。。

说这么多,主要是为了表达Kubernetes 项目并没有像其他项目那样,为每一个管理功能创建一个指令,然后在项目中实现其中的逻辑。
    相比之下,在 Kubernetes 项目中,我们所推崇的使用方法是:
1、首先,通过一个“编排对象”,比如 Pod、Job、CronJob 等,来描述你试图管理的应用;
2、然后,再为它定义一些“服务对象”,比如 Service、Secret、Horizontal Pod Autoscaler(自
动水平扩展器)等。这些对象,会负责具体的平台级功能。
这种使用方法,就是所谓的“声明式 API”。这种 API 对应的“编排对象”和“服务对象”,都是Kubernetes 项目中的 API 对象(API Object)。
这就是 Kubernetes 最核心的设计理念。

今天的内容就先到这里了。

以上就是云原生技术kubernetes(K8S)简介的详细内容,更多关于云原生技术 kubernetes(K8S)的资料请关注我们其它相关文章!

(0)

相关推荐

  • Docker学习笔记之k8s部署方法

    本文记录了如何在ubuntu 14.04裸机上部署k8s集群,参考自官方文档. 拓扑结构 1master + 2minion k8s-master 192.168.0.201 master k8s-node1 192.168.0.202 minion k8s-node2 192.168.0.203 minion 准备工作系统 安装Ubuntu 14.04 LTS 64bit server版本系统,配置好hostname和ip. 在更新国内的软件源的时候,由于GFW的原因,经常会出现md5校验错误

  • Kubernetes(k8s)基础介绍

    之前我一直想学习Kubernetes,因为它听起来很有意思(如果你是希腊人,你会觉得这个名字很有问题),但我从来没有机会,因为我没有任何东西需要运行在集群中.而最近,我的工作中开始逐步涉及Kubernetes相关的事情,所以这次我抓住机会,开始查资料,但后来我发现目前所有的资料(包括官方教程)都过于冗长,结构也不合理,这让我一开始有点沮丧. 经过几天的研究,我开始逐步理解Kubernetes的核心理念,并且把他部署到了生产环境中.因为我的简历现在说自己是个"Kubernetes专家",

  • K8S中五种控制器的介绍以及使用

    目录 k8s的控制器类型 pod与控制器之间的关系 Deployment(无状态化应用) 状态与无状态化对特点 Deployment的更新 Deployment的回滚 CronJob控制器 总结 k8s的控制器类型 Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为 Deployment:适合无状态的服务部署 StatefullSet:适合有状态的服务部署 DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应

  • 云原生技术kubernetes(K8S)简介

    目录 01 kubernetes是什么? 02 kubernetes和Compost+Swarm之间的区别 03 一点总结 今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下学习的笔记. 今天站的角度比较高,概念性质的东西会多一点. 01 kubernetes是什么? 曾经我认为这个问题很好回答,直到不断的去理解kubernete

  • 云原生技术kubernetes调度单位pod的使用详解

    k8s中的最小调度单位---pod 之前的文章中,我们对k8s能够解决的问题做了简单介绍,简单来说,它解决的问题是容器的编排与调度,它的核心价值在于:运行在大规模集群的任务之间,实际上存在着各种各样的关系,这些关系的处理,才是任务编排和系统管理最困难的地方,k8s就是为了这个问题而生的. 这句话比较难理解,我们从已有的知识入手,抽丝剥茧,慢慢理解它.我们已经知道,容器的本质是一个进程,它包含三个部分: 如果说容器是云环境的一个进程,那么你可以将k8s理解成云环境中的一个操作系统. 在一个操作系统

  • 云原生技术kubernetes之volumes容器的使用

    目录 卷(volumes): 1.emptyDir 1.1.emptyDir卷特性: 1.2.官方示例: 1.3.我们做一个实例: 2.HostPath 2.1.HostPath卷特性: 2.2.官方示例: 2.3.我们做一个实例: 3.nfs 卷(volumes): 容器中的文件存在时间是短暂的,当一个容器发生崩溃时,文件会丢失,而容器重新启动后状态却是干净的:而第二个问题时解决了一个Pod中不同容器间共享文件. 卷的类型有很多,详细请查看官方文档:卷 1.emptyDir 1.1.empty

  • Quarkus云原生开篇java框架简介

    目录 前言 什么是quarkus? 为什么用quarkus? 专为开发人员而设计 容器优先 命令式和响应式代码 结语 前言 Quarkus 是小红帽开源的专门针对云容器环境优化的云原生java框架,目前已迭代到1.6.0版本,已完成了大部分的框架库的集成扩展,为了让你低成本迁移到Quarkus来,它兼容主流的框架开发模式api,如spring web. Quarkus已具备企业级应用开发能力.而且未来容器云肯定是主流了,可以预见,未来的软件都是运行在k8s这样的容器集群里.而容器环境需要应用具备

  • 云原生技术持久化存储PV与PVC

    目录 1.PV与PVC PV: PVC: 2.PV资源回收 Retain:保留资源 Delete:删除数据 Recycle:回收(弃用) 3.访问模式 4.存储分类 文件存储(Filesystem): 块存储(block): 对象存储: 5.创建PV卷 5.1.实例:创建NAS/NFS类型的PV 创建一个PV 5.2.实例:创建一个hostPath类型的PV 6.PVC 6.1.Pod与PVC与PV的关系 6.2.创建一个PVC挂载到Pod 1.PV与PVC PV: 持久卷(Persistent

  • 云原生系列Kubernetes深度解析YAML文件使用

    目录 写在前面 YAML基础 Maps Lists 使⽤ YAML 创建 Pod 创建 Pod 创建 Deployment 写在前面 在前⾯的课程中,我们在安装 kubernetes 集群的时候使⽤了⼀些 YAML ⽂件来创建相关的资源,但大家对 YAML ⽂件还是⾮常陌⽣.所以我们先来简单看⼀看 YAML ⽂件是如何⼯作的,并使⽤ YAML ⽂件来定义⼀个 k8s pod,然后再定义⼀个 k8s deployment吧. YAML基础 它的基本语法规则如下: ⼤⼩写敏感 使⽤缩进表示层级关系

  • k8s service使用详解(云原生kubernetes)

    目录 一.什么是服务service? 二.service分类 2.1 ClusterIP 2.2 NodePort 2.3 LoadBalancer(付费方案) 2.4 ExternalName (使用较少) 三.service和pod的关系 四.Service 之 ClusterIP 使用 4.1 在当前目录下,创建一个deploy-nginx-pod.yaml,配置如下 4.2 暴露服务为 clusterIP 类型 4.3 查看服务 五.Service 之 NodePort 使用 5.1 关

  • 煮饺子论云原生docker与kubernetes之间的关系

    目录 前言 一.周末煮饺子聊到容器问题 二.说说docker与煮饺子的容器 三.聊聊集群煮饺子(k8s) 前言 云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明白云原生生态系统内的组成及应用关系.那么,开始吧,这是第一篇! 这真的是一篇讲架构技术的文章,不是小说!建议您看下去! 一.周末煮饺子聊到容器问题 周末和老婆一起包了顿饺子,“老公,我去买瓶醋,你把

  • 云原生Kubernetes初始化容器Init使用介绍

    目录 一.基本介绍 使用 Init 容器的作用: 一.基本介绍 Kubernetes 中 Init 容器,也叫做初始化容器,是 K8s 官方为我们提供的一个 可以用来判断我们的环境是否已经满足运行 Pod 应用前所需要的条件. 比如,我们有一个应用是 Tomcat,但是需要向 ZooKeeper 中进行注册. 而恰好我们在运行 Tomcat 时,ZooKeeper 出现了故障,从而导致我们的 Tomcat 因为注册不上数据而导致系统报错. 但是当我们给 Tomcat 配置上 Init 容器后,效

  • 云原生Kubernetes初始化容器Init使用教程

    目录 一.基本介绍 使用 Init 容器的作用: 二.Init 容器使用介绍 一.基本介绍 Kubernetes 中 Init 容器,也叫做初始化容器,是 K8s 官方为我们提供的一个 可以用来判断我们的环境是否已经满足运行 Pod 应用前所需要的条件. 比如,我们有一个应用是 Tomcat,但是需要向 ZooKeeper 中进行注册. 而恰好我们在运行 Tomcat 时,ZooKeeper 出现了故障,从而导致我们的 Tomcat 因为注册不上数据而导致系统报错. 但是当我们给 Tomcat

随机推荐