当前位置: 首页 > news >正文

K8s基础总结

概念:

Kubernetes 是基于 Google 在过去十五年来大量生产环境中运行工作负载的经验。Kubernetes的实现参考了 Google 内部的资源调度框架,但并不是 Borg 的内部容器编排系统的开源,而是借鉴Google 从运行 Borg 获得的经验教训,形成了 Kubernetes 项目。

它使用 Label 和 Pod的概念来将容器划分为逻辑单元。Pods 是同地协作(co-located)容器的集合,这些容器被共同部署和调度,形成了一个服务,这是 Kubernetes和其他两个框架的主要区别。相比于基于相似度的容器调度方式像 Swarm 和 Mesos),这个方法简化了对集群的管理。

优势:

最流行等容器编排解决方案框架,基于 Google 庞大的生态圈及 社区产生的产品。通过 Pods 这一抽象的概念,解决 Container 之间的依赖于通信问题。Pods, Services, Deployments是独立 部署的部分,可以通过 Selector 提供更多的灵活性。内置服务注 册表和负载平衡。适用度更广,功能更强大,相较于 Mesos 来说节点规模较小。

曾经的三足鼎立现在一家独大

集群组件交互

控制面板组件节点组件一定存在东西

borg---k8s的前生(谷歌)

主从架构主节点分发任务节点执行任务

外部任务统一对接主节点

  • 外部---客户端
  • 内部---服务端
    • 服务端分为主从架构

schedule调度器负责找到对应节点执行任务

k8s架构图

通过rest API操作/调度node节点

注意事项

  • 只有节点才去部署对应任务区分主从节点---看看有没有pod就行
  • 主节点可以作为节点可以作为节点通过配置可以只作为主节点
  • k8s集群就是上图三部分组成涉及三台机器官方约定最小集群配置至少一个master一个slave节点

注意事项

所有操作核心汇聚 api-serverk8s关键组件维护k8s集群操作只要k8s操作需要经过组件

Linux我们通过命令行工具执行k8s命令k8s内部收到不是命令更像rest请求然后我们请求作出对应响应

操作工具:

客户端

  • kubectl命令行工具Linux
  • Dashboard可视化界面UI

master组件:

kube-controller-manager是控制平面的组件,负责运行 控制器 进程。

从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。

这些控制器包括:

  • 节点控制器(Node Controller) :负责在节点出现故障时 进行通知和响应
  • 任务控制器(Job Controller) :监测代表一次性任务的Job对象,然后创建 Pods 来运行这些任务直至完成
  • 端点分片控制器(EndpointSlice controller) :填充端点分片(EndpointSlice)对象(以提供Service和 Pod之间的链接)。
  • 服务账号控制器(ServiceAccount controller) :为新的命 名空间创建默认的服务账号(ServiceAccount) 。
结构关系图

node节点节点组件就是节点需要组件

注意

  • work node,计算节点,工作节点,负载节点
  • 4层/7层指的是OSI 7层模型中的层数

附加组件
  • kube-dns负责为整个集群提供 DNS 服务
    • 作为一个DNS帮我管理整个集群里面dns映射domain name server本地域名进行管理----如何通过服务名方式访问对应ip
  • Iingress Controller为服务提供外网入口
  • Prometheus 提供资源监控替换上面图中这个目前主流方案
  • Dashboard 提供 GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch 提供集群日志采集、存储与查询
  • ...

k8s架构图(就像ISO网络七层模型一样)

Ecosystem生态系统

  • 就像附加组件就是一个一个应用基于k8s封装出来生态

Interface接口应用需要调用接口api

governance管理层自动化管理应用/权限控制...

  • 系统度量(如基础设施、容器和网络的度量),自动化(如自动 扩展、动态Provision等)以及策略管理(RBAC、Quota、 PSP,NetworkPolicy等)

Application应用部署相关

  • 部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

Nucleus核心最底层对应功能实现最基础操作

  • Kubernetes最核心的功能,对外提供 API 构建商层的应用,对内提供插件式应用执行环境

有状态和无状态:

由于选举机制官方推荐pod集群一般单数并且大于等于

资源和对象

资源通过配置文件形式描述-----资源清单命令

对比java来说

  • 资源---
  • 对象---基于创建出来对象

Kubernetes 中的所有内容都被抽象为"资源",如 Pod、Service、Node 等都是资源。“对象“就是“资源"的实例,是持久化的实体。如某个具体的 Pod、某个具体的 Node, Kubernetes 使用这些实体去表示整个集群的状态。

