Ind*_*ial 64 yaml docker kubernetes google-kubernetes-engine google-container-registry
我正在尝试将我的应用部署到运行在Google容器引擎中的Kubernetes.
该应用程序可以在以下网址找到:https://github.com/Industrial/docker-znc.
该Dockerfile内置的图像谷歌集装箱登记.
我已经通过+按钮在Kubernetes中部署了应用程序.我没有这个YAML.
我在Kubernetes中插入了一个Secret,用于应用程序所需的PEM文件.
Jan*_*art 110
获取部署的yaml(服务,pod,secret等):
kubectl get deploy deploymentname -o yaml --export
Run Code Online (Sandbox Code Playgroud)
the*_*per 14
在 kubernetes GitHub 问题页面讨论了同样的问题,用户“alahijani”制作了一个 bash 脚本,用于导出所有 yaml 并将它们写入单个文件和文件夹。
由于这个问题在谷歌上排名很好,而且我发现这个解决方案非常好,我在这里代表它。
将 yaml 导出到子文件夹的 Bash 脚本:
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
Run Code Online (Sandbox Code Playgroud)
另一个用户“acondrat”制作了一个不使用目录的脚本,这使得kubectl apply -f
以后制作起来很容易。
将 yaml 导出到当前文件夹的 Bash 脚本:
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
Run Code Online (Sandbox Code Playgroud)
最后一个脚本不包括服务帐户。
小智 13
从 kubernetes 下载 yaml 的语法
kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]
Run Code Online (Sandbox Code Playgroud)
从正在运行的 pod 创建 yaml 文件:
kubectl get po -n nginx nginx-deployment-755cfc7dcf-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 > latestDeployement.yaml
Che*_* A. 12
如果您需要“干净”导出,删除 Kubernetes 添加的注释,有一个开源项目可以通过管道传输https://github.com/itaysk/kubectl-neatkubectl get
的输出来实现此目的。
它删除时间戳元数据等。
kubectl get pod mypod -o yaml | kubectl neat
kubectl get pod mypod -oyaml | kubectl neat -o json
Run Code Online (Sandbox Code Playgroud)
小智 11
也可以使用view-last-applied命令,例如
kubectl apply view-last-applied services --all > services.yaml
Run Code Online (Sandbox Code Playgroud)
它将返回用于创建服务的所有清单。您还可以通过 services/resource-name 标签指定某个 k8 资源。
所有服务
kubectl get service --all-namespaces -o yaml > all-service.yaml
Run Code Online (Sandbox Code Playgroud)
所有部署
kubectl get deploy --all-namespaces -o yaml > all-deployment.yaml
Run Code Online (Sandbox Code Playgroud)
小智 8
要获取 kubernetes 上当前正在运行的部署的 YAML,您可以运行以下命令:
kubectl get deployment <deployment_name> -o yaml
Run Code Online (Sandbox Code Playgroud)
要生成用于部署的 YAML,您可以运行命令式命令。
kubectl create deployment <deployment_name>--image=<image_name> -o yaml
Run Code Online (Sandbox Code Playgroud)
要生成和导出部署,您可以运行命令式命令。
kubectl create deployment <deployment_name>--image=<image_name> --dry-run=client -o yaml > example.yaml
Run Code Online (Sandbox Code Playgroud)
使用此命令获取服务的 yaml 格式
kubectl get service servicename -n <namespace> -o yaml
您也可以将其放入某个文件中
kubectl get service servicename -n <namespace> -o yaml > service.yaml
小智 7
以下代码将立即提取所有 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
Run Code Online (Sandbox Code Playgroud)
现在--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)' -
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用以下命令存储已部署的 kubernetes 服务的输出 -
kubectl get svc -n -o yaml > svc-output.yaml
对于部署 -
kubectl get deploy <deployment-name> -n <your-namespace> -o yaml > deploy-output.yaml
Run Code Online (Sandbox Code Playgroud)
对于 Pod -
kubectl get pod <pod-name> -n <your-namespace> -o yaml > pod-output.yaml
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令获取您的秘密详细信息 -
kubectl get Secret -n -o yaml 为了使用以下命令更新您的部署文件 -
kubectl edit deploy -n 在您的 pod 模板下添加以下内容 -
这将进入 pod 容器部分以将秘密卷安装到容器
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
Run Code Online (Sandbox Code Playgroud)
这将进入部署中的 pod 模板部分
volumes:
- name: foo
secret:
secretName: mysecret
Run Code Online (Sandbox Code Playgroud)
小智 5
关于秘密的第二个问题,来自 k8s 文档。有关更多信息,请参阅https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets 。
我已经用过这个并且效果很好。
如何通过填写表格获取Kubernetes创建的Deployment,Service和Pod的YAML?
kubectl get deployment,service,pod yourapp -o yaml --export
Run Code Online (Sandbox Code Playgroud)
回答@Sinaesthetic问题:
任何想法如何为整个群集(所有部署)做到这一点?
kubectl get deploy --all-namespaces -o yaml --export
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是导出不包括名称空间。因此,如果您想同时导出许多资源,建议您针对每个命名空间执行此操作:
kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml
Run Code Online (Sandbox Code Playgroud)
不幸的是,kubernetes 仍然不支持 true get all命令,因此您需要手动列出要导出的资源类型。您可以使用以下方法获取资源类型列表
kubectl api-resources
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39624 次 |
最近记录: |