ไม่ตรงกันสำหรับชนิด“ การปรับใช้” ในรุ่น "extensions / v1beta1


27

ฉันประสบปัญหาขณะปรับใช้ mojaloop .kubernetes กำลังตอบกลับด้วยบันทึกข้อผิดพลาดเช่น

ฉันตรวจสอบรุ่น Kubernetes ของฉันแล้วและ 1.16 เป็นรุ่นดังนั้นฉันจะแก้ไขปัญหาเช่นนี้กับรุ่น API ได้อย่างไรจากการตรวจสอบฉันพบว่า Kubernetes ไม่รองรับแอป / v1beta2, apps / v1beta1 ดังนั้นฉันจะทำให้ Kubernetes เป็นอย่างไร ใช้ในปัจจุบันไม่ใช่รุ่นที่ไม่สนับสนุนหรือรุ่นที่รองรับฉันใหม่กับ Kubernetes และทุกคนที่สามารถสนับสนุนฉันฉันมีความสุข

ข้อผิดพลาด: การตรวจสอบล้มเหลว: [ไม่สามารถจดจำ "": ไม่ตรงกับประเภท "การปรับใช้" ในรุ่น "แอพ / v1beta2" ไม่สามารถรับรู้ "": ไม่ตรงกับประเภท "การปรับใช้" ในรุ่น "ส่วนขยาย / v1beta1" รู้จัก "": ไม่ตรงกับประเภท "StatefulSet" ในรุ่น "แอป / v1beta2" ไม่สามารถรับรู้ "": ไม่ตรงกับประเภท "StatefulSet" ในรุ่น "แอป / v1beta1"]


1
เขียนไฟล์ Manifest ของคุณเพื่อใช้งานในปัจจุบัน apis kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
zerkms

ฉันจะทำซ้ำปัญหา u สามารถแบ่งปันฉันขั้นตอนบางอย่าง
แดน

คำตอบ:


56

ใน Kubernetes 1.16 apiมีการเปลี่ยนแปลงบางส่วน

คุณสามารถตรวจสอบ apis ที่รองรับวัตถุ Kubernetes ปัจจุบันโดยใช้

$ kubectl api-resources | grep deployment
deployments                       deploy       apps                           true         Deployment

ซึ่งหมายความว่าเฉพาะ apiVersion ที่appsถูกต้องสำหรับการปรับใช้ ( extensionsไม่สนับสนุนDeployment) สถานการณ์เดียวกันกับ StatefulSet

คุณเพียงแค่ต้องเปลี่ยนการใช้งานและ StatefuSet apiVersion apiVersion: apps/v1ไป

หากวิธีนี้ไม่ได้ผลโปรดเพิ่ม YAML ของคุณในคำถาม

แก้ไข เนื่องจากปัญหาเกิดจากเทมเพลต HELM ซึ่งรวม apiVersions เก่าในการปรับใช้ซึ่งไม่รองรับในเวอร์ชัน 1.16 จึงมีวิธีแก้ไข 2 วิธี:

1. git cloneซื้อคืนทั้งหมดและแทนที่ apiVersion ไปapps/v1ในแม่แบบ / deployment.yaml ใช้สคริปต์
2.ใช้รุ่นเก่าของ Kubernetes (1.15) เมื่อตรวจสอบยอมรับextensionsเป็นapiVersionสำหรับและDeployentStatefulSet


ฉันสามารถดาวน์เกรด kubernettes ได้หรือไม่เนื่องจากไฟล์ yaml สำหรับการปรับใช้ mojaloop ทั้งหมดสามารถทำงานร่วมกับ kuberntes เวอร์ชัน 1.15 ได้ดังนั้นฉันจะดาวน์เกรดหรือทำการดาวน์เกรดได้อย่างไร
dan

1
ฉันได้ตรวจสอบแผนภูมิหางเสือ mojaloop / mojaloop นี้แล้ว แต่น่าเสียดายที่แม่ทั้งหมดที่มีการใช้งานที่มี extensions/v1beta1apiVersions: เนื่องจากหนึ่งในวิธีแก้ปัญหาที่เป็นไปได้คือgit clonerepo ทั้งหมดและแทนที่ apiVersion เป็นapps/v1เทมเพลต / deployment.yaml usinc สคริปต์การ find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.แก้ปัญหาที่สองอาจใช้เพียง Kubernetes รุ่นเก่า (1.15) เมื่อตัวตรวจสอบยอมรับส่วนขยายเป็น apiVersion สำหรับ Deployent และ StatefulSet
PjoterS

