随笔 - 329  文章 - 0  评论 - 5  阅读 - 4985

创建一个deploy资源的yaml文件需要哪些内容

在 Kubernetes (K8s) 中,编写一个 Deployment 的 YAML 文件通常包括以下几个关键部分:

1. apiVersion

这是你希望使用的 Kubernetes API 版本。对于 Deployment,一般使用 apps/v1 版本。

apiVersion: apps/v1

2. kind

这指定了资源的类型,Deployment 类型是 Deployment

kind: Deployment

3. metadata

metadata 部分包含关于 Deployment 的元数据,例如名称、命名空间、标签等。常见的是设置 Deployment 的 namelabels

metadata:
  name: my-app-deployment
  labels:
    app: my-app

4. spec

spec 部分描述了 Deployment 的具体配置。主要包括以下几个子部分:

  • replicas:指定要创建的 Pod 副本数量。

  • selector:选择器用于确定哪些 Pods 属于这个 Deployment。通常使用标签来选择。

  • template:这是用来创建 Pod 的模板,包含了 Pod 的元数据和规范(如容器配置)。

spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image:latest
          ports:
            - containerPort: 80
  • replicas:这里指定创建 3 个副本的 Pod。

  • selector:选择器选择带有 app: my-app 标签的 Pods。

  • template:这个模板描述了 Pod 的配置,包含一个容器 my-app-container,使用镜像 my-app-image:latest,并暴露端口 80。

完整的 YAML 示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image:latest
          ports:
            - containerPort: 80

关键点总结:

  • apiVersion: 指定 API 版本(如 apps/v1)。
  • kind: 定义资源类型(如 Deployment)。
  • metadata: 包含资源的名称、标签等信息。
  • spec: 配置 Deployment 的详细信息,包括副本数、Pod 模板、选择器等。

这样定义的 Deployment 会创建一个包含三个副本的应用,每个副本都运行 my-app-image:latest 镜像并暴露端口 80。

apiVersion: apps/v1  # Kubernetes API版本,根据你的集群版本选择合适的API版本
kind: Deployment  # 资源类型为Deployment
 
metadata:
  name: my-deployment  # 部署的名称
  namespace: default   # 可选,部署所在的命名空间,默认为default
  labels:              # 可选,用于标识和管理部署的标签
    app: my-app
 
spec:
  replicas: 3           # 指定Pod副本的数量
  selector:             # 标签选择器,用于关联此Deployment与Pod模板
    matchLabels:
      app: my-app       # 确保selector匹配到具有相同app=my-app标签的Pod
 
  template:             # Pod模板定义了将要创建的Pod的具体内容
    metadata:
      labels:            # Pod的标签,必须与上面的选择器相匹配
        app: my-app
    spec:
      containers:         # 容器列表
      - name: my-container   # 容器名称
        image: nginx:1.21.0  # 使用的容器镜像
        ports:
        - containerPort: 80     # 容器暴露的端口
        resources:               # 可选,指定容器的资源请求和限制
          requests:
            cpu: 500m
            memory: 1Gi
          limits:
            cpu: 1
            memory: 2Gi
        livenessProbe:            # 可选,存活探针配置
          httpGet:
            path: /healthz
            port: 80
            initialDelaySeconds: 10
            periodSeconds: 10
        readinessProbe:           # 可选,就绪探针配置
          httpGet:
            path: /readyz
            port: 80
            initialDelaySeconds: 5
            periodSeconds: 5
 
  strategy:                   # 可选,滚动更新策略
    type: RollingUpdate       # 更新策略类型,RollingUpdate或Recreate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
 
  revisionHistoryLimit: 10    # 可选,保留的修订历史记录数
posted on   Leo-Yide  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示