Google Container Engine 에서 실행중인 Kubernetes에 내 앱을 배포하려고합니다 .
앱은 https://github.com/Industrial/docker-znc 에서 찾을 수 있습니다 .
Dockerfile는 에 이미지에 내장 된 구글 컨테이너 레지스트리 .
+ 버튼을 통해 Kubernetes에 앱을 배포했습니다 . 나는 이것에 대한 YAML이 없습니다.
앱에 필요한 PEM 파일에 대해 Kubernetes 에 Secret 을 삽입했습니다 .
- 양식을 작성하여 Kubernetes에서 생성 한 Deployment , Service 및 Pod에 대한 YAML을 얻으려면 어떻게해야 합니까?
- 사용을 위해 내 포드 에 비밀 을 가져 오려면 어떻게해야 합니까?
답변
배포를위한 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 파일을 만듭니다.
kubectl get po -n nginx nginx-deployment-755cfc7dcf-5s7j8 -o yaml > podDetail.yaml
실행중인 포드에서 복제 세트 yaml 파일을 만듭니다.
kubectl get rs -n nginx -o yaml > latestReplicaSet.yaml
실행중인 포드에서 배포 yaml 파일을 만듭니다.
kubectl get deploy -n nginx -o yaml > latestDeployement.yaml
답변
비밀에 관한 두 번째 질문에 대해서는 k8s 문서에서 가져온 것입니다. 자세한 내용은 https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets 를 참조 하십시오 .
- 비밀을 만들거나 기존 비밀을 사용합니다. 여러 포드가 동일한 암호를 참조 할 수 있습니다.
- spec.volumes [] 아래에 볼륨을 추가하도록 포드 정의를 수정합니다. 볼륨의 이름을 지정하고 비밀 개체의 이름과 동일한 spec.volumes []. secret.secretName 필드를 갖습니다.
- 비밀이 필요한 각 컨테이너에 spec.containers []. volumeMounts []를 추가하십시오. 비밀을 표시 할 미사용 디렉토리 이름에 spec.containers []. volumeMounts []. readOnly = true 및 spec.containers []. volumeMounts []. mountPath를 지정하십시오.
- 프로그램이 해당 디렉토리에서 파일을 찾도록 이미지 및 / 또는 명령 줄을 수정합니다. 비밀 데이터 맵의 각 키는 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