k8s的一些关键信息(归类摘抄,非提炼)
零:举例说明
当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信息,创建相应的 ReplicaSet 对象。Scheduler 负责将该 ReplicaSet 中的 Pod 调度到集群中的合适节点上。一旦 Pod 被调度到节点上并成功启动,控制平面会监控 Pod 的运行状态,并根据需要执行相应的自愈操作,以确保应用程序能够稳定地运行。整个过程中,控制平面负责管理和协调集群中的各种资源和操作,以实现集群的高效管理和运行。
一:对象
Kubernetes(K8s)中的对象是用来描述、配置和管理集群中各种资源和组件的抽象概念。Kubernetes 提供了多种类型的对象,每种对象都有不同的作用和用途,用于解决不同的业务问题。以下是一些常见的 Kubernetes 对象及其作用。
-
Pod:
- 作用:Pod 是 Kubernetes 中最基本的部署单元,可以包含一个或多个容器,并共享相同的网络命名空间、IP 地址和存储卷。
- 业务问题:解决容器的部署和管理问题,提供了一个逻辑上的单元,用于运行应用程序或服务。
- 设计原理:Pod 提供了容器的原子调度单元,使得应用程序或服务能够以一个独立的实体进行管理。
- 实现技术:Pod 通过 Kubernetes API 和容器运行时实现,可以使用 YAML 文件来定义 Pod 的规格和配置。
示例:
apiVersion: v1 kind: Pod metadata:name: nginx-pod spec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
-
Deployment:
- 作用:Deployment 用于定义和管理 Pod 的部署策略,可以实现自动化的容器部署、滚动升级和回滚等操作。
- 业务问题:解决应用程序的部署和更新问题,提供了一种方便和可靠的部署机制。
- 设计原理:Deployment 提供了 Pod 的声明式定义和管理,通过控制器来实现 Pod 的自动化部署和更新。
- 实现技术:Deployment 是通过 Kubernetes 控制器来实现的,可以使用 YAML 文件来定义 Deployment 的规格和配置。
示例:
apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deployment spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
Deployment 控制器是 Kubernetes 控制器的一种实现,负责管理 Pod 的部署策略。在 Kubernetes 中还有许多其他类型的控制器,如 ReplicaSet、StatefulSet、DaemonSet 等,它们分别用于管理不同类型的资源对象,并提供了不同的功能和特性,以满足不同的业务需求。
-
Service:
- 作用:Service 定义了一组 Pod 的访问方式,可以实现负载均衡、服务发现和访问控制等功能。
- 业务问题:解决应用程序的服务发现和访问问题,提供了一种稳定和可靠的服务访问机制。
- 设计原理:Service 提供了一个虚拟的服务入口,通过标签选择器来匹配 Pod,并将请求转发到对应的 Pod。
- 实现技术:Service 是通过 Kubernetes 的网络模型和代理机制来实现的,可以使用 YAML 文件来定义 Service 的规格和配置。
示例:
apiVersion: v1 kind: Service metadata:name: nginx-service spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80
以上是 Kubernetes 中的一些常见对象及其作用、业务问题、设计原理和实现技术的概述和示例。这些对象共同构成了 Kubernetes 集群的基础架构,为用户提供了丰富的功能和特性,帮助用户更加轻松地管理和运行容器化应用程序。
二:对象配置
Kubernetes 中的所有对象都可以使用 YAML 或 JSON 格式的配置文件来定义和配置。无论是内置对象(如 Pod、Deployment、Service 等)还是自定义对象(如 CustomResourceDefinition),都可以通过 YAML 或 JSON 文件来描述其规格和配置。(其实这里我觉得分为资源对象Pod等,控制器对象deployment等,服务对象service等等)
在 Kubernetes 的 YAML 文件中,通常包含以下内容:
-
apiVersion: 指定 Kubernetes API 的版本,用于定义所创建资源对象的 API 版本。
-
kind: 指定要创建的资源对象的类型,如 Pod、Deployment、Service 等。
-
metadata: 包含了资源对象的元数据信息,如名称、命名空间、标签等。
-
spec: 定义了资源对象的规格和配置信息,包括容器、存储卷、端口映射等。
-
status: 包含了资源对象的状态信息,由 Kubernetes 控制平面自动更新。
这些内容的业务目标主要是描述和配置 Kubernetes 中的资源对象,以实现应用程序的部署、运行和管理。通过 YAML 文件可以清晰地定义资源对象的各种属性和配置,使得用户可以方便地创建和管理 Kubernetes 中的各种资源。
这些内容的实现是通过 Kubernetes 的 API 和控制平面来实现的。用户可以通过编辑 YAML 文件来定义资源对象的规格和配置,然后通过 Kubernetes 控制平面来解析和处理这些文件,从而创建和管理相应的资源对象。
三:对象中的容器
以下是一些常见 Kubernetes 对象的 YAML 文件,它们包含容器部分:
-
Pod: 定义了一个或多个容器的共享运行环境。
yamlCopy code
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80
-
Deployment: 定义了一组 Pod 的副本,并负责对这些 Pod 进行管理和维护。
yamlCopy code
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80
-
StatefulSet: 类似于 Deployment,但用于有状态应用程序,确保 Pod 按照顺序启动和终止。
yamlCopy code
apiVersion: apps/v1 kind: StatefulSet metadata: name: my-statefulset spec: replicas: 3 serviceName: my-service selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80
-
Job: 定义了一次性任务,运行完即止,不保持运行状态。
yamlCopy code
apiVersion: batch/v1 kind: Job metadata: name: my-job spec: template: spec: containers: - name: nginx-container image: nginx:latest command: ["echo", "Hello Kubernetes!"] restartPolicy: Never
-
CronJob: 类似于 Job,但可以根据 Cron 表达式定期执行任务。
yamlCopy code
apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: nginx-container image: nginx:latest command: ["echo", "Hello Kubernetes!"] restartPolicy: Never
以上是一些常见的包含容器部分的 Kubernetes 对象的 YAML 示例。这些对象定义了不同类型的应用程序或任务,并指定了相应的容器镜像和配置信息。
四:对象中的非容器
不是,不是所有的 YAML 文件都包含容器部分。容器的部分主要出现在定义 Pod、Deployment、StatefulSet、Job、CronJob 等涉及到容器的 Kubernetes 对象时。例如,定义 ConfigMap、Secret、Service、Namespace 等对象时,并不包含容器部分。
下面是一些 Kubernetes 对象的例子,它们不包含容器部分:
-
ConfigMap: 用于存储配置数据,如环境变量、配置文件等。
yamlCopy code
apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: key1: value1 key2: value2
-
Secret: 用于存储敏感数据,如密码、密钥等。
yamlCopy code
apiVersion: v1 kind: Secret metadata: name: my-secret data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm
-
Service: 用于定义服务的访问方式和网络策略。
yamlCopy code
apiVersion: v1 kind: Service metadata: name: my-service spec: ports: - port: 80 targetPort: 8080 selector: app: my-app
-
Namespace: 用于逻辑上的隔离和管理,包含其他对象。
yamlCopy code
apiVersion: v1 kind: Namespace metadata: name: my-namespace
这些对象的定义中并不包含容器部分,因为它们与容器无关。容器通常出现在定义 Pod 或其他包含容器的对象时。
五:k8s核心组件
Kubernetes 是一个高度可扩展的容器编排平台,由多个组件组成,每个组件都有自己的功能和作用。以下是 Kubernetes 中常见的组件及其功能:
-
kube-apiserver(API Server):
- 解决问题:提供 Kubernetes 集群的 API 接口,处理外部和内部的 API 请求。
- 实现技术:Go 语言,基于 HTTP/HTTPS 协议提供 RESTful API。
- 示例:当用户通过 kubectl 提交创建 Pod 的请求时,该请求首先会发送到 API Server。
-
kube-controller-manager(Controller Manager):
- 解决问题:负责运行一系列控制器,监控集群状态并进行调整。
- 实现技术:Go 语言,每个控制器都是一个独立的进程。
- 示例:Deployment Controller 监控 Pod 的状态,并确保根据用户定义的副本数进行副本的创建和删除。
-
kube-scheduler(Scheduler):
- 解决问题:负责将 Pod 调度到集群中的节点上,根据节点资源和 Pod 要求进行智能调度。
- 实现技术:Go 语言,调度算法包括优先级算法、过滤算法等。
- 示例:Scheduler 根据 Pod 的资源需求和调度策略,选择合适的节点进行调度。
-
kubelet:
- 解决问题:负责管理单个节点上的 Pod,执行 Pod 的创建、启动、停止等操作。
- 实现技术:Go 语言,与 Docker 或其他容器运行时进行交互。
- 示例:kubelet 根据 API Server 下发的指令,创建并管理节点上的 Pod。
-
kube-proxy:
- 解决问题:负责实现 Kubernetes 服务的网络代理和负载均衡,将服务暴露给集群内外的其他组件。
- 实现技术:Go 语言,基于 IPTables 或 IPVS 等技术进行网络代理和负载均衡。
- 示例:kube-proxy 接收到服务请求后,将请求转发给后端的 Pod,实现服务的负载均衡和高可用性。
-
etcd:
- 解决问题:提供 Kubernetes 集群的分布式键值存储,用于存储集群的状态和配置信息。
- 实现技术:Go 语言,使用 Raft 一致性算法来保证数据的一致性和高可用性。
- 示例:etcd 存储着集群的各种资源对象信息,如 Pod、Service、ConfigMap 等。
-
kube-dns(CoreDNS):
- 解决问题:为 Kubernetes 集群提供 DNS 服务,实现服务发现和解析。
- 实现技术:Go 语言,基于 DNS 协议提供域名解析服务。
- 示例:当服务需要通过域名进行通信时,kube-dns 负责将服务名称解析为对应的 Pod IP 地址。
以上是 Kubernetes 中的一些核心组件,它们协同工作,共同构建了 Kubernetes 的完整功能。这些组件基于 Go 编程语言实现,采用了分布式系统和微服务架构,通过 API 接口相互通信和协作,实现了 Kubernetes 集群的高效管理和运行。
六:举例说明
当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信息,创建相应的 ReplicaSet 对象。Scheduler 负责将该 ReplicaSet 中的 Pod 调度到集群中的合适节点上。一旦 Pod 被调度到节点上并成功启动,控制平面会监控 Pod 的运行状态,并根据需要执行相应的自愈操作,以确保应用程序能够稳定地运行。整个过程中,控制平面负责管理和协调集群中的各种资源和操作,以实现集群的高效管理和运行。
相关文章:

