我试图将我的应用程序部署到运行在谷歌容器中的Kubernetes 引擎。

该应用程序可以在https://github.com/Industrial/docker-znc上找到。

Dockerfile内置于谷歌容器注册表上的映像中。

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

我已经在Kubernetes中插入了一个Secret,用于应用程序所需的PEM文件。

如何获得由创建的部署、服务和Pod的YAML Kubernetes通过填写表格? 我如何把秘密进入我的豆荚使用?


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

kubectl get deploy deploymentname -o yaml

关于秘密的第二个问题,这来自k8s的文档。更多信息请参见https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets。

Create a secret or use an existing one. Multiple pods can reference the same secret. Modify your Pod definition to add a volume under spec.volumes[]. Name the volume anything, and have a spec.volumes[].secret.secretName field equal to the name of the secret object. Add a spec.containers[].volumeMounts[] to each container that needs the secret. Specify spec.containers[].volumeMounts[].readOnly = true and spec.containers[].volumeMounts[].mountPath to an unused directory name where you would like the secrets to appear. Modify your image and/or command line so that the program looks for files in that directory. Each key in the secret data map becomes the filename under mountPath.

我用过这个,它工作得很好。


如何获得由创建的部署、服务和Pod的YAML Kubernetes通过填写表格?

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

回答@Sinaesthetic的问题:

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

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

此方法的问题是导出不包括名称空间。因此,如果你想同时导出许多资源,我建议逐个命名空间执行:

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

不幸的是,kubernetes仍然不支持真正的get all命令,因此您需要手动列出想要导出的资源类型。可以获得资源类型的列表

kubectl api-resources

如上所述,“——export”是获取与kubeernetes对象对应的清单的一个选项 但是"——export"被认为是有bug的,有人建议弃用它 目前更好的选择是执行"-o yaml"或"-o json"并删除不必要的字段 主要的区别是“——export”被期望删除集群特定的设置(例如k8s服务的集群服务IP)。但在这方面,它被发现是不一致的


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

Kubectl get service servicename -n <namespace> -o yaml . sh

你也可以把它放在某个文件里

Kubectl get service servicename -n <namespace> -o yaml > service.yaml


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

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


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

kubectl编辑服务


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

由于这个问题在谷歌上排名很好,而且我发现这个解决方案非常好,所以我在这里表示它。

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应用-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

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


从kubernetes下载yaml的语法

kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]

从运行的pod创建yaml文件:

kubectl得到po -n nginx nginxdeploymentt55cfc7dcf -5s7j8 -o yaml > podDetail.yaml

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

kubectl get rs -n nginx -o yaml > latestReplicaSet.yaml

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

kubectl get deploy -n nginx -o yaml > latestdeployment .yaml


可以通过该命令获取资源的yaml文件 kubectl -n <命名空间> get <资源类型> <资源名称> -o yaml . > . kubectl -n <命名空间> get <资源类型> <资源名称> 为了把秘密带到你的舱里,

使用这样的方法

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

or

envFrom
- secretRef:
    name: secret_name

 

我知道这个问题太老了,无法回答,但希望有人会觉得它有帮助。

我们可以尝试下面的命令从所有命名空间-中获取一个kind导出

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

和@Janos Lenart的回答只有微小的区别!

kubectl get deploy deploymentname -o yaml > outputFile。Yaml就行


现在——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)' -

下面的代码将一次性提取所有K8s定义,并将它们放在当前文件夹下面的单独文件夹中。

for OBJ in $(kubectl api-resources --verbs=list --namespaced -o name)
do
   for DEF in $(kubectl get --show-kind --ignore-not-found $OBJ -o name)
   do
      mkdir -p $(dirname $DEF)
      kubectl get $DEF -o yaml \
      | yq eval 'del(.metadata.resourceVersion, .metadata.uid, .metadata.annotations, .metadata.creationTimestamp, .metadata.selfLink, .metadata.managedFields)' - > $DEF.yaml 
   done
done

也可以使用view-last-applied命令。

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

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


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

使用这个实用工具,您可以将Kubernetes集群资源保存为纯yaml清单,无需不必要的元数据。

GitHub库 回顾博客页面中的实用程序


如果您有读访问权限,我们可以通过命令行从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

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

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

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

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

享受它。


如果你需要“干净”的导出,删除Kubernetes添加的注释,有一个开源项目可以通过连接kubectl get - https://github.com/itaysk/kubectl-neat的输出来做到这一点。

它删除时间戳元数据,等等。

kubectl get pod mypod -o yaml | kubectl neat

kubectl get pod mypod -oyaml | kubectl neat -o json

可以使用以下命令-存储已部署kubernetes服务的输出 Kubectl get SVC -n -o yaml > SVC -output.yaml

对于部署-

kubectl get deploy <deployment-name> -n <your-namespace> -o yaml > deploy-output.yaml

豆荚

kubectl get pod <pod-name> -n <your-namespace> -o yaml > pod-output.yaml

您可以使用以下命令-获取您的秘密详细信息 Kubectl得到秘密-n -o yaml 要使用更新部署文件,请使用以下命令- Kubectl编辑部署-n 在你的pod模板下添加以下-

这将在吊舱容器部分下,将秘密体积挂载到容器 volumeMounts: -名称:foo mountPath:“/ etc / foo” 只读的:真 这将在部署时进入pod模板部分 卷: -名称:foo 秘密: secretName: mysecret


我们可以使用下面的命令获取已部署资源的yaml。

kubectl get <resource name> -o yaml

                OR
kubectl get <resource name> <name of pod> -o yaml

例子:-

  kubectl get deploy Nginx -o yaml

以上命令将为您提供yaml输出。

如果您想将输出存储到任何文件中,可以使用以下命令。

kubectl get pod nginx -o yaml > Nginx-pod.yaml

上面的命令会将输出重定向到Nginx-pod。Yaml在您的当前目录。


所有的服务

kubectl get service --all-namespaces -o yaml  > all-service.yaml

所有部署

kubectl get deploy --all-namespaces -o yaml  > all-deployment.yaml

要获取kubernetes上当前运行部署的YAML,可以运行这个命令:

kubectl get deployment <deployment_name> -o yaml

要生成YAML用于部署,可以运行命令式命令。

kubectl create deployment <deployment_name>--image=<image_name> -o yaml

要生成并导出部署,可以运行imperative命令。

 kubectl create deployment <deployment_name>--image=<image_name> --dry-run=client -o yaml > example.yaml