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

K8s开发人员也需要了解的相关知识

工作变动总结一下之前的笔记,整理一个速查的东西,方便之后查阅

K8s开发相关

1、k8s yml apiverison:

Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示,如 v1apps/v1,其中包括两个部分:

  1. (Group): 如果资源属于某个 API 组,则该字段表示该组的名称。例如,apps 表示应用程序相关的资源如 Deployments。
  2. 版本 (Version): 表示 API 的版本,常见的有 v1v1beta1 等。

常见的 API 版本有:

  • v1: 核心组的稳定版本,包括常用的资源如 Pods、Services、ConfigMaps 和 Secrets。
  • apps/v1: 用于管理应用的稳定版本,包括 Deployments、StatefulSets、DaemonSets 等。
  • batch/v1: 用于批处理任务,包括 Job 资源。
  • batch/v1beta1: 包括 CronJob 资源。
  • extensions/v1beta1: 早期版本的一些资源,例如 Ingress(现在推荐使用 networking.k8s.io/v1)。
  • networking.k8s.io/v1: 网络相关资源,包括 NetworkPolicies 和 Ingresses。
  • rbac.authorization.k8s.io/v1: 用于角色基础访问控制的资源,包括 Roles 和 RoleBindings。
  • storage.k8s.io/v1: 存储相关的资源,包括 StorageClasses 和 VolumeAttachments。
  • autoscaling/v1: 自动缩放相关资源,包括 HorizontalPodAutoscalers。
  • policy/v1beta1: 包括 PodSecurityPolicies,用于定义 Pod 的安全性相关设置。

2、开发人员比较常用的一些 Kubernetes Kind类型:

核心资源类型

  1. Pod: 作为应用的最小和最简单的单元,每个 Pod 包含一个或多个容器。
  2. Service: 提供稳定的 IP 地址和 DNS 名称,将外部网络流量路由到后端的 Pod。
  3. Deployment: 用来描述应用的期望状态,Kubernetes 会确保真实状态符合期望状态。
  4. ConfigMap: 存储非敏感数据的键值对,可以用来存储环境变量、配置文件等信息。
  5. Secret: 存储敏感数据,如密码、OAuth 令牌等。
  6. PersistentVolumePersistentVolumeClaim: 提供 Pod 持久化存储的能力。
  7. Namespace: 提供一种将集群资源分隔成多个独立的部分的方式。

配置和管理资源类型

  1. ResourceQuota: 确保每个命名空间下的资源使用量不超过设定的配额。
  2. LimitRange: 限制命名空间下资源的大小,请求和限制。
  3. HorizontalPodAutoscaler: 根据 CPU 使用或其他选择的度量自动缩放 Pod 的数量。

网络资源类型

  1. Ingress: 为服务提供外部可访问的 URL,负载均衡,SSL/TLS 终止等。
  2. NetworkPolicy: 定义 Pod 间通信的网络策略。

其他资源类型

  1. JobCronJob: 用于执行一次性或周期性的任务。
  2. StatefulSet: 用于运行需要持久存储和唯一网络标识符的应用。
  3. DaemonSet: 确保所有(或部分)节点运行一个 Pod 的副本。
  4. ReplicaSet: 确保指定数量的 Pod 副本始终可用。
  5. Node: 表示集群中的一个节点。

开发人员在使用 Kubernetes 时,通常会涉及到这些资源的创建和管理。通过这些资源,他们可以定义和配置应用的运行环境,实现自动化和弹性伸缩等特性。理解这些资源的作用和使用方式,是开发人员在 Kubernetes 平台上高效工作的基础。

3、开发常用的配置文件的模版

标准结构

apiVersion: <string>
kind: <string>
metadata:name: <string>namespace: <string>labels:<key>: <value>annotations:<key>: <value>
spec:...
status:...

字段解释

  • apiVersion (必选): 指定 Kubernetes API 的版本,用于确定使用哪个版本的 API 来创建该资源。
  • kind (必选): 指定资源的类型,例如 Pod、Service、Deployment 等。
  • metadata (必选): 提供资源的元数据,包括名称、命名空间和标签等。
    • name (必选): 资源的唯一名称。
    • namespace (可选): 指定资源所属的命名空间。
    • labels (可选): 键值对,用于组织和选择资源。
    • annotations (可选): 键值对,用于存储非标识性的元数据。
  • spec (根据资源类型,可能是必选或可选): 指定资源的期望状态,包括所需的配置参数。
  • status (可选): 描述资源的当前状态。通常由 Kubernetes 系统维护和更新。

