[docker] 배포 된 Kubernetes 서비스 용 YAML을 받으시겠습니까?

Google Container Engine 에서 실행중인 Kubernetes에 내 앱을 배포하려고합니다 .

앱은 https://github.com/Industrial/docker-znc 에서 찾을 수 있습니다 .

Dockerfile는 에 이미지에 내장 된 구글 컨테이너 레지스트리 .

+ 버튼을 통해 Kubernetes에 앱을 배포했습니다 . 나는 이것에 대한 YAML이 없습니다.

앱에 필요한 PEM 파일에 대해 KubernetesSecret 을 삽입했습니다 .

  1. 양식을 작성하여 Kubernetes에서 생성 한 Deployment , ServicePod에 대한 YAML을 얻으려면 어떻게해야 합니까?
  2. 사용을 위해 내 포드비밀 을 가져 오려면 어떻게해야 합니까?



답변

배포를위한 yaml을 가져 오려면 (서비스, 포드, 시크릿 등) :

kubectl get deploy deploymentname -o yaml --export


답변

양식을 작성하여 Kubernetes에서 생성 한 배포, 서비스 및 포드에 대한 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”는 모든 yaml을 내보내고 단일 파일 및 폴더에 쓰는 bash 스크립트를 작성했습니다.

이 질문은 Google에서 순위가 ​​높고 그 솔루션이 매우 좋다는 것을 알았으므로 여기에서 대표합니다.

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]

실행중인 포드에서 yaml 파일을 만듭니다.

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

실행중인 포드에서 복제 세트 yaml 파일을 만듭니다.

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

실행중인 포드에서 배포 yaml 파일을 만듭니다.

  1. kubectl get deploy -n nginx -o yaml > latestDeployement.yaml


답변

비밀에 관한 두 번째 질문에 대해서는 k8s 문서에서 가져온 것입니다. 자세한 내용은 https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets 를 참조 하십시오 .

  1. 비밀을 만들거나 기존 비밀을 사용합니다. 여러 포드가 동일한 암호를 참조 할 수 있습니다.
  2. spec.volumes [] 아래에 볼륨을 추가하도록 포드 정의를 수정합니다. 볼륨의 이름을 지정하고 비밀 개체의 이름과 동일한 spec.volumes []. secret.secretName 필드를 갖습니다.
  3. 비밀이 필요한 각 컨테이너에 spec.containers []. volumeMounts []를 추가하십시오. 비밀을 표시 할 미사용 디렉토리 이름에 spec.containers []. volumeMounts []. readOnly = true 및 spec.containers []. volumeMounts []. mountPath를 지정하십시오.
  4. 프로그램이 해당 디렉토리에서 파일을 찾도록 이미지 및 / 또는 명령 줄을 수정합니다. 비밀 데이터 맵의 각 키는 mountPath 아래의 파일 이름이됩니다.

나는 이것을 사용했고 잘 작동합니다.


답변

  • 위에서 언급했듯이 “–export”는 kubeernetes 객체에 해당하는 매니페스트를 가져 오는 하나의 옵션입니다.
  • 그러나 “–export”는 버그가있는 것으로 간주되며이를 사용하지 않는 제안이 있습니다.
  • 현재 더 나은 옵션은 “-o yaml”또는 “-o json”을 수행하고 불필요한 필드를 제거하는 것입니다.
  • 주요 차이점은 “–export”가 클러스터 특정 설정 (예 : k8s 서비스의 클러스터 서비스 IP)을 제거 할 것으로 예상된다는 것입니다. 그러나 이와 관련하여 일관성이없는 것으로 밝혀졌습니다.


답변

이 명령을 사용하여 서비스의 yaml 형식을 가져옵니다.

kubectl get service servicename -n <namespace> -o yaml

일부 파일에 넣을 수도 있습니다.

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