【K8S系列】Kubernetes 资源对象的 YAML 文件示例及其详细介绍

在这里插入图片描述

在 Kubernetes 中,YAML 文件用于定义各种资源对象的配置,包括 Pods、Deployments、Services 等。以下是一些常见 Kubernetes 资源对象的 YAML 文件示例及其详细介绍。

一、Pod

Pod 是 Kubernetes 中最基本的部署单位,通常包含一个或多个容器。

示例 YAML

apiVersion: v1
kind: Pod
metadata:name: my-podlabels:app: my-app
spec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

解释

  • apiVersion: 定义资源的 API 版本。
  • kind: 资源类型,这里是 Pod。
  • metadata: 包含资源的元数据,如名称和标签。
  • spec: 资源的具体规格。
    • containers: 定义 Pod 中的容器列表。
      • name: 容器的名称。
      • image: 使用的容器镜像。
      • ports: 容器暴露的端口。

二、Deployment

Deployment 是用于管理 Pod 的高层抽象,支持版本控制和自动化更新。

示例 YAML

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80

解释

  • apiVersion: 这里是 apps/v1,表明使用的 API 版本。
  • kind: 资源类型,这里是 Deployment。
  • metadata: 资源的名称。
  • spec: 资源的具体规格。
    • replicas: Pod 的副本数量。
    • selector: 用于选择管理的 Pod。
    • template: Pod 的模板,定义了 Pod 的元数据和规范。

三、Service

Service 用于定义 Pod 的访问策略,提供负载均衡。

示例 YAML

apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 80

解释

  • apiVersion: 资源的 API 版本。
  • kind: 资源类型,这里是 Service。
  • metadata: 资源名称。
  • spec: 资源的具体规格。
    • type: Service 的类型(如 ClusterIP、NodePort、LoadBalancer)。
    • selector: 用于选择与 Service 关联的 Pod。
    • ports: 定义服务的端口映射。
      • protocol: 使用的协议。
      • port: Service 的端口。
      • targetPort: Pod 的端口。

四、ConfigMap

ConfigMap 用于存储非机密的配置信息。

示例 YAML

apiVersion: v1
kind: ConfigMap
metadata:name: my-config
data:DATABASE_URL: "mysql://user:password@hostname:3306/dbname"APP_MODE: "production"

解释

  • apiVersion: 资源的 API 版本。
  • kind: 资源类型,这里是 ConfigMap。
  • metadata: 资源名称。
  • data: 存储的键值对数据。

五、Secret

Secret 用于存储敏感信息,如密码和令牌。

示例 YAML

apiVersion: v1
kind: Secret
metadata:name: my-secret
type: Opaque
data:password: cGFzc3dvcmQ=  # base64 编码的密码

解释

  • apiVersion: 资源的 API 版本。
  • kind: 资源类型,这里是 Secret。
  • metadata: 资源名称。
  • type: Secret 的类型,Opaque 是默认值。
  • data: 存储的键值对数据,值需要进行 base64 编码。

六、Ingress

Ingress 管理外部 HTTP/S 访问到服务。

示例 YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingress
spec:rules:- host: my-app.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80

解释

  • apiVersion: 使用的 API 版本。
  • kind: 资源类型,这里是 Ingress。
  • metadata: 资源名称。
  • spec: 资源的具体规格。
    • rules: 定义访问规则。
      • host: 访问的域名。
      • http: HTTP 路由规则。
        • paths: 路由路径和后端服务的映射。

七、综合示例

1. ConfigMap

首先,我们定义一个 ConfigMap 来存储应用的配置信息。

apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:DATABASE_URL: "mysql://user:password@hostname:3306/dbname"APP_MODE: "production"

2. Secret

然后,我们定义一个 Secret 来存储敏感信息,如数据库密码。

apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:password: cGFzc3dvcmQ=  # base64 编码的密码

3. Deployment

接下来,定义一个 Deployment 来管理应用的 Pod,使用 ConfigMap 和 Secret。

apiVersion: apps/v1
kind: Deployment
metadata:name: my-applabels:app: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-app-containerimage: my-app-image:latestports:- containerPort: 8080env:- name: DATABASE_URLvalueFrom:configMapKeyRef:name: app-configkey: DATABASE_URL- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: password

4. Service

定义一个 Service,以便其他 Pod 和外部访问可以通过稳定的 IP 和 DNS 名称访问应用。

apiVersion: v1
kind: Service
metadata:name: my-app-service
spec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 8080

5. Ingress

最后,定义一个 Ingress,以便将外部 HTTP 请求路由到 Service。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-app-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: my-app.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-app-serviceport:number: 80

解释

ConfigMap

  • ConfigMap 用于存储应用的配置信息。这里定义了数据库连接字符串和应用模式。

