Kubernetes 基础概念知多少

标签: dev | 发表时间:2020-01-27 00:00 | 作者:
出处:http://itindex.net/relian

kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用、高扩展性和可预测性的方式来管理容器应用的生命周期。通过k8s,用户可以定义程序运行方式、部署升级策略、动态伸缩容,使得用户以一种更灵活可靠的方式来管理应用程序。

关于k8s,是一种对应用服务的打包、部署、监控等一整套生命周期的自动化管理平台,目前各大公司已在生产环境部署使用,同时k8s社区比较活跃,在未来一段时间内会越来越流行,可以说是以后服务部署的事实标准,对于Java开发者来说,你可以不直接使用它,但是不能不了解它。

总结来看,k8s特点如下:

  • 自动装箱:基于容器,结合调度策略将多种应用部署到同一节点上,提高资源利用率;

  • 自我修复:支持故障转移/重启,具有健康检查机制;

  • 水平扩展:通过命令手动执行扩容,可基于CPU等资源负载率来动态实现伸缩容;

  • 服务发现/负载均衡:通过KubeDNS(或CoreDNS)为系统内置了服务发现功能,为每个service配置DNS名称,service通过iptables或ipvs内建了负载均衡机制;

  • 自动部署:自动发布和回滚,支持灰度、增量发布等;

  • 配置管理:ConfigMap实现了配置数据与Docker镜像解耦,为开发部署提供了良好的灵活性;

  • 批处理:除了管理服务型应用之外,Kubernetes还支持批处理作业及CI(持续集成)。

从k8s的角度看,它把各个待管理的资源进行了抽象,比如针对服务器(物理机或者虚拟机)抽象出Node;对于容器不直接管理而是抽象出Pod来管理容器;对于集群内的服务调用,抽象出service来表示同类型的多个Pod,同时提供负载均衡策略等。

对于初学者来说,k8s的一些抽象资源和基本概念可能会造成一头雾水,本文就k8s的基础概念和组件进行简单分析,让初学者更快了解k8s概念,话不多说,let‘s go~

k8s基础概念

k8s使用共享网络将多个物理机(或者虚拟机)汇集到一个集群中,该集群是配置k8s所有组件、功能和工作负载的物理平台。集群中一台服务器会作为master负责管理整个集群(为了master高可用一般会将master部署成多节点)。

Master是集群的网关和中枢,负责诸如为用户和客户端暴露API、跟踪其他服务器的健康状态、以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是用户/客户端与集群之间的核心联络点,并负责Kubernetes系统的大多数集中式管控逻辑。单个Master节点即可完成其所有的功能,但出于冗余及负载均衡等目的,生产环境中通常需要协同部署多个此类主机。Node是Kubernetes集群的工作节点,负责接收来自Master的工作指令并根据指令相应地创建或销毁Pod对象,以及调整网络规则以合理地路由和转发流量等。理论上讲,Node可以是任何形式的计算设备,不过Master会统一将其抽象为Node对象进行管理。

几种资源抽象

  • Pod:k8s管理的最小调度单元,k8s不直接来管理容器,使用一个抽象的资源对象来封装一个或者多个容器,这个抽象即为Pod。同一Pod中的容器共享网络名称空间和存储资源,这些容器可经由本地回环接口lo直接通信,同时对于Mount、User及PID等资源也进行了隔离;

  • 标签资源和标签选择器:标签(Label)是将资源进行分类的标识符,k8s的Pod资源选择大都是基于标签来的,一个对象可以拥有多个标签,一个标签也可以附加于多个对象(通常是同一类对象)之上。标签选择器(Selector)全称为“Label Selector”,它是一种根据Label来过滤符合条件的资源对象的机制;

  • Controller:Pod控制器,尽管Pod是k8s的最小调度单元,但用户通常并不会直接部署及管理Pod对象,而是要借助于另一类抽象——控制器(Controller)对其进行管理,k8s的控制器包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等,每种controller都有对应的功能(比如Deployment是最常见的无状态应用的控制器,它支持应用的扩缩容、滚动更新等操作,为容器化应用赋予了极具弹性的功能);

  • Service:Service是建立在一组Pod对象之上的资源抽象,它通过标签选择器选定一组Pod对象,并为这组Pod对象定义一个统一的固定访问入口(通常是一个IP地址);

  • 存储卷:一般是独立于容器文件系统之外的存储空间,常用于扩展容器的存储空间并为它提供持久存储能力,大体上可分为临时卷、本地卷和网络卷;

  • Name和Namespace:名称是网络资源的唯一标识符,通常在一个命名空间内,名称标识是唯一的,名称空间通常用于实现租户或项目的资源隔离,从而形成逻辑分组;

  • Ingress:k8s中将Pod进行了网络隔离,如果需要开放一些Pod供外部使用,则需要一个配置一个流量进入k8s集群内的通道,除了Service外,Ingress也是实现策略之一。

