一. k8s-基础概念

1. kubernetes是什么?

    Kubernetes 是一个可移植、可扩展的开源容器编排系统,主要用于自动化部署、扩展和管理容器应用,提供资源调度、部署管理、服务发现、扩容缩容、监控等功能。对于负载均衡、服务发现、高可用、滚动升级、自动伸缩等容器云平台的功能要求有原生支持。由于Kubernetes 在 K 和 s 间有 8 个字母,因此常简称为 K8S。
一. k8s-基础概念_第1张图片

2. 使用Kubernetes 具有以下好处?

具备微服务架构

  1. 实例数量根据业务大小进行弹性伸缩
  2. 开发者自由选择开发技术
  3. 具备很高的稳定性和快速迭代进化能力

具备超强的横向扩容能力

  1. Kubernetes 系统架构具备超强的横向扩容能力。

3. k8s基础概念:

一. k8s-基础概念_第2张图片

Master

    Master 组件提供集群的管理控制中心,对集群进行全局决策(如调度),并检测和响应集群事件,例如当复制控制器的“副本”字段不满足时启动新的 Pod。基本上 Kubernetes 所有的控制命令都是发给 Master,Master 负责具体的执行过程。Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效

运行在master上的组件:

kube-apiserver      集群的唯一入口
    用于暴露 Kubernetes API,任何资源请求/调用操作都是通过kube­apiserver 提供的接口进行。提供了 HTTP Rest 接口的关键服务进程,是Kubernetes 中所有资源的增、删、改、查等操作的唯一入口,也是集群控制入口进程;

kube-controller-manager      调度器
    Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管

kube-scheduler          总控制器
    是负责资源调度的进程,监视新创建且没有分配到 Node 的 Pod,为Pod 选择一个 Node;

Etcd           默认的数据库,用来存储
    Etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为Etcd数据提供备份计划。Etcd是一个高可用的键值存储系统

Node

    具体"干活"的,工作负载节点,在Kubernetes集群中除了master节点外的机器被称为Node。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。
运行在Node上的组件:

kubelet           在node节点,执行master分发的任务,并管理pod和pod中的容器
    负责 Pod 对应容器的创建、起停等任务,同时与 Master 节点密切协作,实现集群管理的基本功能。 执行的操作

kube-proxy
    用于实现 Kubernetes Service 之间的通信与负载均衡机制。暴露端口到外部。将任务调度分发到pod

docker
    Docker引擎,负责本机的容器的创建和管理工作

注:
Node可以在运行期间动态增加到Kubernetes集群中

Replication Controller 定义一个pod预期值,少了增加,多了减少
    简称RC(复制控制器),RC是Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩

在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就会得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,过少则会再创建一些Pod。相比传统的IT环境,如果程序意外挂掉,需要手工重启,但是在k8s通过RC,就大大减少这些手工运维工作

ReplicaSet
    ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,所以我们通常不需要直接使用 ReplicaSet。
注:
1.Replication Controller由于与Kubernetes代码中的模块Replication Controller同名,并且“Replication Controller”无法准确表达它的本意,所以在Kubernetes1.2中,升级为另外一个新概念——Replica Set,官方解释为“下一代的RC”
2.我们很少单独使用Replica Set,它主要被Deployment这个更高层的资源对象所使用。

Deployment 创建服务或更新服务,回滚升级
    应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级
注:
创建Deployment对象后,master会根据Deployment对象的配置文件去描述应用,应用名称,使用的镜像名称,需要几个实例,多少内存,多少CPU资源

Service
    Service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。Kubernetes里的每个Service其实也可以理解为我们的微服务架构中的一个微服务。
Service对外提供多种入口:

  1. ClusterIP:Service在集群内的唯一ip地址,虚拟的IP,只能在 Kubernetes集群里访问。通过ClusterIP,负载均衡的访问后端的Pod

  2. NodeIP+NodePort:Service会在集群的每个Node上都启动一个端口,通过NodeIP:NodePort访问后端的Pod

  3. LoadBalancer
    LoadBalancer类型的service 是可以实现集群外部访问服务的另外一种解决方案。不过并不是所有的k8s集群都会支持,大多是在公有云托管集群中会支持该类型。负载均衡器是异步创建的,关于被提供的负载均衡器的信息将会通过Service的status.loadBalancer字段被发布出去。

  4. ExternalName
    Service的ExternalName方式实现,即设置Service的type为ExternalName。这样做的好处就是内部服务访问外部服务的时候是通过别名来访问的,屏蔽了外部服务的真实信息,外部服务对内部服务透明,外部服务的修改基本上不会影响到内部服务的访问,做到了内部服务和外部服务解耦合。

需要补充

注:
1.Service负责服务发现,找到每个Pod,不管Deployment的Pod有多少个,不管它是更新,销毁还是重建,Service总是能发现并维护好它的ip列表。
2.kube-proxy是kubernetes核心组件,运行在集群中每一个节点上,负责监控集群中service、endpoint变更,维护各个节点上的转发规则,是实现servcie功能的核心部件。

Pod
    Pod 是一组容器(当然也可以只有一个)容器本身就是一个小盒子了,Pod 相当于在容器上又包了一层小盒子。Pod是Kubernetes的最小调度单位。
注:
Pod中的容器共享数据卷volume
Pod中的容器共享IP地址和端口

Label 设置标签对资源进行分组,通过Label selector 标签选择器查询
    标签,一个Label是一个key=value的键值对。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。