คุณกำลัง @dan ใช้MinikubeหรือKubeadm?
PjoterS

kubeadm ผมไม่ได้ใช้ minikube
แดน

คุณสามารถแบ่งปันขั้นตอนบางอย่างเพื่อการติดตั้ง kubeadmn specfic ไปเป็นเวอร์ชั่น 1.15 ได้หรือไม่ฉันไม่สามารถค้นหาทรัพยากร specfic ได้เนื่องจากการติดตั้ง kubeadmn 1.15
และ

4

คุณสามารถเปลี่ยนด้วยตนเองเป็นทางเลือก ดึงแผนภูมิหางเสือ:

helm fetch --untar stable/metabase

เข้าถึงโฟลเดอร์แผนภูมิ:

cd ./metabase

เปลี่ยนรุ่น API:

sed -i 's|extensions/v1beta1|apps/v1|g' ./templates/deployment.yaml

เพิ่มspec.selector.matchLabels:

spec:
[...]
selector:
    matchLabels:
    app: {{ template "metabase.name" . }}
[...]

ในที่สุดติดตั้งแผนภูมิการเปลี่ยนแปลงของคุณ:

helm install ./ \
  -n metabase \
  --namespace metabase \
  --set ingress.enabled=true \
  --set ingress.hosts={metabase.$(minikube ip).nip.io}

สนุก!


0

มันน่ารำคาญสำหรับฉันเพราะฉันกำลังทดสอบแพคเกจหางเสือมากมายดังนั้นฉันจึงเขียนสคริปต์สั้น ๆ ซึ่งสามารถปรับเปลี่ยนเพื่อเรียงลำดับเวิร์กโฟลว์ของคุณได้จากด้านล่าง

เวิร์กโฟลว์ใหม่เรียกข้อมูลแผนภูมิเป็น tgz ไปยังไดเรกทอรีทำงานของคุณ

helm fetch repo/chart

จากนั้นในการทำงานของคุณโดยตรงรันสคริปต์ทุบตีด้านล่าง - ซึ่งฉันชื่อ helmk

helmk myreleasename mynamespace chart.tgz [any parameters for kubectl create]

เนื้อหาของ helmk - ต้องแก้ไขกลุ่ม kubeconfig ของคุณให้ทำงาน

#!/bin/bash
echo usage $0 releasename namespace chart.tgz [createparameter1] [createparameter2] ... [createparameter n]
echo This will use your namespace then shift back to default so be careful!!
kubectl create namespace $2   #this will create harmless error if namespace exists have to ignore
kubectl config set-context MYCLUSTERNAME --namespace $2
helm template -n $1 --namespace $2 $3 | kubectl convert -f /dev/stdin | kubectl create --save-config=true ${@:4}  -f /dev/stdin
#note the --namespace parameter in helm template above seems to be ignored so we have to manually switch context
kubectl config set-context MYCLUSTERNAME --namespace default

เป็นการแฮ็คที่อันตรายเล็กน้อยเนื่องจากฉันสลับไปที่บริบทเนมสเปซใหม่ที่คุณต้องการจากนั้นกลับมาอีกครั้งดังนั้นจึงจะใช้สำหรับผู้ใช้คนเดียวหรือจริงๆแล้วแสดงความคิดเห็น

คุณจะได้รับคำเตือนเกี่ยวกับการใช้สิ่งอำนวยความสะดวกในการแปลง kubectl เช่นนี้

หากคุณต้องการแก้ไข YAML เพื่อปรับแต่ง - เพียงแค่แทนที่หนึ่งในไฟล์ / dev / stdin เป็นไฟล์ระดับกลาง แต่น่าจะดีกว่าถ้าคุณใช้ "สร้าง" ด้วยการบันทึกการตั้งค่าตามที่ฉันมีแล้วเพียงแค่ "ใช้" การเปลี่ยนแปลงของคุณ ซึ่งหมายความว่าพวกเขาจะถูกบันทึกใน kubernetes ด้วย โชคดี


0

เพื่อให้ง่ายคุณไม่บังคับให้การติดตั้งปัจจุบันใช้ API รุ่นที่ล้าสมัย แต่คุณเพียงแก้ไขเวอร์ชันในไฟล์กำหนดค่าของคุณหากคุณต้องการตรวจสอบเวอร์ชันที่คุณรองรับ kube ปัจจุบันเพียงเรียกใช้:

root @ ubn64: ~ # kubectl api-versions | แอป grep -i

ปพลิเคชัน / v1

ราก @ ubn64: ~ #

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.