k8s的一些关键信息(归类摘抄,非提炼)
零:举例说明 当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信…...

海外媒体发稿:8个提升影响力的日韩地区媒体发稿推广策略-华媒舍
在今天的数字化时代,媒体发稿推广成为企业和个人增加影响力的重要方式。特别是在日韩地区,这个拥有庞大媒体市场和活跃社交媒体用户的地区,正确的推广策略将对影响力的提升起到关键作用。我们将介绍8个提升影响力的日韩地区媒体发稿推广策略。…...

面试官:能不能给 Promise 增加取消功能和进度通知功能... 我:???
扯皮 这段时间闲着没事就去翻翻红宝书,已经看到 Promise 篇了,今天又让我翻到两个陌生的知识点。 因为 Promise 业务场景太多了自我感觉掌握的也比较透彻,之前也跟着 Promise A 的规范手写过完整的 Promise,所以这部分内容基本上…...

详解MySQL增删查改
众所周知,MySQL是非常重要的数据库语言,下面我们来回顾一下mysql的增删查改吧 MySQL创建数据库: CREATE DATABASE 数据库名;MySQL删除数据库: DROP DATABASE <database_name>; --直接删除,不检查是否存在 DROP…...

Mysql开启bin-log日志
目录 一、安装配置 二、mysqlbinlog命令 一、安装配置 yum -y install mariadb mariadb-server#安装mysql数据库#默认配置文件/etc/my.cnfvim /etc/my.cnflog-binmariadb-bin #开启二进制日志 systemctl restart mariadb#会在/car/lib/mysql/产生二进制日志文件࿰…...

