"extensions / v1beta1" sürümünde tür "Dağıtım" için eşleşme yok


27

Mojaloop .kubernetes dağıtımı sırasında sorun yaşıyorum gibi bir hata günlüğü ile yanıt veriyor

Kubernetes sürümümü kontrol ettim ve 1.16 sürümü bu yüzden API sürümü ile bu tür bir sorunu nasıl düzeltebilirim. Araştırmadan Kubernetes'in apps / v1beta2, apps / v1beta1'i desteklemediğini keşfettim, bu yüzden Kubernetes'i nasıl yapabilirim şu anda kullanımdan kaldırılmış sürümü veya desteklenen sürümü kullan Kubernetes'te yeniyim ve beni destekleyebilen herkes mutluyum

Hata: doğrulama başarısız oldu: ["" tanınamıyor: "apps / v1beta2" sürümünde tür "Dağıtım" için eşleşme yok, "" tanınamıyor: "uzantılar / v1beta1" sürümünde tür "Dağıtım" için eşleşme yok, "": "apps / v1beta2" sürümünde tür "StatefulSet" için eşleşme yok, "" tanımıyor: "apps / v1beta1" sürümünde "StatefulSet" türüyle eşleşme yok]


1
Manifest dosyalarınızı şu anda desteklenen apis kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
zerkms

ben sorunu nasıl yeniden u u bir adım paylaşabilirsiniz can
dan

Yanıtlar:


56

Kubernetes 1.16'da bazı apis değişti.

Hangi apislerin mevcut Kubernetes nesnesini desteklediğini kontrol ederek

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

Bu apps, Dağıtımlar için yalnızca ile birlikte başvurunun doğru olduğu anlamına gelir ( extensionsdesteklemez Deployment). StatefulSet ile aynı durum.

Dağıtım ve StatefuSet apiVersion olarak değiştirmeniz yeterlidir apiVersion: apps/v1.

Bu yardımcı olmazsa, lütfen YAML'nizi soruya ekleyin.

DÜZENLEME Sorun, 1.16 sürümünde desteklenmeyen Dağıtımlardaki eski uygulamaların dahil olduğu HELM şablonlarından kaynaklandığından, 2 olası çözüm vardır:

1. git clone Bütün repo ve apiVersion yerine apps/v1tüm şablonları / deployment.yaml kullanarak komut dosyası içinde
2. Kubernetes kullanımı eski sürümü (1.15) olurken kabul doğrulayıcı extensionsolarak apiVersioniçin Deployentve StatefulSet.


Mojaloop için tüm dağıtım yaml dosyası kuberntes sürüm 1.15 ile uyumlu olduğu için kubernettes'i düşürebilir miyim, bu yüzden nasıl indirebilirim veya indirgeme yaparak bir çözüm alabilir miyim
dan

1
Bu mojaloop / mojaloop dümen şemasını kontrol ettim. Ne yazık ki, dağıtımları ile tüm şablonları apiVersions vardır: extensions/v1beta1. Olası geçici çözümlerden biri , tüm şablonlarda / deployment.yaml usinc komut dosyasında tüm git clonerepo'yu değiştirmek ve yerini almaktır . apps/v1find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.
PjoterS

@dan Minikubeveya Kubeadmmı kullanıyorsunuz ?
PjoterS

kubeadm minikube kullanmadım
dan

u sürüm 1.15 için özel kubeadmn kurulumu için bazı adımlar paylaşabilir miyim ben kubeadmn 1.15 kurulumu
dan

4

Alternatif olarak manuel olarak değiştirebilirsiniz. Dümen grafiğini getir:

helm fetch --untar stable/metabase

Grafik klasörüne erişin:

cd ./metabase

API sürümünü değiştir:

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

Ekle spec.selector.matchLabels:

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

Son olarak değiştirilen grafiğinizi yükleyin:

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

Zevk almak!


0

Bu çok can sıkıcıydı çünkü birçok dümen paketini test ediyorum, bu yüzden hızlı bir komut dosyası yazdım - bu da iş akışınızı sıralamak için değiştirilebilir, belki aşağıya bakın

Yeni iş akışı Önce grafiği çalışma dizininize tgz olarak getirin

helm fetch repo/chart

o zaman doğrudan aşağıdaki bash betiğini çalışma - helmk adını

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

Helmk içeriği - çalışmak için kubeconfig küme adınızı düzenlemeniz gerekir

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

Biraz tehlikeli bir hack çünkü manuel olarak yeni istenen ad alanı içeriğine geçip tekrar tek bir geliştirici için kullanacağım veya bunu yorumlayacağım.

Bunun gibi kubectl dönüştürme tesisini kullanma hakkında bir uyarı alacaksınız

Özelleştirmek için YAML'yi düzenlemeniz gerekiyorsa, yalnızca / dev / stdin'den birini ara dosyalara değiştirin, ancak sahip olduğum gibi bir save-config ile "create" kullanarak onu almak daha iyidir ve daha sonra değişikliklerinizi "uygulayın" bu da kubernet'lere kaydedilecekleri anlamına gelir. İyi şanslar


0

Basitçe söylemek gerekirse, geçerli yüklemeyi API'nın eski bir sürümünü kullanmaya zorlamıyorsunuz, ancak geçerli kübün hangi sürümü desteklediğini kontrol etmek istiyorsanız, yapılandırma dosyalarınızdaki sürümü düzeltmeniz yeterlidir:

root @ ubn64: ~ # kubectl api sürümleri | grep -i uygulamaları

Uygulamaların / v1

Kök @ ubn64: ~ #

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.