为部署的Kubernetes服务获取YAML?

时间:2017-05-12 15:47:56

标签: docker yaml kubernetes google-kubernetes-engine google-container-registry

我正在尝试将我的应用部署到 Google容器中运行的 Kubernetes 发动机

该应用可在以下位置找到:https://github.com/Industrial/docker-znc

Dockerfile 内置于 Google容器注册表上的图片中。

我已经通过+按钮在 Kubernetes 中部署了应用程序。我没有YAML 对此。

我已在 Kubernetes 中为应用程序所需的PEM文件插入 Secret

  1. 如何获取由此创建的部署服务 Pod 的YAML  Kubernetes填写表格?
  2. 如何将秘密纳入我的 Pod 以供使用?

18 个答案:

答案 0 :(得分:84)

获取部署的yaml(服务,pod,secret等):

kubectl get deploy deploymentname -o yaml --export

答案 1 :(得分:4)

既然 --export 已被弃用,要以“原始”格式从您的资源中获取输出(刚刚清理,没有有关当前对象状态的任何信息(在这种情况下是不必要的元数据)),您可以执行以下操作以下使用 yq v4.x

kubectl get <resource> -n <namespace> <resource-name> -o yaml \
  | yq eval 'del(.metadata.resourceVersion, .metadata.uid, .metadata.annotations, .metadata.creationTimestamp, .metadata.selfLink, .metadata.managedFields)' -

答案 2 :(得分:4)

从kubernetes下载yaml的语法

kubectl get [资源类型] -n [名称空间] [资源名称] -o yaml> [新文件名]

从运行的pod中创建yaml文件:

  1. kubectl获取po -n nginx nginx-deployment-755cfc7dcf-5s7j8 -o yaml> podDetail.yaml

从运行的pod中创建副本集Yaml文件:

  1. kubectl get rs -n nginx -o yaml> LatestReplicaSet.yaml

从运行的pod中创建部署Yaml文件:

  1. kubectl获取部署-n nginx -o yaml> LatestDeployment.yaml

答案 3 :(得分:3)

关于秘密的第二个问题,这是来自k8s文档。有关详情,请参阅https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets

  1. 创建秘密或使用现有密码。多个pod可以引用相同的秘密。
  2. 修改您的Pod定义以在spec.volumes []下添加卷。将卷命名为any,并使spec.volumes [] .secret.secretName字段等于秘密对象的名称。
  3. 将spec.containers []。volumeMounts []添加到需要密码的每个容器中。将spec.containers []。volumeMounts [] .readOnly = true和spec.containers []。volumeMounts []。mountPath指定到您希望显示秘密的未使用目录名称。
  4. 修改图像和/或命令行,以便程序在该目录中查找文件。秘密数据映射中的每个密钥都成为mountPath下的文件名。
  5. 我已经使用过它并且工作正常。

答案 4 :(得分:2)

使用此命令获取服务的Yaml格式

kubectl get service servicename -o yaml

您也可以将其放入某些文件中

kubectl get service servicename -o yaml >service.yaml

答案 5 :(得分:1)

要获取所有 yaml 文件部署备份(不是特定部署):

kubectl get deployments -n <namespace> -o yaml > deployments.yaml

用于获取所有 yaml 文件服务备份(不是特定部署):

kubectl get services -n <namespace> -o yaml > services.yaml

享受吧。

答案 6 :(得分:1)

也可以使用 view-last-applied 命令,例如

kubectl apply view-last-applied services --all > services.yaml

将返回所有应用于创建服务的清单。您也可以通过 services/resource-name 标签指定某个 k8 资源。

答案 7 :(得分:1)

  

如何获取由以下人员创建的Deployment,Service和Pod的YAML:   通过填写表格来使用Kubernetes吗?

kubectl get deployment,service,pod yourapp -o yaml --export

回答@Sinaesthetic问题:

  

您知道如何针对整个群集(所有部署)执行此操作吗?

kubectl get deploy --all-namespaces -o yaml --export

此方法的问题是 export 不包含名称空间。因此,如果您想同时导出许多资源,建议您按名称空间进行操作:

kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml

不幸的是,kubernetes still doesn't support是真正的全部获取命令,因此您需要手动列出要导出的资源类型。您可以使用

获取资源类型列表
kubectl api-resources

答案 8 :(得分:0)

讨论了同一问题at kubernetes GitHub issues page,用户“ alahijani”制作了一个bash脚本,该脚本导出所有yaml并将它们写入单个文件和文件夹。

由于此问题在Google上排名很高,并且由于我发现该解决方案非常好,所以在这里代表它。

Bash脚本将Yaml导出到子文件夹:

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done

另一个用户“ acondrat”制作了一个不使用目录的脚本,这使得以后制作kubectl apply -f很容易。

Bash脚本将Yaml导出到当前文件夹:

for n in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob | grep -v 'secret/default-token')
do
    kubectl get -o=yaml --export $n > $(dirname $n)_$(basename $n).yaml
done

最后一个脚本不包括服务帐户。

答案 9 :(得分:0)

如果您需要查看和编辑文件,请使用:

COUNT(DISTINCT PRODUCT_TYPE)

答案 10 :(得分:0)

  1. 您可以使用此命令获取资源的yaml文件

    kubectl -n <namespace> get <resource type> <resource Name> -o yaml

  2. 要将秘密带入您的吊舱,

使用类似这样的东西

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

envFrom
- secretRef:
    name: secret_name

 

答案 11 :(得分:0)

我知道答案太老了,但希望有人会觉得有帮助。

我们可以尝试使用以下命令从所有命名空间中获取一种导出-

kubectl get <kind> --all-namespaces --export -o yaml

答案 12 :(得分:0)

与@Janos Lenart的答案只有微小的区别!

kubectl get deploy deploymentname -o yaml > outputFile.yaml

答案 13 :(得分:0)

kubectl -n <namespace> get <resource type> <resource Name> -o yaml 

使用上述命令,可以以YAML格式导出Kubernetes中定义的任何资源。

答案 14 :(得分:0)

以下代码将一次提取所有 K8s 定义并将它们放在当前文件夹下的各个文件夹中。

{{1}}

答案 15 :(得分:0)

  • 像上面提到的,“-export”是获取与kubeernetes对象相对应的清单的一种选择。
  • 但是“ --export”被认为是越野车,因此有建议弃用它。
  • 当前更好的选择是执行“ -o yaml”或“ -o json”并删除不必要的字段
  • 主要区别在于,预计“ --export”会删除群集的特定设置(例如,k8s服务的群集服务IP)。但这在这方面是不一致的

答案 16 :(得分:0)

您可以尝试使用 kube-dump bash 脚本

使用此实用程序,您可以将 Kubernetes 集群资源保存为纯 yaml 清单,而无需不必要的元数据。

enter image description here

答案 17 :(得分:0)

如果您有读取权限,我们可以通过命令行从 Kubernetes 集群中获取与任何种类相关的内容。

kubectl get <kind> <kindname> -n <namespace> -o <yaml or json>

例如,如果您想从命名空间导出部署,请遵循以下命令 -

kubectl get deploy mydeploy -n mynamespace -o yaml > mydeploy.yaml

kubectl get deploy mydeploy -n mynamespace -o json > mydeploy.json