k8s组件

一个典型的k8s集群由master节点、多个工作节点和ETCD组成,其中ETCD作为集群状态存储。master节点负责整个集群的管理工作,为集群提供管理API,并负责编排和监控各工作节点,各工作节点已Pod形式管理运行容器。master主要由apiserver、controller-manager和scheduler三个组件组成,同时负责与ETCD教育存储集群状态数据,而每个工作节点主要包含kubelet、kube-proxy及容器引擎(最常见的是Docker)等组件。各个组件整体如下图:

master节点

master包含组件如下:

  • API server:对外提供restful api,k8s集群的网关;

  • Controller:Pod控制器,k8s通过控制器来管理Pod资源,控制器包括ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等,每种controller都有对应的功能(比如Deployment是最常见的无状态应用的控制器,它支持应用的扩缩容、滚动更新等操作,为容器化应用赋予了极具弹性的功能);

  • Scheduler:K8s调度器,K8s管理成千上万容器资源,api server接收到请求之后就由Scheduler按照对应调度策略进行在不同Node间的请求调度操作;

  • ETCD:k8s集群状态都是存储在etcd中(通过API Server共享给集群的各组件及客户端),通过etcd的watch机制来进行k8s各组件的协同操作,一般etcd通过集群部署方式保证高可用。

node节点

node节点接受master的管理,负责管理各个Pod资源:

  • kubelet:kubelet是node的守护进程,node接受master的管控,Kubelet会向api server注册当前node,定期向master会报node资源占用情况;

  • 容器运行环境:node会提供一个容器运行环境,负责下载并运行容器,k8s目前支持的容器运行环境包括Docker、RKT、cri-o和Fraki等;

  • kube-proxy:每个node都需要一个kube-proxy进程,比如对service按需生成iptables或ipvs规则,控制流量访问。

核心组件

k8s除了etcd、master、node这几个组件之外,还有一些核心组件,如下:

  • DNS服务:目前k8s使用的是coreDNS,之前使用的是KubeDNS;

  • Kubernetes Dashboard:k8s的管理web UI;

  • Heapster:容器和节点的性能监控与分析系统,它收集并解析多种指标数据,如资源利用率、生命周期事件等。新版本的Kubernetes中,其功能会逐渐由Prometheus结合其他组件所取代。

  • Ingress Controller:Service是一种工作于传统层的负载均衡器,而Ingress是在应用层实现的HTTP(s)负载均衡机制。不过,Ingress资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些规则需要通过Ingress控制器(Ingress Controller)发挥作用。目前,此类的可用项目有Nginx、Traefik、Envoy及HAProxy等。


相关 [kubernetes 基础 概念] 推荐:

Kubernetes 基础概念知多少

- - IT瘾-dev
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用、高扩展性和可预测性的方式来管理容器应用的生命周期. 通过k8s,用户可以定义程序运行方式、部署升级策略、动态伸缩容,使得用户以一种更灵活可靠的方式来管理应用程序. 关于k8s,是一种对应用服务的打包、部署、监控等一整套生命周期的自动化管理平台,目前各大公司已在生产环境部署使用,同时k8s社区比较活跃,在未来一段时间内会越来越流行,可以说是以后服务部署的事实标准,对于Java开发者来说,你可以不直接使用它,但是不能不了解它.

