Kubernetes 进阶实战:CRD、Gateway API 与优先级调度 - 实践

news/2025/9/27 12:02:51/文章来源:https://www.cnblogs.com/yxysuanfa/p/19114931

本文将深入探讨 Kubernetes 的三个高级特性:自定义资源定义(CRD)、新一代 Gateway API 和优先级调度(PriorityClass)。这些功能代表了 Kubernetes 的可扩展性和高级调度能力,是构建生产级云原生平台的关键技术。

一、CRD:扩展 Kubernetes API

自定义资源定义(CRD)允许用户扩展 Kubernetes API,定义自己的资源类型,从而将自定义应用逻辑集成到 Kubernetes 生态中。

1. 创建简单的 CRD

# cronjob-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: cronjobs.stable.example.com
spec:group: stable.example.comversions:- name: v1served: truestorage: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:cronSpec:type: stringimage:type: stringreplicas:type: integerscope: Namespacednames:plural: cronjobssingular: cronjobkind: CronJobshortNames:- cj

应用 CRD:

kubectl apply -f cronjob-crd.yaml

2. 创建自定义资源实例

# my-cronjob.yaml
apiVersion: "stable.example.com/v1"
kind: CronJob
metadata:name: my-custom-cronjob
spec:cronSpec: "* * * * *"image: my-app:latestreplicas: 3

扩展内容:CRD 与 Operator 模式

  1. 控制器集成:CRD 通常与自定义控制器配合使用,实现完整的 Operator 模式

  2. 验证规则:可以通过 OpenAPI v3 schema 定义资源验证规则

  3. 版本管理:支持多版本共存和版本转换

  4. 生态集成:成熟的 Operator 框架如 Kubebuilder、Operator SDK

二、Gateway API:新一代服务网络标准

Gateway API 是 Kubernetes 官方推出的新一代服务网络 API,旨在替代传统的 Ingress,提供更丰富、更面向角色的网络功能。

1. 创建 GatewayClass

# gateway-class.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:name: company-gateway-class
spec:controllerName: example.com/gateway-controllerparametersRef:name: company-gateway-parametersgroup: example.comkind: GatewayParameters

2. 创建 Gateway 和 HTTPRoute

# gateway-and-route.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:name: company-gateway
spec:gatewayClassName: company-gateway-classlisteners:- name: webport: 80protocol: HTTPallowedRoutes:namespaces:from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:name: http-app-route
spec:parentRefs:- name: company-gatewayrules:- matches:- path:type: PathPrefixvalue: /appbackendRefs:- name: app-serviceport: 8080- matches:- path:type: PathPrefixvalue: /apibackendRefs:- name: api-serviceport: 3000

扩展内容:Gateway API 优势

  1. 面向角色设计:清晰分离基础设施管理员、应用开发者的职责

  2. 跨命名空间路由:支持跨命名空间的流量管理

  3. 丰富的路由能力:支持基于 Header、查询参数等复杂路由规则

  4. 服务网格集成:为服务网格提供标准化的流量管理接口

三、PriorityClass:精细化 Pod 调度优先级

PriorityClass 允许为 Pod 设置优先级,影响调度器在资源紧张时的决策,确保关键业务优先获得资源。

1. 创建 PriorityClass

# priorityclasses.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: "用于关键业务 Pod"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: medium-priority
value: 500000
globalDefault: true
description: "默认优先级"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: low-priority
value: 100000
globalDefault: false
description: "用于批处理任务"

2. 在 Pod 中使用 PriorityClass

# high-priority-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: critical-app
spec:containers:- name: appimage: critical-app:latestresources:requests:memory: "256Mi"cpu: "500m"limits:memory: "512Mi"cpu: "1000m"priorityClassName: high-priority

扩展内容:优先级调度实战策略

  1. 系统优先级保留:Kubernetes 系统组件使用 2000000000 及以上优先级

  2. 抢占机制:高优先级 Pod 可以抢占低优先级 Pod 的资源

  3. 资源配额关联:结合 ResourceQuota 确保优先级策略有效执行

  4. 多租户场景:为不同业务部门分配不同优先级类别

实战案例:构建完整应用栈

完整部署示例

# complete-stack.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: production-priority
value: 1000000
---
apiVersion: apps/v1
kind: Deployment
metadata:name: web-app
spec:replicas: 3selector:matchLabels:app: web-apptemplate:metadata:labels:app: web-appspec:priorityClassName: production-prioritycontainers:- name: webimage: nginx:latestports:- containerPort: 80
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:name: web-app-route
spec:parentRefs:- name: company-gatewayrules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: web-appport: 80

总结

这三个高级特性代表了 Kubernetes 平台的不同维度的扩展能力:

  1. CRD:提供了 API 层面的扩展能力,让 Kubernetes 能够管理任意类型的资源

  2. Gateway API:重新定义了服务网络的标准,提供更强大、更规范的流量管理能力

  3. PriorityClass:实现了调度层面的精细化控制,确保关键业务的服务质量

掌握这些特性,意味着您不仅能够使用 Kubernetes,更能够根据业务需求定制和优化 Kubernetes 平台。这些技能对于构建企业级云原生平台、实现真正的 GitOps 和自动化运维至关重要。

在实际应用中,建议将这些特性与 CI/CD 流程、监控告警、安全策略等结合,构建完整的云原生技术体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识MYSQL —— 数据库基础 - 指南

初识MYSQL —— 数据库基础 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

