云原生之kubernetes基础概念

目录

一、目前市场上的云

二、云计算的主要服务模式

三、Kubernetes

1、使用Kubernetes的好处

2、资源管理器

1、k8s

2、k8s的基础概念

四、 Kubernetes 基本概念和术语

1、 Kubernetes 集群的两种管理角色:Master 和 Node

1.1、master

1.1.1、master概念

1.1.2、master节点上运行的进程

1.2、node

1.2.1、node概念

1.2.2、node节点上运行的进程

2、kubernetes是怎样实现高效均衡的资源调度策略的

3、Pod

3.1、pod中容器有几种

3.2、pod结构

4、pod和容器的关系

①、Pod的自我修复能力

②、弹性伸缩促发条件:(弹性伸缩,是定义一次,自动控制的)

5、kubernetes服务发现与负载均衡

5.1、pod网络

5.2、pod如何对外部提供访问

5.3、pod 的负载均衡

6、创建pod的流程

一、目前市场上的云

国内:阿里云、华为云、百度云(私有云)、微软云、其他云

国外:AWS谷歌

二、云计算的主要服务模式

SaaS:Software as a Service,软件即服务,这层的作用是将应用作为服务提供给客户。

PaaS:Platform as a Service,平台即服务,这层的作用是将开发平台作为服务提供给用户。

IaaS:Infrastructure as a Service,基础设施即服务,这层的作用是提供虚拟机或者其他资源作为服务提供给用户。

三、Kubernetes

1、使用Kubernetes的好处

①、可以“轻装上阵”地开发复杂系统

②、使用 Kubernetes 就是在全面拥抱微服务架构

③、我们的系统可以随时随地整体“搬迁”到公有云上

④、Kubernetes 系统架构具备了超强的横向扩容能力

2、资源管理器

1、k8s

k8s首先是对集群化的容器进行批管理(增、删、改、查)

2、k8s的基础概念

K8s视一切可以管理的对象为"资源”,哪怕该服务不是K8s内部的,如果想做为K8的常规组件来使用,K8也提供了API给与我们来自行定义"控制器”(汇聚插件);K8S 也是一个大的生态圈

四、 Kubernetes 基本概念和术语

Kubernetes 中的大部分概念如 Node Pod Replication Controller Service 等都可以看作一
种“资源对象”,几乎所有的资源对象都可以通过 Kubernetes 提供的 kubectl 工具(或者 API
程调用)执行增、删、改、查等操作并将其保存在 etcd 中持久化存储。从这个角度来看,Kubernetes 其实是一个高度自动化的资源控制系统,它通过跟踪对比 etcd 库里保存的“资源期望状态”与 当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

1、 Kubernetes 集群的两种管理角色:Master Node

1.1、master

1.1.1、master概念

Kubernetes 里的 Master 指的是集群控制节点,每个 Kubernetes 集群里需要有一个 Master
节点来负责整个集群的管理和控制,基本上 Kubernetes 的所有控制命令都发给它,它来负责具
体的执行过程,我们后面执行的所有命令基本都是在 Master 节点上运行的。 Master 节点通常会
占据一个独立的服务器(高可用部署建议用 3 台服务器),其主要原因是它太重要了,是整个集
群的“首脑”,如果宕机或者不可用,那么对集群内容器应用的管理都将失效。

1.1.2、master节点上运行的进程

①、Kubernetes API Serverkube-apiserver

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

②、Kubernetes Controller Manager(kube-controller-manager)

作用:Kubernetes 里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

③、Kubernetes Schedulerkube-scheduler

作用:负责资源调度(Pod 调度)的进程,相当于公 交公司的“调度室”。

④、etcd服务

作用:Kubernetes 里的所有资源对象的数据存储位置。

1.2、node

1.2.1、node概念

除了 Master Kubernetes 集群中的其他机器被称为 Node 节点,Node 节点才是 Kubernetes 集群中的工作负载节点。 每个 Node 都会被 Master 分配一些工作负载( Docker 容器),当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。

1.2.2、node节点上运行的进程

①、kubelet

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

②、kube-proxy

作用:实现 Kubernetes Service 的通信与负载均衡机制(L4层的负载均衡)的重要组件

③、Docker Enginedocker

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

2、kubernetes是怎样实现高效均衡的资源调度策略的

node节点可以在运行期间动态的增加到k8s的集群中,前提是这个节点已经完成正确的安装、配置和启动关键进程。在默认情况下,kublet会向master注册自己,这也是k8s推荐的管理方式。node被纳入集群管理范围后,kubelet进程就会定时向master节点汇报自生的状态,例如操作系统、Docker 版本、机器的 CPU 和内存情况,以及当前有哪些 Pod 在运行等。这样Master 可以获知每个 Node 的资源使用情况,并实现高效均衡的资源调度策略。 而某个 Node 超过指定时间不上报信息时,会被 Master 判定为“失联”,Node 的状态被标记为 不可用(Not Ready),随后 Master 会触发“工作负载大转移”的自动流程。

