kubernetes 集群 YAML 文件详解
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,YAML 文件扮演着至关重要的角色,因为它们是用来定义资源对象(如 Pods、Deployments、Services 等)的配置文件。正确理解和编写 YAML 文件是掌握 Kubernetes 的关键一步。本文将深入探讨 Kubernetes 中常见的几种资源对象及其对应的 YAML 文件格式,并分享一些实用技巧和最佳实践。
什么是 Kubernetes YAML 文件?
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化标准,广泛应用于配置文件中。与 JSON 相比,YAML 更加简洁直观,易于书写和阅读。在 Kubernetes 中,YAML 文件用于描述集群中的各种资源对象,包括但不限于:
- Pods:最小且最简单的部署单元,可以包含一个或多个容器。
- Deployments:用于声明式地管理和更新应用程序实例。
- Services:为一组 Pod 提供稳定的网络访问入口。
- ConfigMaps 和 Secrets:用于存储配置数据和敏感信息。
- PersistentVolumes 和 PersistentVolumeClaims:用于持久化存储卷的管理和分配。
- Jobs 和 CronJobs:用于执行一次性任务或定时任务。
基础结构
一个典型的 Kubernetes YAML 文件通常包含以下部分:
apiVersion: <API版本>
kind: <资源类型>
metadata:name: <资源名称>namespace: <命名空间> # 可选labels: # 可选key1: value1
spec: # 具体资源配置...
status: # 当前状态,通常由系统自动填充,用户不需要手动设置
apiVersion
指定所使用的 API 版本。不同的 API 版本对应不同的功能特性,因此选择正确的 API 版本非常重要。例如,apps/v1
是最新版本的应用程序 API 组,适用于大多数场景;而 v1
则是核心 API 组,主要用于基本的 Kubernetes 资源。
kind
指明该 YAML 文件定义的是哪种类型的 Kubernetes 资源。常见的资源类型包括 Pod
、Deployment
、Service
等等。
metadata
提供关于资源的元数据信息,比如名称、标签(Labels)、注解(Annotations)等。其中,name
是必填项,用于唯一标识该资源;namespace
可以用来将资源分配到特定的命名空间内,默认情况下会使用 default
命名空间。
spec
这是 YAML 文件的核心部分,用来定义具体的资源配置。不同种类的资源会有不同的 spec
结构,下面我们将详细介绍几种常见的资源对象及其 YAML 文件示例。
status
此字段由 Kubernetes 系统自动生成并维护,反映了当前资源的状态。一般情况下,我们不需要在 YAML 文件中显式定义它。
常见资源对象及 YAML 示例
Pod
Pod 是 Kubernetes 中最基本的调度单元,它可以包含一个或多个共享网络和存储资源的容器。以下是创建一个简单 Nginx Pod 的 YAML 文件示例:
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
Deployment
Deployment 提供了对 Pod 和 ReplicaSet 的声明式更新能力,非常适合用于管理无状态应用的工作负载。下面是一个创建 Nginx Deployment 的 YAML 文件示例:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
在这个例子中,我们指定了三个副本(replicas: 3
),并通过 selector
字段确保这些副本能够匹配到带有 app: nginx
标签的 Pod。
Service
Service 定义了一组逻辑上相同的 Pod 的访问策略,提供了稳定的 IP 地址和 DNS 名称,使得外部流量能够顺利到达目标 Pod。这里展示如何为上面的 Nginx Deployment 创建一个 ClusterIP 类型的服务:
apiVersion: v1
kind: Service
metadata:name: nginx-servicelabels:app: nginx
spec:type: ClusterIPports:- port: 80targetPort: 80selector:app: nginx
ConfigMap 和 Secret
ConfigMap 和 Secret 分别用于保存非敏感性和敏感性的配置数据。通过将配置从镜像中分离出来,我们可以更方便地进行管理和更新。下面是如何创建一个包含环境变量的 ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:name: example-config
data:SPECIAL_LEVEL: verySPECIAL_TYPE: charm
以及如何创建一个 Secret 来存储数据库凭证:
apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:username: <base64-encoded-string>password: <base64-encoded-string>
请注意,在实际操作中,您需要先将字符串编码为 Base64 格式再放入 data
字段中。
PersistentVolume 和 PersistentVolumeClaim
为了实现持久化存储,我们需要定义 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)。PV 描述了集群中可用的存储资源,而 PVC 则表达了应用程序对于存储的需求。下面是一个 PV 和 PVC 的配对示例:
PersistentVolume (PV)
apiVersion: v1
kind: PersistentVolume
metadata:name: task-pv-volumelabels:type: local
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: "/mnt/data"
PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: task-pv-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 3Gi
在这个例子中,PVC 请求了一个容量为 3GiB 的存储卷,并且只能以读写的方式挂载到单个节点上。Kubernetes 将根据请求自动找到符合条件的 PV 并绑定给 PVC。
Job 和 CronJob
Job 用于执行一次性任务,CronJob 则允许我们按照预定的时间表定期运行任务。下面是如何创建一个简单的 Job 来打印“Hello, World!”:
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: Never
以及如何创建一个每分钟执行一次的 CronJob:
apiVersion: batch/v1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
最佳实践
当编写 Kubernetes YAML 文件时,请遵循以下几点建议:
- 保持一致:尽量使用统一的命名约定和标签体系,以便于管理和查找资源。
- 模块化设计:将复杂的配置拆分为多个较小的部分,每个部分负责一项特定的功能。这样不仅可以提高代码复用率,也有助于降低出错几率。
- 版本控制:利用 Git 等工具对 YAML 文件进行版本管理,记录每一次变更的历史记录。
- 测试先行:在正式环境中部署之前,先在一个隔离的测试环境中验证配置是否正确无误。
- 安全第一:妥善保管 Secret 中的信息,避免泄露敏感数据;同时注意权限设置,防止未授权的操作。
结语
感谢您的阅读!如果您对 Kubernetes 或者 YAML 文件有任何疑问或见解,欢迎继续探讨。
相关文章:
kubernetes 集群 YAML 文件详解
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,YAML 文件扮演着至关重要的角色,因为它们是用来定义资源对象(如 Pods、Deployments、Services 等)的配置文件。正确…...
【STM32G4xx的CAN驱动记录】
STM32G4xx的CAN驱动记录 CAN说明CAN的波特率计算数据测试总结 本文主要记录了基于STM32G4xx的CAN接口解析某型号雷达数据遇到的问题及规避方法,CAN总线波特率500Kbps,采样点要求80%附近。 注意CAN总线同步段的时间!!! …...
VSCode下EIDE插件开发STM32
VSCode下STM32开发环境搭建 本STM32教程使用vscode的EIDE插件的开发环境,完全免费,有管理代码文件的界面,不需要其它IDE。 视频教程见本人的 VSCodeEIDE开发STM32 安装EIDE插件 Embedded IDE 嵌入式IDE 这个插件可以帮我们管理代码文件&am…...
HTML之拜年/跨年APP(改进版)
目录: 一:目录 二:效果 三:页面分析/开发逻辑 1.页面详细分析: 2.开发逻辑: 四:完整代码(不多废话) index.html部分 app.json部分 二:效果 三:页面…...
解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
问题场景 安装Docker后,执行sudo service docker start启动Docker,提示启动成功 rootDev:~# sudo service docker start * Starting Docker: docker [ OK ]执行su…...
Chrome 132 版本新特性
Chrome 132 版本新特性 一、Chrome 132 版本浏览器更新 1. 在 iOS 上使用 Google Lens 搜索 在 Chrome 132 版本中,开始在所有平台上推出这一功能。 1.1. 更新版本: Chrome 126 在 ChromeOS、Linux、Mac、Windows 上:在 1% 的稳定版用户…...
《贪心算法:原理剖析与典型例题精解》
必刷的贪心算法典型例题! 算法竞赛(蓝桥杯)贪心算法1——数塔问题-CSDN博客 算法竞赛(蓝桥杯)贪心算法2——需要安排几位师傅加工零件-CSDN博客 算法(蓝桥杯)贪心算法3——二维数组排序与贪心算…...
CSS笔记基础篇02——浮动、标准流、定位、CSS精灵、字体图标
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p70https://www.bilibili.com/video/BV1kM4y127Li?vd_source…...
Golang Gin系列-6:Gin 高级路由及URL参数
在本章中,我们将深入研究使用Gin框架的高级路由和URL参数。我们将介绍如何创建和使用路由组、应用中间件、提取路径参数、处理查询字符串、处理静态文件以及使用HTML模板。 路由分组 为什么要使用路由组? 使用路由组有助于保持代码结构整洁有序。当路由…...
重温STM32之环境安装
缩写 CMSIS:common microcontroller software interface standard 1,keil mdk安装 链接 Keil Product Downloads 安装好后,开始安装平台软件支持包(keil 5后不在默认支持所有的平台软件开发包,需要自行下载&#…...
web应用引入cookie机制的用途和cookie技术主要包括的内容
web应用引入cookie机制,用于用户跟踪。 (1)HTTP响应报文中的Cookie头行:set-Cookie (2)用户浏览器在本地存储、维护和管理的Cookie文件 (3)HTTP请求报文中的Cookie头行:…...
Visual Studio Code + Stm32 (IAR)
记录一下, 以前看别人在 vsc 下配置 stm32 工程非常麻烦。 最近,突然发现, iar 官方出了两个插件, iar build 、 iar C-Spy 安装之后,配置一下 iar 软件路径。 然后,直接打开工程目录,编译…...
小程序获取微信运动步数
1、用户点击按钮,在小程序中触发getuserinfo方法,获取用户信息 <scroll-view class"scrollarea" scroll-y type"list"><view class"container"><button bind:tap"getLogin">获取</button&…...
嵌入式Linux驱动开发之platform
关键词:rk3399 嵌入式驱动 Linux platform 前言 前面的嵌入式Linux驱动都是描述从特定的SOC与特定设备之间的直接两两通信。而Linux不是为单一某一SOC结构而设计的操作系统,它可以运行在X86、ARM等多种架构多种SOC平台上,如果驱动程序按照S…...
【蓝桥杯】43693.日期问题
题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用…...
opengrok_windows_多工程的同步
多工程的目录 工程代码下载和log配置 工程代码下载 在每个工程的src目录下,下载工程代码,以下载pulseaudio的代码为例。 git clone gitgithub.com:pulseaudio/pulseaudio.git log配置文件 拷贝D:\opengrok\opengrok-…...
Redis的安装和使用--Windows系统
Redis下载地址: windows版本readis下载(GitHub): https://github.com/tporadowski/redis/releases (推荐使用) https://github.com/MicrosoftArchive/redis/releases 官网下载(无Windows版本…...
【odbc】odbc连接kerberos认证的 hive和spark thriftserver
hive odbc驱动,以下两种都可以 教程:使用 ODBC 和 PowerShell 查询 Apache HiveHive ODBC Connector 2.8.0 for Cloudera Enterprise spark thriftserver本质就是披着hiveserver的外壳的spark server 完成kerberos认证: (1)可以…...
亚博microros小车-原生ubuntu支持系列:1 键盘控制
背景:电脑配置不太行,我在ubuntu再运行vmware,里面运行亚博官方的虚拟机镜像ubuntu,系统很卡。基本上8G内存给打满了。还是想把亚博官方的代码迁移出来,之前售后就说除了官方镜像虚拟机,需要自己摸索迁移。…...
【Linux】利用‘shell脚本’快速查看服务的运行情况
一、脚本目的 为了方便查看服务的运行情况,特此写了一个shell脚本,这样就很方便获取,查看如nginx、mysql等服务的运行状态、监听端口状态、防火墙、端口开放状态等。 二、shell脚本源代码 #!/bin/bash SCRIPTPATH$(cd "$(dirname $0)…...
[2025分类时序异常检测指标R-AUC与VUS]
梳理了一下分类中常见的指标,这些指标与时序异常检测中新提出的A-RUC与VUS之间的关系 真正例(True Positive,TP): 被正确识别为正样本的数量。真负例(True Negative,TN): 被正确识别为负样本的数量。假正例(False Positive ,FP): 被错误识为正样本数量假负例(Fals…...
设计模式之结构型模式
在软件开发的世界里,设计模式是前辈们智慧的结晶,它们为我们提供了通用的解决方案来应对各种常见的软件设计问题。今天,我们深入探讨设计模式中的结构型模式,并用 Java 语言来实现它们。 什么是结构型模式 结构型模式主要关注如…...
Spring Boot中的404错误:原因、影响及处理策略
Spring Boot中的404错误:原因、影响及处理策略 在Web开发过程中,404错误是一个常见的HTTP状态码,表示“未找到”资源。在Spring Boot项目中,尽管它以其简化的配置和快速的开发速度著称,但开发者仍可能遇到404错误。本…...
网络协议如何确保数据的安全传输?
网络协议作为计算机网络通信的基石,其设计不仅旨在实现数据的有效传输,更在于确保数据在传输过程中的安全性。对于网络协议如何保障数据安全传输,是很多企业和网络IT部门的重点,本文将从多方面概述相关方法。 加密与解密机制 1. …...
Python绘制数据地图-MovingPandas
MovingPandas 是一个用于时空数据分析的 Python 库,它扩展了 Pandas 和 GeoPandas,使得处理和分析带有时间戳的地理数据变得更加方便。虽然 MovingPandas 本身不直接提供数据可视化功能,但你可以结合其他库如 matplotlib、folium 或 plotly 来…...
鸿蒙子组件根据数据,刷新item Ui的规范
鸿蒙 子组件列表中,有多个isSelect,父组件只用一个state类型的isSelect,就可以将它们关联起来,如下: isLike:item1.isPraise?!this.isLike:this.isLike, 子组件想要数据变化,UI随着更新,就得…...
使用 Flask 构建视频转 GIF 工具
使用 Flask 构建视频转 GIF 工具 在前几日的文章当中,我介绍了如何使用 Python 脚本将视频转化为 GIF 动画,为了更好、更方便的进行操作,在这篇博客中,我将介绍使用 Flask 框架创建一个简单的 Web 应用程序,该应用程序…...
基于SpringBoot+Vue的智慧动物园管理系统的设计与实现
获取源码:基于SpringBootVue智慧动物园系统设计与实现: 后台和用户前台。后台包括首页、员工管理、考勤管理、部门管理、角色管理、审核管理、动物管理、演出管理、园区管理、园区设施维修、饲养管理、行为观察管理、疫苗管理、看护管理、个人中心、票务管理、收入管…...
“深入浅出”系列之数通篇:(5)TCP的三次握手和四次挥手
TCP(传输控制协议)的三次握手和四次挥手是TCP连接建立和释放的过程。 一、TCP三次握手 TCP三次握手是为了建立可靠的连接,确保客户端和服务器之间的通信能力。具体过程如下: 第一次握手:客户端向服务器发送一个带有…...
【初阶数据结构】探索数据的多米诺链:单链表
文章目录 1.链表1.1 概念及结构1.2 分类 2.单链表接口实现2.1 单链表节点创建2.2 单链表打印2.3 单链表尾插2.4 单链表头插2.5 单链表尾删2.6 单链表头删2.7单链表查找2.8 单链表在pos位置插入x2.8.1 pos前2.8.2 pos后 2.9单链表在pos位置删除x2.9.1 pos前2.9.2 pos后 2.2.10 单…...
我的创作纪念日——我与CSDN一起走过的365天
目录 一、机缘:旅程的开始 二、收获:沿路的花朵 三、日常:不断前行中 四、成就:一点小确幸 五、憧憬:梦中的重点 一、机缘:旅程的开始 最开始开始写博客是在今年一二月份的时候,也就是上一…...
w-form-select 组件中 分析 自定义属性 和 el-select 自带属性 的对比表格
以下是该组件中 自定义属性 和 el-select 自带属性 的对比表格: 属性/功能自定义el-select 自带说明label✔️❌自定义属性,用于设置表单项的标签。prop✔️❌自定义属性,用于表单验证时的字段名。labelWidth✔️❌自定义属性,用…...
【蓝桥杯选拔赛真题63】C++奇数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
目录 C++奇数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 七、推荐资料 C++奇数 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 给定两个正整数N和M(10≤N<M≤10000),请找出N到M…...
Android 存储进化:分区存储
} 在写入存储之前,需要知道设备有多少空间可用,不够的话会抛出异常。不过现在的智能设备内存也是比较大的,这部分可以参考Google 查询可用空间 2.1 内部存储空间 打开Android studio的 Device File Explorer时,可以看到应用的内部…...
NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
问题描述与处理策略 1、问题描述 npm warn cli npm v10.9.2 does not support Node.js v18.16.1. This version of npm supports the following node versions: ^18.17.0 || >20.5.0. You can find the latest version at https://nodejs.org/.# 翻译 npm warn cli npm v1…...
docker离线安装及部署各类中间件(x86系统架构)
前言:此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本:docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面,这里放在…...
redis 分布式方案
文章目录 前言一、主从复制1、主从配置2、建立连接3、数据同步3.1、全量同步3.2、全量同步配置3.3、 增量同步3.4、 增量同步配置 二、redis sentinel1、主要功能2、sentinel配置3、高可用3.1、故障发现3.2、故障转移3.2.1、选举sentinel进行故障转移3.2.2、选举从节点升级成主…...
# [0114] Task01 《数学建模导论》P1 解析几何与方程模型
链接:https://www.datawhale.cn/activity/124 整理的相关代码库 GitHub 页面链接 绪论 姜启源:“数学建模就是建立数学模型解决实际问题” 本质还是解应用题,只是曾经的“小明买糖”变成了如今的“嫦娥探月”。 SEIR 模型,也…...
PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片
目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…...
【HarmonyOS NEXT】碰一碰开发分享
关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 U…...
pytest+playwright落地实战大纲
前言 很久没有更新博客,是因为在梳理制作Playwright测试框架实战相关的课程内容。现在课程已经完结,开个帖子介绍下这门课程(硬广, o(〃^▽^〃)o) 课程放在CSDN学习频道, 欢迎关注~ PyTestPl…...
HTML<center>标签
HTML5不支持。 <center>标签在HTML4中用于使文本居中对齐。 用什么来代替呢? 例子 居中对齐文本(使用 CSS): <html> <head> <style> h1 {text-align: center;} p {text-align: center;} div {text-a…...
【部署】将项目部署到云服务器
目录 1.获得服务器 2.连接到云服务器 3.配置环境 3.1.Java(运行后端所需) 3.2.MySQL数据库 3.3.Nginx(运行前端所需) 3.4. Node.js(构建前端所需) 4.打包项目 4.1.打包后端项目 4.2.打包前端项目…...
微软宣布Win11 24H2进入新阶段!设备将自动下载更新
快科技1月19日消息,微软于1月16日更新了支持文档,宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布,此前为可选升级,如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示:“运行Wi…...
傅里叶变换在语音识别中的关键作用
在语音识别中,傅里叶变换起着至关重要的作用,主要体现在以下几个方面: 一、时域到频域的转换 语音信号的特点 语音信号是一种时域信号,它随时间变化。例如,当我们说话时,声带的振动产生声波,这…...
面试-业务逻辑2
应用 给定2个数组a、b,若a[i] b[j],则记(i,j)为一个二元数组,求具体的二元数组及其个数。 实现 a input("请输入数组a的元素个数:") # print(a) a_list list(map(int, input("请输入数组a的元素,…...
【20】Word:小许-质量管理-论文❗
目录 题目 NO1.2.3.4.5 NO6.7 NO8 NO9 NO10.11 题目 NO1.2.3.4.5 另存为“Word.docx”文件在考生文件夹下,F12Fn是另存为的作用布局→页面设置对话框→纸张:大小A4→页边距:上下左右不连续ctrl选择除表格外的所有内容→开始→字体对…...
Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普,也可以说是一个各种模型对比的案例,但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文,其中一些常见的模式及它们存在的问题以及效果&#x…...
Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正
Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
PyTorch使用教程(11)-cuda的使用方法
1. 基本概念 CUDA(Compute Unified Device Architecture)是NVIDIA开发的一种并行计算平台和编程模型,专为图形处理器(GPU)设计,旨在加速科学计算、工程计算和机器学习等领域的高性能计算任务。CUDA允许开发…...