spec 字段

spec 字段的内容高度依赖于资源的 kind 类型。以下是一些常见资源类型的 spec 字段示例:

  • Pod:

    spec:containers:- name: <container-name>image: <container-image>ports:- containerPort: <port-number>
  • Service:

    spec:selector:<label-key>: <label-value>ports:- protocol: TCPport: <port-number>targetPort: <target-port-number>
  • Deployment:

    spec:replicas: <number-of-replicas>selector:matchLabels:<label-key>: <label-value>template:metadata:labels:<label-key>: <label-value>spec:containers:- name: <container-name>image: <container-image>
  • ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:name: <string>namespace: <string>labels:<key>: <value>annotations:<key>: <value>
data:   # ConfigMap\Secret 特有的<key>: <value>
  • Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: <string>namespace: <string>labels:<key>: <value>annotations:<key>: <value>
spec:ingressClassName: <string>defaultBackend:service:name: <string>port:number: <integer>resource:apiGroup: <string>kind: <string>name: <string>tls:- hosts:- <string>secretName: <string>rules:- host: <string>http:paths:- path: <string>pathType: <string>backend:service:name: <string>port:name: <string>number: <integer>resource:apiGroup: <string>kind: <string>name: <string>
status:loadBalancer:ingress:- ip: <string>hostname: <string>

4、Deployment和StatefulSet的区别

StatefulSetDeployment 是 Kubernetes 中两种不同类型的资源控制器,它们用于管理 Pod 的生命周期,但它们主要用于不同的场景,并提供不同的功能。

Deployment

  1. 无状态应用: Deployment 适用于无状态的应用。这意味着单个 Pod 的实例是可以互换的,它们不需要保持任何持久状态。
  2. 副本: 通过 Deployment 创建的所有 Pod 副本都是相同的。
  3. 滚动更新: Deployment 支持滚动更新,可以在不停止服务的情况下更新应用。
  4. 快速扩展: 适用于需要快速启动或缩容的应用。
  5. 生命周期管理: Deployment 确保指定数量的 Pod 副本始终处于运行状态。

StatefulSet

  1. 有状态应用: StatefulSet 适用于需要持久存储和特定网络标识的有状态应用。
  2. 稳定的网络标识: 每个 Pod 副本都有一个稳定的、唯一的网络标识符。
  3. 稳定的存储: 即使 Pod 被重新调度到不同的节点,它也能保持对存储卷的访问。
  4. 有序部署: StatefulSet 保证 Pod 是按顺序创建和删除的。
  5. 有序扩展: 当扩展或缩容时,StatefulSet 确保操作是按照顺序进行的。

用例对比

  • 无状态应用: 如果你的应用不需要保存状态、快速扩展和缩容,以及滚动更新,那么 Deployment 更适合。
  • 有状态应用: 如果你的应用需要稳定的网络标识、稳定的持久存储和有序、优雅的部署和扩展,那么 StatefulSet 更适合。

总的来说,选择 StatefulSetDeployment 取决于你的应用是否需要保持状态以及你对网络标识和存储的需求。

5、apollo部署实例

下面是一个使用Kubernetes部署Apollo的例子,包括一个Pod、一个Service和一个Deployment。

  1. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: apollonamespace: default
spec:replicas: 3selector:matchLabels:app: apollotemplate:metadata:labels:app: apollospec:containers:- name: apolloimage: apolloconfig/apollo-portal:latestenv:- name: SPRING_DATASOURCE_URLvalue: jdbc:mysql://your-mysql-server:3306/ApolloConfigDB?characterEncoding=utf8- name: SPRING_DATASOURCE_USERNAMEvalue: yourusername- name: SPRING_DATASOURCE_PASSWORDvalue: yourpasswordports:- containerPort: 8070# ---
# apiVersion: v1
# kind: Service
# metadata:
  1. Service
apiVersion: v1
kind: Service
metadata:name: apollo-servicenamespace: default
spec:selector:app: apolloports:- protocol: TCPport: 80targetPort: 8070type: ClusterIP
  1. Pod
    Pods通常由Deployment管理,但如果你要创建单独的Pod:
apiVersion: v1
kind: Pod
metadata:name: apollo-podlabels:app: apollo
spec:containers:- name: apolloimage: apolloconfig/apollo-portal:latestenv:- name: SPRING_DATASOURCE_URLvalue: jdbc:mysql://your-mysql-server:3306/ApolloConfigDB?characterEncoding=utf8- name: SPRING_DATASOURCE_USERNAMEvalue: yourusername- name: SPRING_DATASOURCE_PASSWORDvalue: yourpasswordports:- containerPort: 8070

