如何在单个YAML文件中编写Deployment、Ingress及Service等资源配置
将多种K8s资源整合到单个YAML文件的方法
直接用---作为分隔符,把每个Kubernetes资源的配置块分开即可,kubectl执行apply命令时会自动识别并处理文件里的所有资源。
完整示例文件
下面是包含ClusterIssuer、Deployment、Service、Ingress和Certificate的整合YAML示例:
# ClusterIssuer 配置 apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: your-email@example.com privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx --- # Deployment 配置 apiVersion: apps/v1 kind: Deployment metadata: name: my-app 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: nginx:alpine ports: - containerPort: 80 --- # Service 配置 apiVersion: v1 kind: Service metadata: name: my-app-service spec: selector: app: my-app ports: - port: 80 targetPort: 80 type: ClusterIP --- # Ingress 配置 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-app-ingress annotations: cert-manager.io/cluster-issuer: letsencrypt-prod spec: tls: - hosts: - example.com secretName: my-app-tls rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-app-service port: number: 80 --- # Certificate 配置(可选,若Ingress未自动触发证书申请) apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: my-app-tls spec: secretName: my-app-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer commonName: example.com dnsNames: - example.com
关键注意事项
- 资源格式正确性:每个资源块必须包含
apiVersion、kind、metadata和spec这几个核心字段,不同资源的apiVersion不同(比如Deployment用apps/v1,Ingress用networking.k8s.io/v1),要对应正确。 - 依赖处理:像Certificate依赖ClusterIssuer/Issuer,kubectl apply时会自动重试等待依赖资源就绪,无需手动调整顺序;如果遇到依赖报错,可稍后再执行一次
kubectl apply -f your-file.yaml。 - 执行命令:直接运行
kubectl apply -f your-file.yaml即可,若要查看详细执行日志,可添加-v=4参数。
内容的提问来源于stack exchange,提问作者Cristianan Fadilah
相关产品推荐
相关产品推荐

