Dapatkan YAML untuk layanan Kubernetes yang di-deploy?

116

Saya mencoba menerapkan aplikasi saya ke Kubernetes yang berjalan di Google Container Engine .

Aplikasi ini dapat ditemukan di: https://github.com/Industrial/docker-znc .

The Dockerfile dibangun ke sebuah gambar pada Google Kontainer Registry .

Saya telah menerapkan aplikasi di Kubernetes melalui tombol +. Saya tidak memiliki YAML untuk ini.

Saya telah memasukkan Rahasia di Kubernetes untuk file PEM yang dibutuhkan oleh aplikasi.

  1. Bagaimana cara mendapatkan YAML untuk Deployment , Service , dan Pod yang dibuat oleh Kubernetes dengan mengisi formulir?
  2. Bagaimana cara memasukkan Rahasia ke dalam Pod saya untuk digunakan?
Industri
sumber

Jawaban:

163

Untuk mendapatkan yaml untuk penerapan (layanan, pod, rahasia, dll):

kubectl get deploy deploymentname -o yaml --export
Janos Lenart
sumber
3
tahu bagaimana melakukannya untuk cluster penuh (semua penerapan)? Idenya adalah, tentu saja, untuk menciptakan lingkungan cermin dengan layanan yang sama persis.
Sinaesthetic
1
@Sinaesthetic, Sejauh ini ekspor daftar tidak didukung dan sepertinya tidak akan segera hadir. Anda mungkin memerlukan skrip untuk mencantumkan semua sumber daya kemudian menggilir sumber daya tersebut untuk membuat daftar Anda. github.com/kubernetes/kubernetes/issues/…
mababin
23
Sejak Kubernetes 1.14, --exportsudah tidak digunakan lagi; lihat disini . Anda dapat menggunakan get -o yamltanpa --export, meskipun itu termasuk informasi tentang status objek saat ini, serta konfigurasi deklaratif yang diperlukan untuk mengkonfigurasi (ulang) objek.
Josh Kelley
Masih perlu menghapus beberapa status saat ini dari yaml yang dihasilkan oleh "-o yaml", misalnya, spec.clusterIPdan metadata.resourceVersiondalam layanan.
Tony Lee
18

Bagaimana cara mendapatkan YAML untuk Deployment, Service, dan Pod yang dibuat oleh Kubernetes dengan mengisi formulir?

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

Menjawab pertanyaan @Sinaesthetic:

tahu bagaimana melakukannya untuk cluster penuh (semua penerapan)?

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

Masalah dengan metode ini adalah ekspor tidak menyertakan namespace. Jadi jika Anda ingin mengekspor banyak sumber daya secara bersamaan, saya sarankan melakukannya per namespace:

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

Sayangnya kubernetes masih belum mendukung perintah true get all , jadi Anda perlu membuat daftar secara manual jenis sumber daya yang ingin Anda ekspor. Anda bisa mendapatkan daftar jenis sumber daya dengan

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

Masalah yang sama dibahas di kubernetes GitHub issues page dan pengguna "alahijani" membuat skrip bash yang mengekspor semua yaml dan menuliskannya ke satu file dan folder.

Karena pertanyaan ini mendapat peringkat bagus di Google dan karena saya menemukan solusi itu sangat bagus, saya mewakilinya di sini.

Skrip Bash mengekspor yaml ke sub-folder:

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

User lain "acondrat" membuat script yang tidak menggunakan direktori, yang memudahkan pembuatannya kubectl apply -fnanti.

Skrip Bash mengekspor yaml ke folder saat ini:

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

Skrip terakhir tidak termasuk akun layanan.

thephper
sumber
6

Sintaks untuk mengunduh yaml dari kubernetes

kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]

Buat file yaml dari pod yang sedang berjalan:

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

Buat file replicaset yaml dari menjalankan pod:

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

Buat penerapan file yaml dari pod yang sedang berjalan:

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

untuk pertanyaan ke-2 tentang rahasianya, ini dari dokumentasi k8s. lihat https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets untuk info lebih lanjut.

  1. Buat rahasia atau gunakan yang sudah ada. Beberapa pod dapat mereferensikan rahasia yang sama.
  2. Ubah definisi Pod Anda untuk menambahkan volume di bawah spec.volumes []. Beri nama volume apa saja, dan berikan kolom spec.volumes []. Secret.secretName yang sama dengan nama objek rahasia.
  3. Tambahkan spec.containers []. VolumeMounts [] ke setiap container yang membutuhkan rahasia. Tentukan spec.containers []. VolumeMounts []. ReadOnly = true dan spec.containers []. VolumeMounts []. MountPath ke nama direktori yang tidak digunakan di mana Anda ingin rahasianya muncul.
  4. Ubah gambar dan / atau baris perintah Anda sehingga program mencari file di direktori itu. Setiap kunci dalam peta data rahasia menjadi nama file di bawah mountPath.

Saya telah menggunakan ini dan berfungsi dengan baik.

JamStar
sumber
4
  • Seperti disebutkan di atas "--export" adalah salah satu opsi untuk mendapatkan manifes yang sesuai dengan objek kubeernetes
  • Tapi "--export" dianggap buggy dan ada proposal untuk menghentikannya
  • Saat ini opsi yang lebih baik adalah melakukan "-o yaml" atau "-o json" dan menghapus bidang yang tidak perlu
  • Perbedaan utamanya adalah "--export" diharapkan untuk menghapus pengaturan spesifik cluster (misalnya IP layanan cluster dari layanan k8s). Tetapi ternyata tidak konsisten dalam hal ini
pr-sobat
sumber
4

Gunakan perintah ini untuk mendapatkan format yaml dari layanan Anda

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

Anda juga dapat memasukkannya ke dalam beberapa file

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

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

Dengan perintah di atas, sumber daya apa pun yang ditentukan di Kubernetes dapat diekspor dalam YAMLformat.

nimit garg
sumber
0

Jika Anda perlu melihat dan mengedit file, gunakan:

kubectl edit service servicename

Ken M
sumber
0
  1. Anda bisa mendapatkan file yaml dari sumber daya menggunakan perintah ini

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

  2. Untuk memasukkan rahasia ke dalam pod Anda,

gunakan sesuatu seperti ini

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

atau

envFrom
- secretRef:
    name: secret_name

 
Ankur Kothari
sumber
0

Saya tahu ini terlalu tua untuk dijawab, tetapi mudah-mudahan, seseorang akan merasa terbantu.

Kita dapat mencoba perintah di bawah ini untuk mengambil jenis ekspor dari semua namespace -

kubectl get <kind> --all-namespaces --export -o yaml
Vivek Raveendran
sumber
0

Hanya perbedaan kecil dari jawaban @Janos Lenart!

kubectl get deploy deploymentname -o yaml > outputFile.yaml akan melakukan

Arun
sumber