多态下,构造函数和析构函数的顺序,以及父类、子类的转换

1 #include <iostream>2 #include <cstdio>3 #include <cstdlib>4 #include <cstring>5 using namespace std;6 7 #define ll long long8 9 const int maxn=1e5+10;10 11 class A {12 public:…

US$49 B48 amp; MSV90 ISN Reading via OBD Authorization for Yanhua Mini ACDP

Software License for YANHUA ACDP B48 Integrated Interface BoardWhen you buy Yanhua DME B48 Integrated Interface Board (SK247-F3), you will need to purchase this software license as well.No need shippin…

泰安微网站建设凡客诚品线下店

From: http://blog.csdn.net/wangfeng2500/article/details/7650062 在TCP层&#xff0c;有个FLAGS字段&#xff0c;这个字段有以下几个标识&#xff1a;SYN, FIN, ACK, PSH, RST, URG. 其中&#xff0c;对于我们日常的分析有用的就是前面的五个字段。 它们的含义是&#x…

在CodeBolcks下wxSmith的C++编程教程——使用 wxGrid

0.前言 欢迎来到 wxSmith 教程页面!wxSmith 与 Code::Blocks、wxWidgets 和 C++ 编译器相结合,为您提供一种所见即所得的方式来创建具有图形用户界面 (GUI) 的应用程序。该组合形成了一个用于快速应用程序开发 (R…

题解:P12479 [集训队互测 2024] 长野原龙势流星群

题目: 唉不是,这个 trick 我见过啊 QAQ! 我们想一下特殊点,发现最大的点肯定选自己,然后又会发现他的父亲也必选他,所以每次找最大的点和他父亲合并成新点即可。 合并了贪心选点的过程。 #include<bits/stdc+…

详细介绍:Docker(一)—— Docker入门到精通:从基础概念到容器管理

详细介绍:Docker(一)—— Docker入门到精通:从基础概念到容器管理2025-09-27 11:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

linux下nginx

sudo apt install nginx sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx配置文件 MacOS (Homebrew 安装): /usr/local/etc/nginx/nginx.conf Linux: /etc/nginx/nginx.conf Debian/Ubuntu 系…

青岛网站制作辰星辰凤岗本地网站

隐藏方法&#xff1a;1、打开apache的http.conf配置文件&#xff0c;开启mod_rewrite.so模块&#xff1b;2、AllowOverride None项中将None改为All&#xff1b;3、修改“.htaccess”的配置内容&#xff0c;将原代码替换为官方手册提供的代码。thinkphp现在的php主流框架之一&am…

网站建设结构总结网站建站和维护

需求&#xff1a; 上传文件&#xff0c;但是后端接口不支持多文件上传&#xff0c;但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了在上传的时候还需要有停止上传的按钮 进程&#xff1a; async await 只能做到第一步&#xff0c;但是无法在上传中的时候关…

OI 笑传 #12

Megaakuaiiro这次是 ABC424 423 的 DEF。 ABC424D 朴素状压即可。 codeShow me the code #define psb push_back #define mkp make_pair #define ls p<<1 #define rs (p<<1)+1 #define rep(i,a,b) for( in…

spatial芯片设计语言 学习笔记

Spatial 芯片设计语言是斯坦福 PPL 研究组在特定领域(高级硬件/加速器设计)的研究成果和实践平台。 斯坦福 PPL 是斯坦福计算机科学系下的一个研究实验室,全称是 Pervasive Parallelism Laboratory 普及并行实验室。…

非诚勿扰 —— 大龄单身男,找人生合伙人,有意者邮件联系

非诚勿扰 —— 大龄单身男,找人生合伙人,有意者邮件联系89年辽宁人,单身,目前在八达岭长城脚下工厂务工,无车无房无存款,工作也不算太稳定。为人执拗,真诚,社会经验及阅历极少,赚钱能力极差,诚招人生合伙人(…

soul 这款APP太差劲了,天天都有婚介加我,怎么个事情,还能不能好好的解决解决个人问题了

soul 这款APP太差劲了,天天都有婚介加我,怎么个事情,还能不能好好的解决解决个人问题了本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这…

【C++】23. C++11(上) - 教程

【C++】23. C++11(上) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

kali2025搭建ARL灯塔系统

ARL灯塔详细安装教程ARL灯塔详细安装教程 安装配置docker apt-get update apt install docker.io apt install docker-compose如果出现以下报错请再运行一遍,或者更换镜像源然后还需要配置国内的docker加速,可以网上…

局域网内的网站建设优化营商环境工作开展情况汇报

安装selenium 打开命令控制符输入&#xff1a;pip install -U selenium 火狐浏览器安装firebug&#xff1a;www.firebug.com&#xff0c;调试所有网站语言&#xff0c;调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件&#xff0c;实现简单的浏览器操 作的录制与回…

单片机 -- USART总线 - 实践

单片机 -- USART总线 - 实践2025-09-27 11:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

实用指南:AI 术语通俗词典:LLM(大语言模型)

实用指南:AI 术语通俗词典:LLM(大语言模型)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

平面电商网站建设东莞企业营销型网站策划

一&#xff0e;代码规范和建议 避免Update LateUpdate等函数内频繁的GC Alloc&#xff0c;避免在Update和LateUpdate内有以下操作&#xff1a; 调用GetComponet() 调用FindObjectsOfType() 使用GameObject.Tag和GameObject.Name 等等其他有堆内存分配的操作 避免频繁调用T…