首页 > 解决方案 > 从 Helm 获取功能性 yaml 文件

问题描述

有没有办法在构建它们之后从 helm 拦截 yaml 文件,但在创建对象之前?

我现在正在做的是创建对象然后让它们通过:

for file in $(kubectl get OBJECT -n maesh -oname); do kubectl get $i -n maesh --export -oyaml > $file.yaml; done

这工作正常。我只需要事先创建对象目录,但可以工作。我只是想知道是否有一种干净的方法可以做到这一点。

而且,顺便说一句,原因是因为traefik(maesh)的服务网格还在纸尿裤中,安装它的唯一方法是通过helm。他们的仓库中还没有这些文件。

标签: kubernetes-helm

解决方案


你可以做

helm template .

这将输出类似

---
# Source: my-app/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: release-name-my-app
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"

  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: my-app
    app.kubernetes.io/instance: release-name

---
# Source: my-app/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
  name: "release-name-my-app-test-connection"
  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
  annotations:
    "helm.sh/hook": test-success
spec:
  containers:
    - name: wget
      image: busybox
      command: ['wget']
      args:  ['release-name-my-app:80']
  restartPolicy: Never

---
# Source: my-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name-my-app
  labels:
    app.kubernetes.io/name: my-app
    helm.sh/chart: my-app-0.1.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.0"
    app.kubernetes.io/managed-by: Tiller
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: my-app
      app.kubernetes.io/instance: release-name
  template:
    metadata:
      labels:
        app.kubernetes.io/name: my-app
        app.kubernetes.io/instance: release-name
    spec:
      containers:
        - name: my-app
          image: "nginx:stable"
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
            {}


---
# Source: my-app/templates/ingress.yaml

那是带有 k8s 对象的有效文件。


推荐阅读