Secret

  • Secret 用于存储敏感信息。密码以 base64 编码的形式存储,以提供安全性。

Deployment

  • Deployment 定义了应用的 Pods。设置了副本数量为 3,以确保高可用性。
  • 使用 env 字段引用 ConfigMap 和 Secret 中的值。
    • DATABASE_URL 从 ConfigMap 中获取。
    • DB_PASSWORD 从 Secret 中获取。

Service

  • Service 将 Pods 暴露为一个网络服务,以便其他 Pods 或外部客户端可以通过服务名称访问应用。
  • Service 类型为 ClusterIP,表示只在集群内部可访问。

Ingress

  • Ingress 负责管理外部 HTTP/S 流量的路由。
  • 使用 rules 定义了基于主机名的路由规则。
  • 通过注解配置 NGINX Ingress 控制器的重写目标。

组合部署

将所有这些资源组合在一起后,您可以使用以下命令一次性创建它们(假设您将它们保存为 k8s-setup.yaml 文件):

kubectl apply -f k8s-setup.yaml

当然可以!在 Kubernetes 中,您可以通过在 Deployment 中添加 livenessProbereadinessProbe 来实现健康检查。此外,Kubernetes 默认会在 Pod 失败时自动重启容器,这是一种基本的自我修复机制。

八、 健康检查和自动重启机制完整 YAML 示例

以下是包含健康检查和自动重启机制的完整 YAML 示例:

apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:DATABASE_URL: "mysql://user:password@hostname:3306/dbname"APP_MODE: "production"
---
apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:password: cGFzc3dvcmQ=  # base64 编码的密码
---
apiVersion: apps/v1
kind: Deployment
metadata:name: my-applabels:app: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-app-containerimage: my-app-image:latestports:- containerPort: 8080env:- name: DATABASE_URLvalueFrom:configMapKeyRef:name: app-configkey: DATABASE_URL- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-secretkey: password# 添加健康检查livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 30periodSeconds: 10readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 15periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:name: my-app-service
spec:type: ClusterIPselector:app: my-appports:- protocol: TCPport: 80targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-app-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: my-app.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-app-serviceport:number: 80

解释

1. Liveness Probe
  • livenessProbe:用于检查容器是否仍在运行。如果健康检查失败,Kubernetes 会自动重启该容器。
    • httpGet:使用 HTTP GET 请求检查容器的 /health 路径。
    • initialDelaySeconds:在容器启动后等待 30 秒后开始执行检查。
    • periodSeconds:每 10 秒执行一次健康检查。
2. Readiness Probe
  • readinessProbe:用于检查容器是否准备好接收流量。如果检查失败,Kubernetes 将不向该 Pod 发送流量。
    • httpGet:使用 HTTP GET 请求检查容器的 /ready 路径。
    • initialDelaySeconds:在容器启动后等待 15 秒后开始执行检查。
    • periodSeconds:每 5 秒执行一次准备检查。

自动重启机制

Kubernetes 默认会在容器状态为 CrashLoopBackOff 或其他失败状态时自动重启容器,因此不需要额外配置。

通过添加 liveness 和 readiness probes,可以增强应用在 Kubernetes 中的可靠性,确保只有健康的 Pod 接收流量,并在出现问题时自动重启容器。这使得应用在生产环境中更具韧性和稳定性。

总结

Kubernetes 的 YAML 文件用于定义和配置集群中的各种资源对象。了解这些资源及其配置方式是有效管理 Kubernetes 集群的基础。通过这些示例,可以创建和管理 Pods、Deployments、Services、ConfigMaps、Secrets 和 Ingress 等资源,以便构建和维护应用。

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

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

相关文章

MVP模式的理解和实践

MVP(Model-View-Presenter)模式是一种用于组织代码的架构模式,主要用于用户界面的开发。它通过将应用程序的三个主要组件分开,提高了应用的可维护性和可测试性。本文将详细介绍MVP模式的理解和实践,并通过Java语言提供…

微信小程序中 crypto-js 加解密全攻略

一、引言 在微信小程序开发中,数据的安全至关重要。加解密技术在保护用户数据和应用程序的安全性方面起着关键作用。小程序在与服务器进行数据交互时,面临着数据泄露、篡改等安全风险。为了确保用户信息的安全,选择合适的加解密算法变得尤为…

Mac mini m4本地跑大模型(ollama + llama + ComfyUI + Stable Diffusion | flux)

change log 2024-12-11 10:28(推荐重新观看) 针对绘画大模型的使用做进一步的详细操作(flux1dev) 见篇节(绘画大模型) 2024-12-10 更新了基础的chat大模型和绘画大模型的基础环境搭建。 安装chat大模型&am…

jenkins harbor安装