对象的创建、删除、修改都是通过“Kubernetes API",也就是"Api Server"组件提供的API接口,这些是RESTful风格的Api.与k8s的“万物皆对象”理念相符。命令行工具“kubectl”,实际上也是调用 kubernetes api.

K8s 中的资源类别有很多种,kubectl 可以通过配置文件来创建

对象的创建、删除、修改都是通过“Kubernetes API”,也就是"Api Server"组件提供的API接口,这些是RESTful风格的Api.与 k8s 的"万物皆对象"理念相符。命令行工具“kubectl",实际上也是调用 kubernetes api.

K8s 中的资源类别有很多种,kubectl 可以通过配置文件来创建这些"对象",配置文件更像是描述对象"属性"的文件,配置文件格式可以是 "JSON"或"YAML",常用"YAML".

对象规约和状态

规约(Spec)

"spec"是"规约"、"规格"的意思, spec是必需的,它描述了对象的期望状态(Desired State)——希望对象所具有的特征。当创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。

总结:通过声明式的方式去描述的,描述的是希望这个对象最终有什么样的能力(不是必须,是越接近越好)

规约是必须的,相当于初始化的作用,描述名称,描述命名空间,有几个副本。。。

状态(Status)

kubelet 需要将 spec 期望状态和 status 最终状态一致。(声明式api和定义式api)

表示对象的实际状态,该属性由 k8s自己维护,k8s 会通过一系列的控制器对对应对象进行管理,让对象尽可能的让实际状态与期望状态重合(规约是期望,状态是实际)。

资源清单:描述所有的资源,spec描述其中的期望状态(就像选配件一样,最终整合到一个yaml文件中)

资源的分类(元数据、集群、命名空间)

一、元数据(公共/全局资源):对pod资源的控制

元空间是一组键值对,用于描述 k8s 对象的属性。这些属性包括对象的名称、标签、注释、所属命名空间等。元空间可以用于控制对象的调度、管理对象的配置、以及监控对象的运行状况。

资源在做分类时,其实也就是为了让管理员更加清晰的区分资源能否跨集群使用,能否跨命名空间[ 将集群进行逻辑上的拆分成小集群 ]使用

Horizontal Pod Autoscaler (HPA)---自动扩容缩容

高峰期扩容服务器结束后缩容回来自定义指令识别进行执行