在这个例子里面, service和deployment是分开写的, 你也可以写到一块。

当你在创建 Service 时,Kubernetes 不要求对应的 Pod 或 Deployment 已经存在。Service 会持续地监听并动态地更新其选择的 Pod 列表。这意味着你可以先创建 Service,再创建 Deployment,Service 会自动发现并开始转发流量到正确的 Pod。

  1. 如果先创建 Service: Service 会一直等待,直到有符合其标签选择器的 Pod 被创建,然后它会开始转发流量到这些 Pod。
  2. 如果先创建 Deployment: Pod 会被创建,并且等待 Service 被创建。一旦 Service 创建并且其标签选择器正确配置,它就会开始转发流量到这些 Pod。

6、Kubernetes 的核心组件的实现

  1. 容器runtime:
    • Kubernetes 支持多种容器运行时,包括 Docker 和 containerd。容器运行时负责在节点上运行和管理容器。它们实现了 OCI(Open Container Initiative) 标准,以确保跨不同环境的一致性和可移植性。
  2. 容器编排:
    • Kubernetes 的编排功能通过其控制平面中的各种控制器和调度器实现。例如,ReplicaSet 控制器确保指定数量的副本始终在运行,而 Deployment 控制器可以帮助管理应用程序的更新和回滚。
  3. 容器中心的基础架构编排:
    • Kubernetes 通过其网络和存储抽象实现了基础架构编排。例如,它提供了 Service 和 Ingress 对象来管理网络通信,以及 PersistentVolume 和 PersistentVolumeClaim 对象来管理存储资源。
  4. 自愈机制:
    • Kubernetes 通过其控制器和健康检查机制实现自愈功能。例如,如果一个节点变得不健康,Kubernetes 可以自动重新调度该节点上的 Pod 到其他健康节点。
  5. 服务发现和负载均衡:
    • Kubernetes 通过其 Service 和 Ingress 对象实现服务发现和负载均衡。Service 对象提供了一个稳定的网络地址,用于访问一个或多个 Pod,而 Ingress 对象提供了 HTTP 和 HTTPS 路由到集群内的服务。

相关文章:

K8s开发人员也需要了解的相关知识

工作变动总结一下之前的笔记&#xff0c;整理一个速查的东西&#xff0c;方便之后查阅 K8s开发相关 1、k8s yml apiverison: Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示&#xff0c;如 v1 或 apps/v1&#xff0c…...

创建并启动华为HarmonyOS本地与远程模拟器及远程真机

1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机...

责任链模式应用案例

前几天系统商品折扣功能优化&#xff0c;同事采用了责任链模式重构了代码&#xff0c;现整理如下。 一、概念 责任链模式是为请求创建一个处理者对象的链条&#xff0c;所有处理者&#xff08;除最末端&#xff09;都含有下一个对象的引用从而形成一条处理链&#xff0c;该模…...

给你一个整数 num ,返回 num 中能整除 num 的数位的数目

给你一个整数 num &#xff0c;返回 num 中能整除 num 的数位的数目。 如果满足 nums % val 0 &#xff0c;则认为整数 val 可以整除 nums 。 示例 1&#xff1a; 输入&#xff1a;num 7 输出&#xff1a;1 解释&#xff1a;7 被自己整除&#xff0c;因此答案是 1 。 示例 2&…...

Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)

MVC房贷计算器&#xff08;Ajax版&#xff09; 1.新建一个JavaWeb项目hslcalweb&#xff0c;设置tomcat10。 2.创建房贷计算器JavaBean&#xff1a;HslCalBean.java&#xff0c;增加以下的属性&#xff0c;并生成Getter/Setter方法。 private double total; //贷款额度pr…...

2023.10.28 关于 synchronized 原理

目录 synchronized 特性 synchronized 优化机制 锁升级&#xff08;锁膨胀&#xff09; 其他优化机制 锁消除 锁粗化 synchronized 特性 开始时是乐观锁&#xff0c;如果锁冲突频繁&#xff0c;就转为悲观锁开始是轻量级锁&#xff0c;如果锁被持有的时间较长&#xff0c…...

力扣 27. 移除元素

