欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【K8S系列】Kubernetes 资源对象的 YAML 文件示例及其详细介绍

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

2025/2/26 13:17:14 来源:https://blog.csdn.net/weixin_36755535/article/details/144377814  浏览:    关键词:【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 等资源,以便构建和维护应用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词