Kubernetes(k8s)基础知识点

Kubernetes(k8s)基础知识点

简介

Kubernetes常简写为k8s,8代表中间8个字母。k8s是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。

为了让大家能够更直观地了解k8s的基础组件,下面我给大家提供几个比较权威官方的架构图

Kubernetes(k8s)基础知识点_第1张图片

Kubernetes(k8s)基础知识点_第2张图片

基本术语简介

pod:的最小调度单元,一个pod中可以有多个容器,多个容器共享网络和存储卷

service:kubernetes抽象出来一个概念,可以理解为负载均衡器,后端接pod

cluster ip:service在集群中的ip,相当负载均衡器的ip

ingress: 对集群外部暴露集群内部service的一种方式

nodeport: 对集群外部暴露服务的第二种方式,跟随service配置,让集群中的node节点都监听相应的端口,可以通过node节点访问集群内部service

loadbalancer: 对集群外部暴露集群内部service的一种方式,一般只有在云平台才能使用

deployment:封装了pod/replicaset,可以实现指定pod副本数量,滚动更新,扩容pod,一般一个应用(服务)一个deployment

statefullSet:相当于有状态服务的deployment,重启后,主机名和pod的名称不会改变

daemonSet:在每个node节点都需要运行的pod可以使用daemonSet

job: 一次性任务

cronJob:类似于crontab定时执行任务

dns:kube-dns/coredns提供集群中的dns服务,可以解析service到cluster ip,实现服务发现

pv:管理员用来提前创建好的存储空间,供用户申请使用

pvc:用户用来申请存储空间

storageClass:定义存储类供pvc使用,当用户通过pvc并指定storageClass请求pv时kubernetes可以根据storageClass动态创建pv

基础概念解析

pod

Kubernetes(k8s)基础知识点_第3张图片 Kubernetes(k8s)基础知识点_第4张图片

Pod是k8s的基本调度单位,Pod包含一个或一组Container(容器),这些Container共享Pod的IP(k8s中每一个Pod都有各自的IP,这些IP被称作PodIP),所以一个Pod内的Container可以通过localhost+各自的端口进行通信,跨Pod的容器之间的通信,则通过对应的PodIP+端口进行。再次提到,Pod是k8s的基本调度单位,所以要想运行一个Container,必须先为其创建一个Pod。Pod是容器的运行环境,而我们的应用程序是部署在容器里的,对于k8s的初学者,可以先把Pod简单地看作为应用的运行容器,把Pod看作是应用在k8s上部署的最小单位。

service

PodIP是在集群内部的IP,外网无法访问,相应的,Pod也是不能被外部访问的,Pod只能在集群内部被直接访问,那么如何在外网访问Pod里面部署的网站、应用?那就是上文提到的service。
  service是对Pod访问方式的一种抽象。当请求发送给service,service再把请求路由到与之挂钩的Pod。在k8s中,service被用来给Pod暴露(expose)服务,service暴露的服务不仅仅是用来给外网访问,内网也是可以使用的。默认情况下,service被配置为ClusterIp模式,在该模式下,也是只有集群内部的网络才能访问到该service,要想真正的实现外网访问service,需要把service访问方式配置为NodePort或用其它方式(ingress、loadbalancer等)。
  service降低了k8s中Pod的耦合度。使用服务的Pod(称为“前端”frontend)和提供服务的Pod(称为“后端”backend)不是耦合在一起的。backend随时会变动(Pod可能因为某些原因被销毁又重建),frontend并不关心它实际上调用哪个backend副本,他只关心service的状态,而backend的状态,则转交给了service去跟踪。

Node(节点)

一个node,就是k8s集群中的一个服务器,node分为Master Node和Worker Node。

Master Node

顾名思义,Master Node就是集群中的控制中心,负责整个集群的控制、管理。默认情况下,在部署集群时master会被分配一个名为NoSchedule的Taint(污点),这个taint使得master节点不能被调度,也就是说新建Pod时,Pod不会被分配到master节点。

Worker Node

Worker Node用于承载应用的运行,k8s会根据配置文件中的策略,对worker node进行调度,把pod分配到合适的worker node。

k8s组件介绍

Kubectl(集群控制器)

