tidak ada kecocokan untuk jenis "Penempatan" dalam versi "extensions / v1beta1

28

Saya mengalami masalah saat menggunakan mojaloop .kubernetes merespons dengan log kesalahan seperti

Saya telah memeriksa versi Kubernetes saya dan 1.16 adalah versinya jadi bagaimana saya bisa memperbaiki masalah semacam itu dengan versi API. Dari penyelidikan, saya menemukan bahwa Kubernetes tidak mendukung apps / v1beta2, apps / v1beta1 jadi bagaimana saya dapat membuat Kubernetes untuk menggunakan versi yang saat ini tidak ditinggalkan atau versi yang didukung Saya baru ke Kubernetes dan siapa pun yang dapat mendukung saya, saya senang

Kesalahan: validasi gagal: [tidak dapat mengenali "": tidak ada kecocokan untuk jenis "Penempatan" dalam versi "apps / v1beta2", tidak dapat mengenali "": tidak ada kecocokan untuk jenis "Penempatan" dalam versi "ekstensi / v1beta1", tidak dapat mengenali "": tidak ada kecocokan untuk jenis "StatefulSet" dalam versi "apps / v1beta2", tidak dapat mengenali "": tidak ada kecocokan untuk jenis "StatefulSet" dalam versi "apps / v1beta1"]

dan
sumber
1
Tulis ulang file manifes Anda untuk menggunakan apis kubernetes.io/blog/2019/07/18/api/deprecations-in-1-16
zerkms
bagaimana saya bisa mereproduksi masalah ini, bisakah Anda membagikan kepada saya beberapa langkah
dan

Jawaban:

57

Di Kubernetes 1.16 beberapa apis telah diubah.

Anda dapat memeriksa apis mana yang mendukung objek Kubernetes saat ini

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

Ini berarti bahwa hanya apiVersion dengan appsbenar untuk Penyebaran ( extensionstidak mendukung Deployment). Situasi yang sama dengan StatefulSet.

Anda hanya perlu mengubah Deployment dan StatefuSet apiVersion menjadi apiVersion: apps/v1.

Jika ini tidak membantu, silakan tambahkan YAML Anda ke pertanyaan.

EDIT Karena masalah disebabkan oleh templat HELM termasuk apiVersions lama di Deployment yang tidak didukung di versi 1.16, ada 2 solusi yang mungkin:

1. git clone seluruh repo dan mengganti apiVersion untuk apps/v1semua template / deployment.yaml menggunakan script
2. Gunakan versi lama dari Kubernetes (1,15) ketika validator menerima extensionssebagai apiVersionuntuk Deployentdan StatefulSet.

Pjoter
sumber
bisakah saya menurunkan versi kubernette karena semua file yaml deployment untuk mojaloop kompatibel dengan kuberntes versi 1.15 jadi bagaimana saya bisa menurunkan versi atau dengan membuat downgrade saya bisa mendapatkan solni kemudian
dan
1
Saya sudah memeriksa bagan helm mojaloop / mojaloop ini. Sayangnya, semua template dengan penyebaran memiliki apiVersions: extensions/v1beta1. Sebagai salah satu solusi yang mungkin adalah untuk git clonerepo keseluruhan dan mengganti apiVersion ke apps/v1dalam semua template / deployment.yam skrip usinc find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.Solusi kedua mungkin hanya menggunakan versi Kubernetes lama (1,15) ketika validator menerima ekstensi sebagai apiVersion untuk Deployent dan StatefulSet.
PjoterS
@dan apakah Anda menggunakan Minikubeatau Kubeadm?
PjoterS
kubeadm saya tidak menggunakan minikube
dan
dapatkah Anda berbagi saya beberapa langkah untuk pemasangan kubeadmn specfic ke versi 1.15 saya tidak dapat menemukan sumber daya specfic mengingat pemasangan kubeadmn 1.15
dan
4

Anda dapat mengubah secara manual sebagai alternatif. Ambil grafik helm:

helm fetch --untar stable/metabase

Akses folder grafik:

cd ./metabase

Ubah versi API:

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

Tambahkan spec.selector.matchLabels:

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

Akhirnya instal bagan Anda yang diubah:

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

Nikmati!

Bruno Wego
sumber
0

Ini mengganggu saya karena saya menguji banyak paket helm jadi saya menulis skrip cepat - yang dapat dimodifikasi untuk menyortir alur kerja Anda mungkin lihat di bawah

Alur kerja baru Pertama-tama ambil bagan sebagai tgz ke direktori kerja Anda

helm fetch repo/chart

kemudian di tempat kerja Anda langsung jalankan script bash di bawah ini - yang saya beri nama helmk

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

Isi helm - perlu mengedit clustername kubeconfig Anda agar berfungsi

#!/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

Ini adalah hack yang sedikit berbahaya karena saya secara manual beralih ke konteks namespace baru yang Anda inginkan lalu kembali lagi sehingga hanya untuk digunakan untuk pengguna tunggal atau benar-benar berkomentar.

Anda akan mendapat peringatan tentang menggunakan fasilitas konversi kubectl seperti ini

Jika Anda perlu mengedit YAML untuk menyesuaikan - cukup ganti salah satu / dev / stdin ke file perantara tetapi mungkin lebih baik untuk mendapatkannya menggunakan "buat" dengan save-config seperti yang saya miliki dan kemudian cukup "terapkan" perubahan Anda yang berarti bahwa mereka akan direkam dalam kubernet juga. Semoga berhasil

john beck
sumber
0

untuk membuatnya lebih sederhana, Anda tidak memaksa instalasi saat ini untuk menggunakan versi API yang sudah ketinggalan zaman, tetapi Anda cukup memperbaiki versi dalam file konfigurasi Anda jika Anda ingin memeriksa versi yang didukung oleh kubus saat ini, jalankan:

root @ ubn64: ~ # kubectl api-versi | grep -i aplikasi

apps / v1

root @ ubn64: ~ #

Bagikan
sumber