Pod自动扩容:可以根据CPU使用率或自定义指标(metrics)自动对 Pod 进行扩/缩容。

  • 控制管理器每隔30s (可以通过-horizontal-pod-autoscalersync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics (比如Pod的CPU以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式
    • 计算自定义的object metrics
    • 支持两种metrics查询方式: Heapster和自定义的REST API
    • 支持多metrics
Pod Template---用于创建pod实例

spectemplate属性需要复制当前pod也就是扩容就去读取podtemplatetemplate创建出来一个一模一样

Pod Template 是关于 Pod 的定义,但是被包含在其他的Kubernetes 对象中(例如 Deployment、StatefulSet、DaemonSet 等控制器)。控制器通过 Pod Template 信息来创建Pod

nacos

LimitRange---限制资源的使用

可以对集群内Request和Limits的配置做一个全局的统一的限制,相当于批量设置了某一个范围内(某个命名空间)的Pod的资源使用限制。

举例比如约定初始内容2G最大内存5G超过5G内存溢出

二、集群级

Namespace
Node

不像其他的资源(如Pod和Namespace) , Node本质上不是Kubernetes来创建的,Kubernetes只是管理 Node上的资源。虽然可以通过Manifest创建一个Node对象(如下json所示)但Kubernetes 也只是去检查是否真的是有这么一个Node,如果检查失败,也不会往上调度Pod,

ClusterRole全局角色---权限组比如管理员身份

前情需要基于rbac的概念。存在角色的划分,不同权限组

当前意思就是role应用集群权限进行管理

ClusterRoleBinding全局用户绑定---给用户绑定对应身份角色

权限组角色进行资源绑定

命名空间级

  1. 工作负载型---Pod

pod更像一个容器管理一组依赖关系或者管理某个容器类似宿主机的概念,network=host

Pod(容器组)是 Kubernetes 中最小的可部署单元。一个 Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络IP地址、以及一些确定容器该如何运行的选项。Pod 容器组代表了 Kubernetes 中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。

Docker 是 Kubernetes Pod 中使用最广泛的容器引擎;

Kubernetes Pod 同时也支持其他类型的容器引擎。

Kubernetes 集群中的 Pod 存在如下两种使用途径:

  • 一个 Pod 中只运行一个容器。"one-container-per-pod" 是Kubernetes 中最常见的使用方式。此时,您可以认为 Pod容器组是该容器的 wrapper, Kubernetes 通过 Pod 管理容器,而不是直接管理容器。
  • 一个 Pod 中运行多个需要互相协作的容器。您可以将多个紧密耦合、共享资源且始终在一起运行的容器编排在同一个Pod 中

docker通过links进行两个容器绑定关系防止一个容器导致容器ip改变访问不到情况

两个依赖关系容器放在同一个pod进行管理两个服务通过中间服务pause存储文件系统共享进行资源调度

副本

先引入"副本"的概念——一个Pod 可以被复制成多船,每一份可被称之为一个"副本",这些"副本"除了一些描述性的信息(Pod的名字、uid 等)不一样以外,其它信息都是一样的,譬如 Pod内部的容器、容器数量、容器里面运行的应用等的这些信息都是一样的,这些副本提供同样的功能。

Pod 的“控制器”通常包含一个名为“replicas"的属性。"replicas"属性则指定了特定Pod的副本的数量,当当前集群中该Pod的数量与该属性指定的值不一致时,k8s会采取一些策略去使得当前状态满足配置的要求。

其实pod每一个控制器就是一个pod

控制器---适用于无状态服务

RCRS只有扩容缩容功能现在基本用不到

实际上RS和RC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector,但RS还支持基于集合的selector(version in (v1.0, v2.0))-----RS可以根据pod定义的标签去指定哪个pod创建副本数

Deployment(现在都用这个,不用前两个++)

针对RS的更高层次的封装,提供了更丰富的部署相关的功能。

滚动升级/回滚:

新的出现后,销毁旧的保留历史版本方便回滚

好处没有所有服务全部而是通过创建副本依次替换形式进行pod容器版本迭代升级无论如何都是一个可用

暂停和恢复

一次对于pod五六个地方但是不能一个文件全部改掉必须一个一个进行改动因为进行自动滚动升级就会导致频繁升级资源浪费暂停一次改完--->恢复更新

控制器---适用于有状态服务
StatefulSet

StatefulSet中每个Pod的DNS格式为statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local

Headless Service

服务名 =>访问路径(域名) =>ip

  • IserviceName 为 Headless Service 的名字
  • 0..N-1 为 Pod 所在的序号,从 0开始到 N-1
  • statefulSetName 为 StatefulSet 的名字
  • namespace为服务所在的namespace, Headless Servic和 StatefulSet 必须在相同的 namespace
  • .cluster.local 为 Cluster Domain

有序部署

有序部署,有序扩展,即 Pod 是有顺序的,在部署或者扩展的时 候要依据定义的顺序依次依次进行(即从 0到 N-1,在下一个 Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状 态),基于init containers来实现

控制器---守护进程构建Pod---日志收集

构建pod原理基于一个选择器所有匹配pod部署守护进程监控应用用了守护进程相当于构建一个可以输出集群日志pod

DaemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。

典型的应用包括:

  • 日志收集,比如 fluentd,logstash 等
  • 系统监控,比如Prometheus Node Exporter, collectd,New Relic agent, Ganglia gmond 等
  • 系统程序,比如 kube-proxy, kube-dns, glusterd, ceph 等

DaemonSet快速自动化我们日志收集程序调度各个匹配节点上面部署日志收集程序可以当前节点其他pod日志进行一个输出最终上传es里面整体进行日志管理

控制器---任务/定时任务

一次性任务,运行完成后Pod销毁,不再重新启动新容器。比如什么脚本或者下载什么容器下载镜像数据初始化等等

注意

  • 一个任务也是一个podpodk8s最小单元对吧
  • 不同其他控制器无状态服务有状态服务守护进程是持续运行着,而且一旦发现有问题还会自动恢复任务执行完毕执行

种类

  • Job---任务
  • CronJob---周期性执行任务定时任务

  1. 服务发现
Service--k8s集群内部的网络通信实现东西流量集群节点访问请求

"Service"简写"svc"。Pod 不能直接提供给外网访问,而是应该 使用service。 Service就是把Pod暴露出来提供服务, Service才 是真正的"服务",它的中文名就叫"服务"。可以说 Service 是一个应用服务的抽象,定义了 Pod 逻辑集合和访问这个Pod集合的策略。Service代理Pod集合,对外表现为一个访问入口,访问该入口的请求将经过负载均衡,转发到后端Pod 中的容器。

东西流量和南北流量
  • Service---东西流量
  • Ingress---南北流量

实际应用举例:

  1. 存储
Volume---存储卷

数据卷,共享Pod中容器使用的数据。用来放持久化的数据,比如数据库数据。

  • pv
  • pvc
CSI

Container Storage Interface是由来自Kubernetes、MesosDocker 等社区成员联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序。

CSI 规范定义了存储提供商实现 CSI 兼容的 Volume Plugin 的最小操作集和部署建议。CSI 规范的主要焦点是声明 Volume Plugin必须实现的接口。

作用实现各种Volume接口规范统一配置规范有点JavaJDBC只要配置JDBC可以兼容各种数据不需要单独某个进行配置

  1. 特殊类型配置
ConfigMap:

专门存储key-value类型配置属性什么然后configMap加载容器加载pod使得pod容器可以读取configMap数据

这样做的好处容器需要各种数据暴露外部ConfigMap我们需要修改某些属性参数时候可以通过修改ConfigMap达到修改配置效果修改ConfigMap自动我们更新容器拿到最新数据---解决容器配置容器固定问题相当于环境变量

Secret:

ConfigMap作用一样只是一个功能---加密功能更能保证数据安全性问题

Secret有三种类型:
  • Service Account: 用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;
  • Opaque默认加密方式: base64 编码格式的 Secret,用来存储密码、密钥等;对称加密
  • kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。

默认加密方式几乎没什么作用

DownwadrAPI

downwardAPI 这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器和宿主机的数据交换的,而是让 pod 里的容器能够直接获取到这个 pod 对象本身的一些信息。

downwardAPI 提供了两种方式用于将 pod 的信息注入到容器内部:
  • 环境变量:用于单个变量,可以将 pod 信息和容器信息直接注入容器内部
  • volume 挂載:将 pod 信息生成为文件,直接挂載到容器内部中去
  1. 其他
Role:

定义命名空间级别权限

Role 是一组权限的集合,例如 Role 可以包含列出 Pod 权限及列 出Deployment 权限,Role 用于给某个 Namespace 中的资源进 行鉴权。

RoleBinding:

就是绑定资源Role或者ClusterRole绑定命名空间反之ClusterRoleBinding差不多Role或者ClusterRole绑定集群空间

好像之前见过往上

搭建K8s集群

http://www.dtcms.com/a/541600.html

相关文章:

  • 【系统分析师】预测试卷一:案例分析题目及答案详解
  • HTML 音频/视频
  • 印度做网站设计wordpress 标签设置
  • [Linux 内核]翻译kernel-4.4.94/Documentation/sysctl/vm.txt
  • 做代售机票网站程序寿光网络推广公司
  • 基于springboot同城上门喂遛宠物系统的设计与实现
  • MATLAB相机标定入门:Camera Calibration工具包详解
  • 【文献阅读】将 CNN 推广到图数据
  • 向国外支付网站开发费线上营销图片
  • 电商或游戏平台基于大数据引入AI智能体
  • 网站建设注意哪些西安网站建设制作公司
  • Kotlin 协程实践:深入理解 SupervisorJob、CoroutineScope、Dispatcher 与取消机制
  • 机械革命 GM7ZG7m 蛟龙7 5900HX 黑苹果 EFI
  • 怎样自己建设网站企查查企业信息查询系统官网
  • 介绍Spring Cloud Gateway
  • 成都自适应网站建设域名主机网站导航
  • 【数据结构】队列(Queue)详解——数据结构的“先进先出”
  • 【操作系统】计算机系统概述
  • 为什么Android游戏画面在30帧运行时有抖动现象
  • 做的好的手机网站建设银行官方网站认证
  • 云南建设厅网站备案厂家域名审核怎么做返利网站
  • docker compose配置容器只允许指定的外部IP访问
  • 【postgresql在sql的基础上将frvcd按照逗号分割,核查两个表中frvcd数量是否相同】
  • 考研政治(马原)
  • 电商网站开发工作室商务网站模板
  • 金融交易防护:国密 SSL 证书在网银与移动支付中的核心作用
  • 织梦图片瀑布流网站模板摄影作品发布平台
  • spark-RDD期中
  • Linux 网络初识
  • 易天光通信光模块认证全解析:构建全球品质信任网络