K8S之基础知识进阶【初识Kubernetes】

5 篇文章 0 订阅
3 篇文章 0 订阅

一、kubernetes是什么?

简单理解,它就是一个基于容器的分布式架构,是一个完备的分布式系统支撑平台。

它是一个开放的开发平台。和JAVA不同,它不受任何语言的限制,所以对于任何一种语言编写的程序服务,都是可以被映射为kubernetes的service。

并且,kubernetes对现有的编程语言,框架,中间件都没有任何侵入性,因此现有的系统也很容易改造升级并迁移到kubernetes平台上。

在kubernetes中,service是分布式集群架构的核心,一个service对象拥有如下关键特征。

①拥有唯一指定的名称(比如mysql-server)

②拥有一个虚拟ip(cluster ip、service ip 或 VIP)和端口号

③能够提供某种远程服务能力

④被映射到提供这种服务能力的一组容器应用上

service的服务进程目前都是基于socket通信方式对外提供服务,比如redis、MySQL,或是实现了某个具体业务的特定TCPServer进程。

虽然一个service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的endpoint(ip+port)访问点,但kubernetes能够让我们通过service(虚拟cluster ip + service port)连接到指定的service。

kubernetes内部有负载均衡和故障恢复的机制,所以不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其它机器,都不会影响对服务的正常调用。

更重要的是,这个service本身一旦创建就不再变化,这意味着我们再也不用为kubernetes集群中服务的ip地址变来变去的问题而头疼了。

容器提供了强大的隔离功能,所以有必要把为service提供服务的这组进程放入容器中进行隔离。为此,kubernetes设计了pod对象,将每个服务进程都包装到相应的pod中,使其成为在pod中运行的一个容器。

为了建立service和pod之间的关联关系,kubernetes首先会给每个pod都贴上一个标签(label),给运行MySQL的pod贴上name=mysql。这样一来,就巧妙解决了service和pod的关联问题。

service:service定义了这样一种抽象:一个pod的逻辑分组,一种可以访问它们的策略。service通常被称为微服务,定义了一个服务的访问入口地址,前端的应用(pod)通过这个入口访问其背后的一组由pod副本组成的集群实例,service与其后端pod副本集群之间通过label selector来实现通信。

label:标签,一个label就是一个key=value的键值对,由用户自己指定。label可以附加到各种资源对象上,例如pod、service等,一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上去。label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

pod是什么?

简单理解,pod是运行在一个被称为节点(node)的环境中,这个节点可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个pod。

其次,在每个pod中都运行着一个特殊的被称为pause的容器,其它容器则为业务容器。

最后,咱们需要注意的是,并不是每个pod和它里面运行的容器都能被映射到一个service上,只有提供服务(无论是对内还是对外)的那组pod才会被映射为一个服务。

在集群管理方面,kubernetes将集群中的机器划分为一个master和一些node。

在master上运行着集群管理相关的一组进程kube-apiserver、kuber-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。

node是什么?

顾名思义,node(节点),一般作为集群中的工作节点,运行真正的应用程序,在node上kubernetes管理的最小运行单元是pod。

在node上运行着kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

kubelet:负责pod对应的容器的创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能。

kube-proxy:实现kubernetes service的通信与负载均衡机制的重要组件。

kube-apiserver:提供了HTTP Rest接口的关键服务进程,是集群里所有资源的增、删、改、查等操作的唯一入口,也是集群的控制入口。

kube-controller-manager:运行管理控制器,是集群中处理常规任务的后台进程,每个controller都负责一种具体的控制流程,而controller manager就是这些controller的核心管理者。

kube-scheduler:负责资源调度(pod调度)的进程,为新创建的pod选择一个node节点。

 二、kubernetes之传统IT系统中服务扩容和服务升级解决方案

对于传统的这两大难题基本上都是靠人工一步步操作处理的,费时费力又难以保证实施质量。

在kubernetes集群中,只需为需要扩容的service关联的pod创建一个RC(replication controller),服务扩容以至服务升级等这些问题都能迎刃而解。

在一个RC定义文件中包含以下3个关键信息:

①目标pod的定义

②目标pod需要运行的副本数量(replicas)

③要监控的目标pod的标签

 在创建好RC(系统将自动创建好pod)后,kubernetes会通过在RC中定义的label筛选出对应的pod实例并监控其状态和数量,如果实例数量少于定义的副本数量,则会根据在RC中定义的pod模板创建一个新的pod,然后将此pod调度到合适的node上启动运行,直到pod实例的数量达到预定目标。这个过程完全是自动化的,无需人工干预。

有了RC,服务扩容就变成了一个纯粹的简单数字游戏了,只需修改RC中的副本数量即可。后续的服务升级也将通过修改RC来自动完成。

写在最后:

本文内容是摘自相关书籍以及网上文献,并结合自己理解所编写,如果理解不周还望大家指出更正,初心不变,大家共同进步,一起交流学习~~~

接下来的更新,将为大家讲述为什么要用kubernetes?有什么优势?为啥在互联网公司那么火?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈说技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值