3、Pod

pod是可以在kubernetes中创建和管理的,最小的可部署的计算单元(pod是K8s的最小的资源单位)

3.1、pod中容器有几种

名称 作用
init容器 初始化容器环境

pause容器(根容器)

在pod内提供network namespace和存储卷支持
业务/应用容器 提供业务运行

3.2、pod结构

pod 相当于一个容器,pod 有独立的 ip 地址,也有自己的 hostname,利用 namespace 进行资源隔离,相当于一个独立沙箱环境。

pod 内部封装的是容器,可以封装一个,或者多个容器(通常是一组相关的容器)

每一个pod中都可以多个容器,这些容器可分为以下:

①、用户程序所在的容器即业务容器,数量可多可少,他们是并行启动的。

②、pause容器,这是每个pod都会有的一个根容器,他的作用有两个:

        1、可以以他为根据,评估整个pod的健康状态

        2、可以在跟容器上设置IP地址,其他的容器都以此IP(pod ip),以实现pod内部的网络通信

③、init初始化容器

        init容器必须在应用程序(业务)容器启动之前运行完成,而应用程序容器是并行运行的,所

以Init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法。

         init容器特点:

①、Init容器总是运行到成功完成为止

②、每个Init容器都必须在下一个Init容器启动之前成功完成,他们之间是串行启动的

③、pause容器个业务容器们运行行前,都会先跑一个init初始化容器。如果 Pod 的Init容器失败,k8s 会不断地重启该Pod(为了让init容器可以启动完成),直到 Init容器成功为止。然而,如果 Pod对应的重启策略(restartPolicy)为Never,它不会重新启动。

因此可以得出:pod的最小的部署单元为:基础容器(pause)、初始化容器(init初始化容器)、业务容器。

4、pod和容器的关系

容器封装在Pod中

①、Pod的自我修复能力

当副本集为3时,即pod的个数为3,主控制器管理着副本控制器,副本控制器管理着各自的pod。

假如此时pod_1容器宕机了。副本集控制器会上报主控制A,主控器A收到后会重新创建副本控制器C,新的副本控制器C也会生成一个新的pod,然后主控制器会删除副本控制器A(副本集控制器和各自的pod是对应的。pod挂了,则副本集控制器也就挂了,也会被移除)。最后副本控制器C替代了副本控制器A;新的pod替代了pod_1。(在此过程中,用户感觉设备“重启了”,然这个并不是重启,而是一个删除pod和副本集控制器和新建的一个过程)

Pod的弹性伸缩能力

前置条件:

条件一:

cpu 的使用率: 为20%~70%

20%为最低的可容忍的负载率

70%为最高的可容忍的负载率

条件二:
docker cgroup资源限制:cpu为300M,mem为300M

②、弹性伸缩促发条件:(弹性伸缩,是定义一次,自动控制的)

例如:

当pod_3的cpu使用率低于300x20%=60M的使用率,就会触发条件,删除Pod_3。把它的任务分配个剩下的pod。

当pod_1、pod_2、pod_3的内存使用率为300x70%=210M以上,就会触发条件,在生成一个主控制器D,和副本集控制器pod_4

5、kubernetes服务发现与负载均衡

5.1、pod网络

①、pod 有自己独立的 IP 地址

②、pod 内部的容器之间是通过 localhost 进行访问

5.2、pod如何对外部提供访问

 pod 想对外提供服务,必须绑定物理机端口 (即在物理机上开启端口,让这个端口和 pod 的端口进行映射),这样就可以通过物理机进行数据包的转发。

5.3、pod 的负载均衡

 pod的负载均衡几种方式

1、iptables

2、ipvs(默认下,一般使用该方式。使用kube-proxy(软件形式)在四层的负载均衡

3、uperspace

pod 是一个进程,是有生命周期的,一旦宕机、版本更新都会创建新的 pod( IP 地址会变化,hostname 会变化),此时再使用 Nginx 做负载均衡就不太合适了,因为它不知道 pod 发生了改变,那么请求就不能被接受。所以服务发生了变化它根本不知道,Nginx 无法发现服务,不能用 Nginx 做负载均衡。

6、创建pod的流程

 ①、首先kubectl转化为json后向api-server提交创建pod的请求

②、api-server收到pod的创建请求后,会将信息记录在etcd中

③、scheduler监听到api-server的处理请求后,然后向api-server申请后端节点信息

④、api-server 收到scheduler的请求后,提交申请到etcd,获取后端节点信息。并把结果返回scheduler

⑤、scheduler 进行预选优选、打分,然后提交结果给api-server

⑥、controller-manager 监听api-server处理的请求信息,并将所需的控制器资源给与api-server

⑦、api-server 和node节点的kubelet进行对接交互

⑧、kubelet调用资源创建pod,并将统计信息返回给api-server

⑨、api-server将信息记录在etcd中

猜你喜欢

转载自blog.csdn.net/m0_62948770/article/details/127593312