Kubernetes 集群日志基础

- - Linux 中国◆开源社区
探索 Kubernetes 中不同容器日志记录模式的工作原理. 服务器和应用程序日志记录是开发人员、运维人员和安全团队了解应用程序在其生产环境中运行状态的重要工具. 日志记录使运维人员能够确定应用程序和所需组件是否运行平稳,并检测是否发生了异常情况,以便他们能够对这种情况做出反应. 对于开发人员,日志记录提供了在开发期间和之后对代码进行故障排除的可见性.

十分钟带你理解Kubernetes核心概念 - DockOne.io

- -
Kubernetes的核心概念. 因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍. 相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念. 我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解. 在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习.

Kubernetes & Microservice

- - 午夜咖啡
这是前一段时间在一个微服务的 meetup 上的分享,整理成文章发布出来. 谈微服务之前,先澄清一下概念. 微服务这个词的准确定义很难,不同的人有不同的人的看法. 比如一个朋友是『微服务原教旨主义者』,坚持微服务一定是无状态的 http API 服务,其他的都是『邪魔歪道』,它和 SOA,RPC,分布式系统之间有明显的分界.

CloudStack云基础架构的一些概念

- - CSDN博客云计算推荐文章
   一个区域在CloudStack配置中是最大的组织单元. 一个区域通常代表一个单独的数据中心,虽然在一个数据中心也允许有多个区域. 将基础架构设施加入到区域中的好处是提供物理隔离和冗余. 例如,每个区域可以有它自己的电源和网络上行链路,区域还可以是分布在不同的物理位置上(虽然这不是必须的). 每个机架包括一个或多个集群主机或者一个或多个主存储服务器.

JVM分代垃圾回收策略的基础概念

- - CSDN博客架构设计推荐文章
由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分代这一策略. 本文介绍了分代策略的目标,如何分代,以及垃圾回收的触发因素. 文章总结了JVM垃圾回收策略为什么要分代,如何分代,以及垃圾回收的触发因素. 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的. 因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率.

Kubernetes学习(Kubernetes踩坑记)

- - Z.S.K.'s Records
记录在使用Kubernetes中遇到的各种问题及解决方案, 好记性不如烂笔头. prometheus提示 /metrics/resource/v1alpha1 404. 原因: 这是因为[/metrics/resource/v1alpha1]是在v1.14中才新增的特性,而当前kubelet版本为1.13.

网站可用性设计中 不容忽略的30个基础概念

- 马克叔叔 - 互联网的那点事
你不必在每件事情上取得别人的同意. 作为一个专业的Web开发人,你是你访客爱好和需求的倡导者;你必须坚持你对良好的用户体验的理解,确保在复杂的网站架构下你的访客仍可能找到他们的路径. 这意味着在与用户和同事讨论时,你必须能够坚持你的立场,有效地传达自己的想法. 事实上,你的工作就是妥协处理错误的思想和误导的概念,而不是盲从它们.

kubernetes移除Docker?

- -
两周前,Kubernetes在其最新的Changelog中宣布1.20之后将要弃用dockershime,也就说Kubernetes将不再使用Docker做为其容器运行时. 这一消息持续发酵,掀起了不小的波澜,毕竟Kubernetes+Docker的经典组合是被市场所认可的,大量企业都在使用. 看上去这个“弃用”的决定有点无厘头,那么为什么Kubernetes会做出这样的决定.

Kubernetes 完全教程

- - 午夜咖啡
经过一个阶段的准备,视频版本的 《Kubernetes 完全教程》出炉了. 课程一共分为七节,另外有一节 Docker 预备课,每节课大约一个多小时. 目标是让从没接触过 Kubernetes 的同学也能通过这个课程掌握 Kubernetes. 为什么要学习 Kubernetes. 在介绍课程之前,先说说为什么要学习 Kubernetes 以及什么人需要学习 Kubernetes.