Java:性能优化细节01-10
Java:性能优化细节01-10 在Java程序开发过程中,性能优化是一个重要的考虑因素。常见的误解是将性能问题归咎于Java语言本身,然而实际上,性能瓶颈更多地源于程序设计和代码实现方式的不当。因此,培养良好的编码习惯不仅…...

CVE-2022-24652 漏洞复现
CVE-2022-24652 开题 后台管理是thinkphp的,但是工具没检测出漏洞。 登陆后界面如下,上传头像功能值得引起注意 这其实就是CVE-2022-24652,危险类型文件的不加限制上传,是文件上传漏洞。漏洞路由/user/upload/upload 参考文章&a…...

LeetCode、338. 比特位计数【简单,位运算】
文章目录 前言LeetCode、338. 比特位计数【中等,位运算】题目链接与分类思路位运算移位处理前缀思想实现 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java…...

借助Aspose.BarCode条码控件,C# 中的文本转 QR 码生成器
二维码用于在较小的空间内存储大量数据。它们易于使用,可以通过智能手机或其他设备扫描来打开网站、观看视频或访问其他编码信息。在这篇博文中,我们将学习如何使用 C# 以编程方式生成基于文本的 QR 码。我们将提供分步指南和代码片段,帮助您…...

vue打包优化,webpack的8大配置方案
vue-cli 生成的项目通常集成Webpack ,在打包的时候,需要webpack来做一些事情。这里我们希望它可以压缩代码体积,提高运行效率。 文章目录 (1)代码压缩:(2)图片压缩:&…...

B端系统从0到1:有几步,其中需求分析要做啥?
一款B系统从无到有都经历了啥,而其中的需求分析又要做什么?贝格前端工场给老铁们做一下分析,文章写作不易,如果咱们有界面设计和前端开发需求,别忘了私信我呦,开始了。 一、B端系统从0到1都有哪些要走的步骤…...