Harbor是一个企业级Docker镜像仓库‌。 文章目录 1. 什么是Docker私有仓库2. Docker有哪些私有仓库3. Harbor简介4. Harbor安装 1. 什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Dock…

Flutter 内嵌 unity3d for android

前言: 最近刚整完 unity3d hybridCLR 更新代码和资源,我们 趁热打铁 将 Unity3D 嵌入 Flutter 应用中。实现在 Flutter 使用 Unity3D, 可以做 小游戏 大游戏; 之前都是 内嵌 Webview 来实现的。虽然 CocosCreator 做出来的效果也不错&#xf…

移远EC200A-CN的OPENCPU使用GO开发嵌入式程序TBOX

演示地址: http://134.175.123.194:8811 admin admin 演示视频: https://www.bilibili.com/video/BV196q2YQEDP 主要功能 WatchDog 1. 守护进程 2. OTA远程升级 TBOX 1. 数据采集、数据可视化、数据上报(内置Modbus TCP/RTU/ASCII,GPS协…

健康管理系统(Koa+Vue3)

系统界面(源码末尾获取) 系统技术 Vue3 Koa Nodejs Html Css Js ....... 系统介绍 系统比较简单,轻轻松松面对结业课堂作业.采用的是基于nodejs开发的Koa框架作为后端,采用Vue框架作为前端,完成快速开发和界面展示. 系统获取 啊啊啊宝/KoaVue3https://gitee.com/ah-ah-b…

KALI安装操作及过程

以下是在计算机上安装 Kali Linux 的详细教程:(通常我直接使用虚拟机) 解压虚拟机安装包,直接在虚拟机中打开KALI (将内存改为4GB) 初始密码账号:kali 一、准备工作 下载 Kali Linux 镜像文件…

【Python小课堂】第 1 课 Windows下的Python基础

第 1 课 Windows下的Python基础 By Yichen Li 2024/12/14 一、内容简介 开宗明义第一节,介绍在Windows下初识Python这门神奇且强大的编程语言,以及最简单的代码编写。 二、Windows11系统 默认读者对Windows11系统有基本的了解。 1、呼出系统命令行方法…

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…

java使用itext生成复杂数据的pdf

上一篇文章是 java使用itext生成pdf标签 使用了 Adobe Acrobat 软件 设置域 本篇文章不使用其他工具,纯代码手写 pdf表格 首先,什么是Itext Apache iText 是一个开源 Java 库,支持 PDF 文档的开发和转换。 在本教程中,我们将学…

回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测 模型设计 基于BiLSTM-Adaboost的回归预测模型结合了双向长短期记忆神经网络(BiLSTM)和Adaboost集成学习的…

MATLAB生成.exe独立程序过程(常见问题解决方法)(2024.12.14)

本文只记录我执行过程中遇到的关键问题、以及解决方法,不讲诉整个流程。 电脑环境 win11系统 matlab 2024b 版本 整体流程 1.下载matlab运行时库,简写为MCR 2.配置MCR环境 3.打包程序 4.目标机器安装程序 一、下载MCR 下载这个折腾了大半天,大概问题就是…

python 调Qt C++ 写法配置和坑点

python 示例写法 和调c动态库一样 通过回调函数方式 将python函数注册到c 动态库中 from ctypes import *def DllCall(nParam, nFlag):print(nParam, nFlag)z2 0.6z3 0.4z4 0.0z5 0.3z6 0.5z7 0.8z8 0.3z9 0.9strData str(z2) str(z3) str(z4) str(z5)…

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中,私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性,从多个维度为私域流量运营提供了强有力的支持与推动,以下将详细阐述其在各个方面的…

Hadoop学习笔记(包括hadoop3.4.0集群安装)(黑马)

Hadoop学习笔记 0-前置章节-环境准备 0.1 环境介绍 配置环境:hadoop-3.4.0,jdk-8u171-linux-x64 0.2 VMware准备Linux虚拟机 0.2.1主机名、IP、SSH免密登录 1.配置固定IP地址(root权限) 开启master,修改主机名为…

鸿蒙NEXT开发案例:九宫格随机

【引言】 在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景。通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性。本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示实现细节。 【环境准…

redis集群安装部署 redis三主三从集群

redis集群安装部署 redis三主三从集群 1、下载redis2、安装redis集群 三主三从3、配置redis开机自启动3.1、建立启动脚本3.2、复制多份redis启动脚本给集群使用3.3、添加可执行权限3.4、配置开机自启动 1、下载redis 本次redis安装部署选择当前最新的稳定版本7.4.1 下载链接: …

链表的回文结构

链表的回文结构。OJ链接 import java.util.*;/* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }*/ public class PalindromeList {public boolean chkPalindrome(ListNode head) {// write code hereListNode slowhead;ListNode …