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


116

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

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

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

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

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

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

답변:


163

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

kubectl get deploy deploymentname -o yaml --export

3
전체 클러스터 (모든 배포)에 대해 수행하는 방법에 대한 아이디어가 있습니까? 물론 똑같은 서비스로 미러 환경을 만드는 것이 아이디어입니다.
Sinaesthetic

1
@Sinaesthetic, List 내보내기는 지금까지 지원되지 않으며 곧 제공되지 않을 것 같습니다. 모든 자원을 나열하는 스크립트가 필요할 것입니다. 그런 다음 목록을 작성하기 위해 해당 자원을 순환합니다. github.com/kubernetes/kubernetes/issues/…
mababin

23
Kubernetes 1.14부터는 --export더 이상 사용되지 않습니다. 여기를 참조 하십시오 . 현재 객체 상태에 대한 정보와 객체를 (재) 구성하는 데 필요한 선언적 구성이 포함되어 있지만 get -o yaml없이 사용할 수 있습니다 --export.
Josh Kelley

또 예를 들어, "-o YAML"에 의해 생성 된 YAML에서 약간의 현재 상태를 제거해야 spec.clusterIP하고 metadata.resourceVersion서비스한다.
토니 리

18

양식을 작성하여 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

2
kubectl get $(kubectl api-resources | awk '{print $1}' | tail -n +2 | tr '\n' ',' | sed s/,\$//) -o yaml > manifest.yaml
mkingston

10

동일한 문제가 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

마지막 스크립트는 서비스 계정을 포함하지 않습니다.


6

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

4

비밀에 관한 두 번째 질문에 대해서는 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 아래의 파일 이름이됩니다.

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


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

4

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

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

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

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


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

위의 명령을 사용하면 Kubernetes에 정의 된 모든 리소스를 YAML형식 으로 내보낼 수 있습니다 .


0

파일을보고 편집해야하는 경우 다음을 사용하십시오.

kubectl edit service servicename


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

 

0

대답하기에는 너무 오래되었다는 것을 알고 있지만 누군가가 도움이되기를 바랍니다.

아래 명령을 사용하여 모든 네임 스페이스에서 종류 내보내기를 가져올 수 있습니다.

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

0

@Janos Lenart의 답변과 약간의 차이가 있습니다!

kubectl get deploy deploymentname -o yaml > outputFile.yaml 할 것이다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.