django中查询优化
在Django中,查询优化是一个重要的主题,因为不正确的查询可能会导致性能问题,尤其是在处理大量数据时。以下是一些在Django中进行查询优化的建议: 一:使用select_related和prefetch_related: select_related用于优化一…...

【JavaScript】输入输出语法
目录 一、输出语法 二、输入语法 一、输出语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…...

多模态基础--- word Embedding
1 word Embedding 原始的单词编码方式: one-hot,维度太大,不同单词之间相互独立,没有远近关系区分。 wordclass,将同一类单词编码在一起,此时丢失了类别和类别间的相关信息,比如class1和class3…...

Mysql 日志
0 引言 MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是: ● 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。 ● 查询日志:记录建立的客户端连接和执行的…...

【开源】SpringBoot框架开发服装店库存管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…...

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库
背景 基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境,以下创建了一个 local-storage 的 StorageClass ,并使用本地…...

标准IO 2月4日学习笔记
IO输入输出,操作对象是文件 Linux文件类型: b block 块设备文件 按块扫描设备信息的文件 存储设备 c character 字符设备文件 按字符扫描设备信息的文件 d direct…...

如何在1Panel上偷渡HTTP/3
本文 首发于 Anyeの小站,转载请取得作者同意。 前言 简介 HTTP/3 的基础即谷歌多年探索的基于 UDP 的 QUIC 协议。与 TCP 相比,使用 UDP 可以提供更大的灵活性,并且可以使 QUIC 完全于用户空间中实现——对协议实现的更新不像 TCP 那样需要绑…...

Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136131310 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…...

116 C++ 可变参数函数,initializer_list (初始化列表), 省略号形参
一 可变参数函数 有时候我们传递的参数是不固定的。 这种能接受非固定个数参数的函数就是可变参数函数 怎么实现呢?就要用到 initializer_list 标准库类型 该类型能够使用的前提条件是:所有的实参类型相同。 二,initializer_list(初始化列…...

强国有我社会实践公益活动在合肥市庐阳区开展
2月18日是开工第一天,阳光灿烂、春光明媚。合肥市四十五中2022级星辰(5)班部分同学在监护人的陪伴下来到庐阳区双岗街道万小店社区残疾人工作站,和工作站兄弟姐妹们共同开展“强国复兴有我”社会实践公益活动。合肥市庐阳区为民社…...

Nginx 正向代理、反向代理
文章目录 前言1. 正向代理1.1 概念1.2 逻辑图1.3 使用场景 2. 反向代理2.1 概念2.2 逻辑图2.3 使用场景 前言 正向代理主要是用来解决访问限制问题;反向代理则是提供负载均衡、安全防护等作用 1. 正向代理 1.1 概念 正向代理是一个位于客户端和目标服务器之间的代理…...

软考学习--计算机组成原理与体系结构
计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 :数字的二进制表示反码 : 正数的反码等于原码,负数的反码等于原码取反补码: 正数的补码等…...

fish终端下conda activate失败
【问题】fish终端下激活conda环境报错: >> conda activate base CondaError: Run conda init before conda activate ## 然而运行 conda init fish 仍旧无法解决【解决】 参考:https://github.com/conda/conda/issues/11079 方法一…...

FPGA之移位寄存器
SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D (DI1 LUT 引脚)和移出 Q31(MC31 LUT 引脚)线路将LUT级联,以形成更大…...

Android Compose Material3 ModalNavigationDrawer 抽屉的使用(处理了一些坑)
Android Compose Material3 ModalNavigationDrawer 抽屉的使用(处理了一些坑) val drawerState rememberDrawerState(initialValue DrawerValue.Closed) val scope rememberCoroutineScope()ModalNavigationDrawer(drawerState drawerState,drawerC…...

golang select两个channel性能稳定,三个channel时性能会发生抖动,为什么?
golang select两个channel性能稳定,三个channel时性能会发生抖动,为什么? 答题思路 select —> 让 Goroutine同时等待多个 Channel 可读或者可写 —> Goroutine —> 调度器调度 —> 资源竞争 —> 不稳定、抖动 在 Go 中&#…...

VSCODE上使用python_Django
接上篇 https://blog.csdn.net/weixin_44741835/article/details/136135996?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136135996%22%2C%22source%22%3A%22weixin_44741835%22%7D VSCODE官网: Editing Python …...

探索IDE的世界:什么是IDE?以及适合新手的IDE推荐
引言 在编程的世界里,集成开发环境(IDE)是我们日常工作的重要工具。无论是初学者还是经验丰富的开发者,一个好的IDE都能极大地提高我们的编程效率。那么,什么是IDE呢?对于新手来说,又应该选择哪…...