kubectl全称"Kubernetes-Controller",运行于master节点,kubectl更像是“kubernetes-client”,类似于k8s的客户端,是k8s的控制工具,是一个命令行工具,是用户管理k8s集群的接口,负责把用户的指令传给API Server,用于集群中资源的增删查改,注意,kubeclt只是个交互接口,并不负责实际上的资源的增删查改。
  在k8s中的所有内容都被抽象为“资源”,如Pod、Service、Node等都是资源。“资源”的实例可以称为“资源对象”,如某个具体的Pod、某个具体的Node。k8s中的资源有很多种,kubectl可以通过配置文件来创建这些“资源对象”,配置文件更像是描述对象“属性”的文件,配置文件格式可以是“JSON”或“YAML”,不过常用的是“YAML”。

Kubelet(节点代理)

运行在worker节点上,在使用kubeadm初始化集群时,master节点也需要kubelet。Kubelet全称"Kubernetes-Lifecycle-Event-Trigger",也是Kubernetes中最主要的控制器,kubelet被称为"Node Agent",意思是“节点上的代理”。如果说kubectl是决策者,那么kubelet相当于是管理者、执行者;如果说kubectl是总裁,那么kubelet就是各个分公司的总经理。

kubelet的主要工作如下:

pod管理:kubelet会监测本节点上pod、container的健康,出错时会根据配置文件的重启策略,对pod、container进行重启。 kubelet还会定期通过API Server获取本节点上的pod、container状态的期望值,然后调用容器运行时接口,对container进行调度,以达到期望状态。

资源监控:kubelet监控本节点资源使用情况,定时向master报告,知道整个集群所有节点的资源情况,对于pod的调度和正常运行至关重要。

API Server(网关)
Kubernetes(k8s)基础知识点_第5张图片

API Server运行在master节点。对于整个k8s集群,可以把kubectl看做前端,看作集群管理员与k8s集群交互的接口。API Server则相当于后端的"Controller",负责对各个组件(包括kubectl)发来的请求进行分发、处理。各个组件都直接与API Server进行通信,也只能与API Server通信。
  API Server提供了集群管理的接口,提供了资源的增删查改的接口,这个接口也可以直接说是API(web开发中的“API”)。值得一提的是,这些API都是是RESTful风格的API,这与k8s“万物皆资源”的理念相符。
  另外,API Server也作为集群的网关。默认情况,客户端通过API Server对集群进行访问时,客户端需要通过认证,并使用API Server作为访问Node和Pod(以及service)的堡垒和代理/通道。

Etcd(集群信息存储)

运行在Master节点。etcd与zookeeper相似但又不同,在分布式中经常会见到,是一个键值存储仓库,用于配置共享和服务发现。接着上面讲的,etcd相当于后端中的数据库,用于存储集群中的所有状态,包括各个节点的信息,集群中的资源状态等等。etcd的watch机制可以在信息发生变化时,快速的通知集群中相关的组件。

Scheduler(调度器)
Kubernetes(k8s)基础知识点_第6张图片

运行在Master节点。scheduler组件为容器自动选择运行的主机(node)。依据请求资源的可用性,服务请求的质量等约束条件,scheduler监控还未绑定到node的pod,对其进行绑定。Kubernetes也支持用户自己提供的调度器,Scheduler负责根据调度策略自动将Pod部署到合适Node中,调度策略分为预选策略和优选策略,Pod的整个调度过程分为两步:

1)预选Node:遍历集群中所有的Node,按照具体的预选策略筛选出符合要求的Node列表。如没有Node符合预选策略规则,该Pod就会被挂起,直到集群中出现符合要求的Node。

2)优选Node:预选Node列表的基础上,按照优选策略为待选的Node进行打分和排序,从中获取最优Node。

Controller-Manager(管理控制中心)
Kubernetes(k8s)基础知识点_第7张图片

运行在Master节点。Controller-Manager用于执行大部分的集群层次的功能,它既执行生命周期功能(例如:命名空间创建和生命周期、事件垃圾收集、已终止垃圾收集、级联删除垃圾收集、node垃圾收集),也执行API业务逻辑(例如:pod的弹性扩容)。控制管理提供自愈能力、扩容、应用生命周期管理、服务发现、路由、服务绑定和提供。Kubernetes默认提供Replication Controller、Node Controller、Namespace Controller、Service Controller、Endpoints Controller、Persistent Controller、DaemonSet Controller等控制器。
  Controller-Manager负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

小结:这么多知识点~

Kubernetes(k8s)基础知识点_第8张图片

你可能感兴趣的:(k8s)