目录 1.解题思路2.代码实现 1.解题思路 利用双指针思路&#xff0c;当让一个指针先走&#xff0c;指针指向的位置不等于val时&#xff0c;将此时该指针的值给另一个指针并且两个指针都加一&#xff0c;如果等于val,则让该指针加一继续走.最后另一个指针的下标就为排好的数组的…...

redis爆满导致数据丢失

记一则redis爆满导致数据丢失的一场事故 某功能上线后&#xff0c;发现出现问题&#xff0c;最后定位到了 redis. 由于存储的数据过多&#xff0c;导致阿里云4G大小的 redis 爆满&#xff0c;触发了回收策略。 于是临时扩容,运维同学当时未找到阿里云配置。 后面我用工具连接了…...

Android14 WMS启动流程

一 概述 本文Android14源代码可参考&#xff1a;Search 在 Android 系统中&#xff0c;从设计的角度来看&#xff0c;窗口管理系统是基于 C/S 模式的。整个窗口系统分为服务端和客户端两大部分&#xff0c;客户端负责请求创建窗口和使用窗口&#xff0c;服务端完成窗口的维护…...

磁盘管理(初始化,引导块,坏块管理,固态硬盘)

目录 1.磁盘初始化2.引导块3.坏块的管理1.坏块检查2.坏块链表3.扇区备用 4.固态硬盘&#xff08;SSD&#xff09;1.原理2.组成3.读写性能特性4.与机械硬盘相比5.磨损均衡技术 1.磁盘初始化 ①进行低级格式化&#xff08;物理格式化&#xff09;&#xff0c;将磁盘的各个磁道划分…...

mysql冷拷贝大表

1、简述&#xff1a; mysql数据迁移有多种方式&#xff0c;最常见的就是先把数据库导出&#xff0c;然后导入新的数据库。拷贝数据目录data是另外一种方式。 尤其是当数据库启动不了&#xff0c;或者大型数据库迁移的时候&#xff0c;可以考虑这个方式。 2、场景&#xff1a…...

苍穹外卖-01

苍穹外卖-01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…...

GAMP源码阅读(中)伪距单点定位 SPP

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、SPP 解算1、spp()&#xff1a;单点定位主入口函数2、estpos()3、estpose_()4、valsol()&#xff1a;GDOP和卡方检验结果有效性 二、卫星位置钟…...

Epinoia-有状态网络的意图验证模块,略读

Epinoia relies on a unified model for NFs by leveraging the causal precedence relationshipsthat exist between NF packet I/Os and states. 这句话的意思是&#xff1a;“Epinoia依靠一种统一的网络功能&#xff08;NF&#xff09;模型&#xff0c;通过利用存在于 NF 包…...

14.力扣c++刷题-->有效括号

题目&#xff1a;给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合…...

scrapy-redis分布式爬虫(分布式爬虫简述+分布式爬虫实战)

一、分布式爬虫简述 &#xff08;一&#xff09;分布式爬虫优势 1.充分利用多台机器的带宽速度 2.充分利用多台机器的ip地址 &#xff08;二&#xff09;Redis数据库 1.Redis是一个高性能的nosql数据库 2.Redis的所有操作都是原子性的 3.Redis的数据类型都是基于基本数据…...

单目深度估计之图像重构原理解析

一、参考资料 浅析自监督深度估计中的光度损失(Photometric Loss) 二、图像重构原理 设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t 1 > <I_{t-1},I_{t},I_{t1}> <It−1​,It​,It1​>&#xff0c;其中 t t t 为时间索引&#xff0c;…...

【爬虫】charles手机抓包环境设置(设置系统证书)

1.说明 想要对手机抓包&#xff0c;最关键的是需要设置好根证书&#xff0c;用户证书在安卓7.0之后就不受信任了&#xff0c;想要对手机app抓包&#xff0c;就需要把用户证书设置为系统证书&#xff08;根证书&#xff09; 注意&#xff0c;想要设置为根证书&#xff0c;你的…...

【flink sql table api】时间属性的指定与使用注意事项

文章目录 一. 时间属性介绍二. Table api指定时间属性三. 处理时间的指定1. 在创建表的 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 四. 事件时间的指定1. 在 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 五. 小结…...

评价模型:CRITIC客观赋权法

目录 1.算法原理介绍2.算法步骤2.1 数据标准化2.2 计算信息承载量2.3 计算权重和得分 3.案例分析 1.算法原理介绍 CRITIC方法是一种客观权重赋权法&#xff0c;其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度&#xff0c;它表示同一指标各个评价方案取值差…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...