Volume
    Volume(存储卷)Volume是Pod中能够被多个容器共享的磁盘目录。我们知道,默认情况下Docker容器中的数据都是非持久化的,在容器消亡后数据也会消失。因此Docker提供了Volume机制以便实现数据的持久化。Kubernetes中Volume的概念与Docker中的Volume类似,但不完全相同。
Kubernetes提供了非常丰富的Volume类型:

emptyDir:临时空间,Pod分配到Node时创建,无须指定宿主主机上对应的目录,在Kubernetes会自动分配当前Node的一个目录,当Pod被移除时,emptyDir中的数据也会永久删除。
hostPath:为Pod挂载宿主主机上的文件或目录。用于数据永久保存。在不同的Node上具有相同配置的Pod,可能会因为宿主机上的目录和文件不同而导致Volume上的目录和文件的访问结果不一致。
gcePersistentDisk:使用谷歌公有云提供的永久磁盘。数据永久保存。
NFS:NFS 是 Network File System 的缩写,即网络文件系统。Kubernetes 中通过简单地配置就可以挂载 NFS 到 Pod 中,而 NFS 中的数据是可以永久保存的,同时 NFS 支持同时写操作。k8s挂载NFS
Persistent Volume:简称PV,就是网盘,网络存储,不属于任何Node,但可以在每个Node上访问。

Namespace
    命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。

ConfigMap
    ConfigMap顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。就是为了让镜像 和 配置文件解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,将来可直接注入到Pod中的容器使用,而注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中。

Job 计划任务
    Job 是 Kubernetes 用来控制批处理型任务的 API 对象。批量处理业务与长期服务业务的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。根据用户的设置,Job 管理的 Pod 把任务成功完成就自动退出了。成功完成的标志根据不同的 spec.completions 策略而不同:单Pod 型任务有一个 Pod 成功就标志完成;定数成功型任务保证有 N 个任务全部成功;工作队列型任务根据应用确认的全局成功而标志
成功。

DaemonSet      指定一个或多个节点上运行同一个pod(进程)
    后台支撑型服务的核心关注点在 Kubernetes 集群中的节点(物理机或虚拟机),DaemonSet(守护程序集)确保所有或某些节点运行同一个 Pod,要保证每个节点上都有一个此类 Pod 运行。节点可能是所有集群节点也可能是通过 nodeSelector 选定的一些特定节点。典型的后台支撑型服务包括,存储,日志和监控等在每个节点上支持 K8S 集群运行的服务。

StatefulSet          管理有状态的服务

    StatefulSet 用于管理所有有状态的服务,比如 MySQL、MongoDB 等。
    StatefulSet 本质上是 Deployment 的一种变体,在 v1.9 版本中已成为 GA 版本,为了解决有状态服务的问题,所管理的 Pod 拥有固定的 Pod 名称、启停顺序。在StatefulSet 中,Pod 名称称为网络标识(hostname),还必须要用到共享存储。在Deployment 中,与之对应的服务是 service,而在 StatefulSet 中与之对应的headless service 。 headless service 即 无 头 服 务 , 与 service 的 区 别 就 是 它 没 有Cluster IP,解析它的名称时将返回该 Headless Service 对应的部 Pod 的 Endpoint 列表。

总结:

工作负载型资源(workload)
Pod:K8S 最小组成部分,共享网络栈共享存储卷;
ReplicaSet:RS,调度器、控制器,通过标签去控制 Pod 的创建、副本数量;
Deployment:控制器,通过控制 RS 的创建去创建 Pod;
StatefulSet:为有状态服务所建立的管理器; 有状态:例如数据库
DaemonSet:可以在每一个节点都运行一个 Pod 的组件;
Job:工作、任务; 计划任务,一组任务要么成功,要么失败
CronJob:轮询工作、轮询任务,为批处理而生的。
服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)
Service:服务(简称 svc),将服务暴露出去;Service 是后端真实服务的抽象一个Service 可以代表多个相同的后端服务
Ingress:将服务暴露出去;Ingress 是反向代理规则,用来规定 HTTP/S 请求应被转发到哪个 Service 上 可以理解成网关

配置与存储型资源
Volume(存储卷):给 Pod 提供持久化的能力;
CSI:容器存储接口,可以扩展各种各样的第三方存储卷。特殊类型的存储卷
ConfigMap:当配置中心来使用的资源类型,一般用来存储配置文件达到热更新的状态;
Secret:保存敏感数据,加密方案存储数据,一般用来保存密码文件、密钥等等;
DownwardAPI:把外部环境中的信息输出给容器,类似于 CS。
Kubernetes 一般都是通过定义资源清单的方式去创建资源,资源清单等价于剧本写好每一步应该如何去做。

(2) 集群级别
不管在任何名称空间下定义,在其他的名称空间下都能看得到,在定义的时候无指定名称空间。例如:Namespace(名称空间)、Node(节点)、Role(角色)、ClusterRole、RoleBinding、ClusterRoleBinding。

(3) 元数据级别
提供一个指标,不像是名称空间类型又不像集群级别,本质上更像是在两者之间但是它有自己的特点,所以更应该作为一个单独的分类。一般根据指标进行对应的操作,例如:HPA、PodTemplate(Pod 模板)、LimitRange(资源限制)。

你可能感兴趣的:(k8s,kubernetes,云原生)