Dağıtılmış Kubernetes hizmetleri için YAML alınsın mı?


105

Uygulamamı Google Container Engine'de çalışan Kubernetes'e dağıtmaya çalışıyorum .

Uygulama şu adreste bulunabilir: https://github.com/Industrial/docker-znc .

Dockerfile üzerinde bir görüntü yerleşik tarihinde Konteyner Sicil .

Uygulamayı + düğmesiyle Kubernetes'te konuşlandırdım . Bunun için YAML'ye sahip değilim.

Ben ekledikten Sırrı yılında Kubernetes Uygulama için gereken PEM dosyası için.

  1. Nasıl için YAML alabilirim Dağıtım , Servis ve Pod formu doldurarak Kubernetes ile yarattı?
  2. Sırrı kullanım için Pod'uma nasıl aktarabilirim ?

Yanıtlar:


155

Bir dağıtım için yaml'yi (hizmet, kapsül, gizli vb.) Almak için:

kubectl get deploy deploymentname -o yaml --export

3
tam küme için (tüm dağıtımlar) nasıl yapılacağı hakkında bir fikriniz var mı? Tabii ki fikir, aynı hizmetlerle ayna ortamları yaratmaktır.
Sinaesthetic

1
@Sinaesthetic, List ihracatı şu ana kadar desteklenmiyor ve yakında gelmeyecek gibi görünüyor. Muhtemelen tüm kaynakları listelemek için bir komut dosyasına ihtiyacınız olacak, ardından listenizi oluşturmak için bu kaynaklar arasında geçiş yapacaksınız. github.com/kubernetes/kubernetes/issues/…
mababin

18
Kubernetes 1.14 itibariyle --exportkullanımdan kaldırılmıştır; buraya bakın . Nesneyi (yeniden) yapılandırmak için gereken bildirime dayalı yapılandırmanın yanı sıra geçerli nesne durumu hakkında bilgi içermesine rağmen, get -o yamlolmadan kullanabilirsiniz --export.
Josh Kelley

Yine de, örneğin "-o yaml" tarafından oluşturulan spec.clusterIPve metadata.resourceVersionhizmette olan yaml'den bazı mevcut durumların kaldırılması gerekir .
Tony Lee

16

Kubernetes tarafından oluşturulan Dağıtım, Hizmet ve Kapsül için YAML'yi formu doldurarak nasıl edinebilirim?

kubectl get deployment,service,pod yourapp -o yaml --export

@Sinaesthetic sorusunun cevabı:

tam küme için (tüm dağıtımlar) nasıl yapılacağı hakkında bir fikriniz var mı?

kubectl get deploy --all-namespaces -o yaml --export

Bu yöntemle ilgili sorun, dışa aktarmanın ad alanını içermemesidir. Bu nedenle, aynı anda birçok kaynağı dışa aktarmak istiyorsanız, bunu ad alanına göre yapmanızı öneririm:

kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml

Maalesef kubernetes hala bir true all komutunu desteklemiyor, bu nedenle dışa aktarmak istediğiniz kaynak türlerini manuel olarak listelemeniz gerekiyor. Kaynak türlerinin bir listesini alabilirsiniz.

kubectl api-resources

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

9

Aynı konu kubernetes GitHub sorunları sayfasında tartışılıyor ve "alahijani" kullanıcısı tüm yaml'ı dışa aktaran ve bunları tek dosyalara ve klasörlere yazan bir bash betiği yaptı.

Bu soru Google'da iyi sıralandığından ve bu çözümü çok iyi bulduğum için burada temsil ediyorum.

Yaml'yi alt klasörlere aktaran Bash betiği:

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

Başka bir kullanıcı "acondrat", dizinleri kullanmayan bir betik yaptı, bu da kubectl apply -fdaha sonra yapılmasını kolaylaştırır .

Yaml'yi geçerli klasöre aktaran Bash betiği:

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

Son komut dosyası hizmet hesabını içermez.


5

Kubernetes'ten yaml'leri indirmek için sözdizimi

kubectl get [kaynak türü] -n [ad alanı] [kaynak adı] -o yaml> [Yeni dosya adı]

Çalışan bölmeden yaml dosyası oluşturun:

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

Çalışan bölmeden replikaset yaml dosyası oluşturun:

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

Çalışan bölmeden dağıtım yaml dosyası oluşturun:

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

4

sır ile ilgili 2. soru için, bu k8s dokümantasyonundan. Daha fazla bilgi için bkz. https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets .

  1. Bir sır oluşturun veya mevcut olanı kullanın. Birden çok bölme aynı sırrı referans alabilir.
  2. Spec.volumes [] altında bir birim eklemek için Kapsül tanımınızı değiştirin. Birime herhangi bir ad verin ve gizli nesnenin adına eşit bir spec.volumes []. Secret.secretName alanına sahip olun.
  3. Sıra ihtiyacı olan her kapsayıcıya bir spec.containers []. VolumeMounts [] ekleyin. Spec.containers []. VolumeMounts []. ReadOnly = true ve spec.containers []. VolumeMounts []. MountPath'i, gizli dizilerin görünmesini istediğiniz kullanılmayan bir dizin adına belirtin.
  4. Resminizi ve / veya komut satırını, programın o dizindeki dosyaları arayacağı şekilde değiştirin. Gizli veri haritasındaki her anahtar, mountPath altındaki dosya adı olur.

Bunu kullandım ve iyi çalışıyor.


4
  • Yukarıda bahsedildiği gibi "--export", kubeernetes nesnelerine karşılık gelen bildirimi almak için bir seçenektir.
  • Ancak "--export" hatalı olarak kabul edilir ve kullanımdan kaldırılması için bir öneri vardır
  • Şu anda daha iyi seçenek "-o yaml" veya "-o json" yapmak ve gereksiz alanları kaldırmaktır.
  • Temel fark, "--export" un kümeye özgü ayarları kaldırması beklenir (örneğin, bir k8s hizmetinin küme hizmeti IP'si). Ancak bu açıdan tutarsız olduğu görülmüştür.

3

Hizmetinizin yaml formatını almak için bu komutu kullanın

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

Ayrıca bir dosyaya da koyabilirsiniz

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


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

Yukarıdaki komutla Kubernetes'te tanımlanan herhangi bir kaynak YAMLformatta dışa aktarılabilir .


0

Dosyayı görüntülemeniz ve düzenlemeniz gerekiyorsa şunu kullanın:

kubectl edit service servicename


0
  1. Bu komutu kullanarak kaynakların yaml dosyalarını alabilirsiniz.

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

  2. Sırrı bölmenize almak için,

bunun gibi bir şey kullan

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

veya

envFrom
- secretRef:
    name: secret_name

 

0

Cevap veremeyecek kadar eski olduğunu biliyorum, ama umarım birisi bunu faydalı bulacaktır.

Tüm ad alanlarından bir tür dışa aktarım getirmek için aşağıdaki komutu deneyebiliriz -

kubectl get <kind> --all-namespaces --export -o yaml
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.