[英]Get YAML for deployed Kubernetes services?
我正在嘗試將我的應用程序部署到在Google Container Engine中運行的Kube.netes 。
該應用程序位於: https://github.com/Industrial/docker-znc 。
Dockerfile內置於Google Container Registry上的映像中。
我已經通過 + 按鈕在Kube.netes中部署了該應用程序。 我沒有這個 YAML。
我在Kube.netes中為應用程序所需的 PEM 文件插入了一個Secret 。
獲取部署的 yaml(服務、pod、秘密等):
kubectl get deploy deploymentname -o yaml
如何通過填寫表單獲取 Kubernetes 創建的 Deployment、Service 和 Pod 的 YAML?
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
在 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
另一個用戶“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
最后一個腳本不包括服務帳戶。
從 kubernetes 下載 yaml 的語法
kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]
從正在運行的 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
現在--export
已被棄用,要以“原始”格式從資源中獲取輸出(剛剛清理,沒有關於當前對象狀態的任何信息(在這種情況下是不必要的元數據)),您可以使用yq
v4.x
執行以下操作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 文檔。 有關更多信息,請參閱https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets 。
我用過這個,效果很好。
使用此命令獲取服務的 yaml 格式
kubectl get service servicename -n <namespace> -o yaml
你也可以把它放在某個文件中
kubectl get service servicename -n <namespace> -o yaml > service.yaml
也可以使用view-last-applied命令,例如
kubectl apply view-last-applied services --all > services.yaml
這將返回用於創建服務的所有清單。 您也可以通過 services/resource-name 標簽指定某個 k8 資源。
如果您有讀取權限,我們可以通過命令行從 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<\/code> -
https:\/\/github.com\/iaysk\/kubectl-neat<\/a>來實現。
它刪除了時間戳元數據等。
kubectl get pod mypod -o yaml | kubectl neat
kubectl get pod mypod -oyaml | kubectl neat -o json
要為 kube.netes 上當前正在運行的部署獲取 YAML,您可以運行以下命令。
kubectl get deployment <deployment_name> -o yaml
要為部署生成 YAML,您可以運行命令式命令。
kubectl create deployment <deployment_name>--image=<image_name> -o yaml
要生成和導出部署,您可以運行命令式命令。
kubectl create deployment <deployment_name>--image=<image_name> --dry-run=client -o yaml > example.yaml
kubectl -n <namespace> get <resource type> <resource Name> -o yaml
使用上面的命令,Kubernetes 中定義的任何資源都可以以YAML
格式導出。
如果您需要查看和編輯文件,請使用:
kubectl edit service servicename
您可以使用此命令獲取資源的 yaml 文件
kubectl -n <namespace> get <resource type> <resource Name> -o yaml
要將秘密放入您的 Pod,
使用這樣的東西
env
- valueFrom
secretKeyRef:
name: secret_name
key: key_name
或者
envFrom
- secretRef:
name: secret_name
與@Janos Lenart 的回答只有細微差別!
kubectl get deploy deploymentname -o yaml > outputFile.yaml
就可以了
我正在嘗試將我的應用程序部署到在Google Container Engine中運行的Kubernetes 。
該應用程序可以在以下網址找到: https : //github.com/Industrial/docker-znc 。
Dockerfile內置在Google Container Registry的映像中。
我已經通過+按鈕在Kubernetes中部署了該應用程序。 我沒有這個的YAML。
我已在Kubernetes中為應用程序所需的PEM文件插入了一個Secret 。
以下代碼將一次提取所有 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
您可以嘗試使用kube-dump bash 腳本
使用此實用程序,您可以將 Kubernetes 集群資源保存為純 yaml 清單,而無需不必要的元數據。
您可以使用以下命令存儲已部署的 kubernetes 服務的輸出 -
kubectl 獲取 svc -n -o yaml > svc-output.yaml
對於部署 -
對於 Pod -
您可以使用以下命令獲取您的秘密詳細信息 -
kubectl get secret -n -o yaml 為了使用以下命令更新您的部署文件 -
kubectl edit deploy -n 在你的 pod 模板下添加 -
這將在 pod 容器部分下將秘密卷安裝到容器
- 這將進入部署中的 pod 模板部分
我們可以使用以下命令獲取已部署資源的 yaml。
kubectl get <resource name> -o yaml
OR
kubectl get <resource name> <name of pod> -o yaml
例子:-
kubectl get deploy Nginx -o yaml
上面的命令會給你 yaml output。
如果您想將 output 存儲到任何文件中,您可以使用以下命令。
kubectl get pod nginx -o yaml > Nginx-pod.yaml
上面的命令會將您的 output 重定向到您當前目錄中的 Nginx-pod.yaml。
所有服務
kubectl get service --all-namespaces -o yaml > all-service.yaml
所有部署
kubectl get deploy --all-namespaces -o yaml > all-deployment.yaml
我知道回答這個問題太老了,但希望有人會發現它有幫助。
我們可以嘗試以下命令從所有命名空間中獲取一種導出 -
kubectl get <kind> --all-namespaces --export -o yaml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.