รับ YAML สำหรับบริการ Kubernetes ที่ทำให้ใช้งานได้ไหม


116

ฉันพยายามที่จะปรับใช้ app ของฉันที่จะKubernetesทำงานในGoogle คอนเทนเนอร์เครื่องยนต์

app ที่สามารถพบได้ที่: https://github.com/Industrial/docker-znc

Dockerfileสร้างเป็นภาพบนGoogle คอนเทนเนอร์ Registry

ฉันปรับใช้แอปในKubernetesผ่านปุ่ม + แล้ว ฉันไม่มี YAML สำหรับสิ่งนี้

ฉันได้ใส่ความลับในKubernetesสำหรับไฟล์ PEM ที่แอปต้องการ

  1. ฉันจะรับ YAML สำหรับการปรับใช้งานบริการและพ็อดที่ Kubernetes สร้างขึ้นได้อย่างไรโดยกรอกแบบฟอร์ม
  2. ฉันจะนำความลับเข้าสู่Podเพื่อใช้งานได้อย่างไร?

คำตอบ:


163

หากต้องการรับมันเทศสำหรับการปรับใช้ (บริการพ็อดความลับ ฯลฯ ):

kubectl get deploy deploymentname -o yaml --export

3
มีความคิดอย่างไรกับคลัสเตอร์แบบเต็ม (การปรับใช้ทั้งหมด) แน่นอนว่าแนวคิดนี้คือการสร้างสภาพแวดล้อมมิเรอร์ด้วยบริการเดียวกัน
Sinaesthetic

1
@Sinaesthetic การส่งออกรายการไม่ได้รับการสนับสนุนจนถึงขณะนี้และดูเหมือนว่าจะไม่เร็ว ๆ นี้ คุณอาจต้องใช้สคริปต์เพื่อแสดงรายการทรัพยากรทั้งหมดจากนั้นวนไปตามแหล่งข้อมูลเหล่านั้นเพื่อสร้างรายการของคุณ github.com/kubernetes/kubernetes/issues/…
mababin

23
ตั้งแต่ Kubernetes 1.14 --exportเลิกใช้งานแล้ว ดูที่นี่ . คุณสามารถใช้ได้get -o yamlโดยไม่ต้อง--exportแม้ว่าจะมีข้อมูลเกี่ยวกับสถานะของวัตถุในปัจจุบันรวมทั้งการกำหนดค่าแบบประกาศที่จำเป็นในการกำหนดค่าวัตถุอีกครั้ง
Josh Kelley

ยังคงต้องลบสถานะปัจจุบันบางส่วนออกจาก yaml ที่สร้างโดย "-o yaml" เช่นspec.clusterIPและmetadata.resourceVersionในการให้บริการ
Tony Lee

18

ฉันจะรับ YAML สำหรับ Deployment, Service และ Pod ที่ Kubernetes สร้างขึ้นได้อย่างไรโดยกรอกแบบฟอร์ม

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 ยังไม่รองรับคำสั่งtrue 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 ทั้งหมดและเขียนลงในไฟล์และโฟลเดอร์เดียว

เนื่องจากคำถามนี้อยู่ในอันดับที่ดีใน Google และเนื่องจากฉันพบว่าคำตอบนั้นดีมากฉันจึงนำเสนอที่นี่

Bash script ที่ส่งออก yaml ไปยังโฟลเดอร์ย่อย:

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ภายหลัง

Bash script ที่ส่งออก yaml ไปยังโฟลเดอร์ปัจจุบัน:

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

ไวยากรณ์สำหรับการดาวน์โหลด yaml จาก kubernetes

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

สร้างไฟล์ yaml จากการเรียกใช้ pod:

  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

สำหรับคำถามที่ 2 เกี่ยวกับความลับนี้มาจากเอกสาร k8s ดูhttps://kubernetes.io/docs/concepts/configuration/secret/#using-secretsสำหรับข้อมูลเพิ่มเติม

  1. สร้างความลับหรือใช้ข้อมูลที่มีอยู่ หลายพ็อดอ้างอิงความลับเดียวกันได้
  2. แก้ไขคำจำกัดความ Pod ของคุณเพื่อเพิ่มโวลุ่มภายใต้ spec.volumes [] ตั้งชื่อโวลุ่มอะไรก็ได้และมีฟิลด์ spec.volumes []. secret.secretName เท่ากับชื่อของวัตถุลับ
  3. เพิ่ม spec.containers []. volumeMounts [] ให้กับแต่ละคอนเทนเนอร์ที่ต้องการความลับ ระบุ spec.containers []. volumeMounts []. readOnly = true และ spec.containers []. volumeMounts []. mountPath ไปยังชื่อไดเร็กทอรีที่ไม่ได้ใช้ซึ่งคุณต้องการให้ความลับปรากฏ
  4. แก้ไขรูปภาพและ / หรือบรรทัดคำสั่งของคุณเพื่อให้โปรแกรมค้นหาไฟล์ในไดเร็กทอรีนั้น แต่ละคีย์ในแผนที่ข้อมูลลับจะกลายเป็นชื่อไฟล์ภายใต้ mountPath

ฉันใช้สิ่งนี้แล้วและมันก็ใช้ได้ดี


4
  • ดังที่กล่าวไว้ข้างต้น "- ส่งออก" เป็นทางเลือกหนึ่งในการรับรายการที่สอดคล้องกับวัตถุ kubeernetes
  • แต่ "- ส่งออก" ถือเป็นรถบั๊กและมีข้อเสนอให้เลิกใช้งาน
  • ปัจจุบันทางเลือกที่ดีกว่าคือทำ "-o yaml" หรือ "-o json" แล้วลบฟิลด์ที่ไม่จำเป็นออก
  • ความแตกต่างหลักคือ "- ส่งออก" คาดว่าจะลบการตั้งค่าเฉพาะคลัสเตอร์ (เช่น IP บริการคลัสเตอร์ของบริการ k8s) แต่พบว่าไม่สอดคล้องกันในเรื่องนี้

4

ใช้คำสั่งนี้เพื่อรับรูปแบบ yaml ของบริการของคุณ

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

คุณสามารถใส่ไว้ในไฟล์บางไฟล์ได้ด้วย

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




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.