Mojaloop .kubernetesのデプロイ中に問題が発生しました。次のようなエラーログが返されます。
私はKubernetesのバージョンを確認しました。バージョン1.16はAPIバージョンのこのような問題をどのように修正できますか。調査の結果、Kubernetesがapps/v1beta2、apps/v1beta1をサポートしていないことがわかりました。現在サポートが終了していないバージョンまたはサポートされているバージョンを使用する私はKubernetesを初めて使用し、サポートしてくれる人なら誰でも幸せ
エラー:検証に失敗しました:["を認識できません:バージョン" apps/v1beta2 "の種類" Deployment "に一致しません。" "を認識できません:バージョン" extensions/v1beta1 "の種類" Deployment "に一致しません。 ""を認識:バージョン "apps/v1beta2"で種類 "StatefulSet"との一致なし、 ""を認識できません:バージョン "apps/v1beta1"で種類 "StatefulSet"との一致なし]
Kubernetes 1.16では、api
sの一部が変更されています。
現在のKubernetesオブジェクトをサポートするAPIを確認するには、
$ kubectl api-resources | grep deployment
deployments deploy apps true Deployment
これは、apps
を含むapiVersionのみがDeploymentに対して正しいことを意味します(extensions
はDeployment
をサポートしていません)。 StatefulSetと同じ状況。
DeploymentとStatefuSet apiVersionをapiVersion: apps/v1
に変更するだけです。
これで問題が解決しない場合は、YAMLを質問に追加してください。
[〜#〜] edit [〜#〜]問題は、バージョン1.16でサポートされていないDeploymentに古いapiVersionsを含むHELMテンプレートが原因で発生するため、2つの解決策があります:
1。git clone
リポジトリ全体、およびスクリプトを使用してすべてのtemplates/deployment.yamlでapiVersionをapps/v1
に置き換えます
2。バリデーターがextensions
をapiVersion
およびDeployent
のStatefulSet
として受け入れる場合は、古いバージョンのKubernetes(1.15)を使用します。
別の方法として手動で変更できます。ヘルムチャートを取得します。
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}
楽しい!
たくさんのヘルムパッケージをテストしているので、これは私を困らせていました。簡単なスクリプトを書いたのですが、これを変更して、ワークフローを並べ替えることができます。
新しいワークフローまず、グラフをtgzとして作業ディレクトリにフェッチします。
helm fetch repo/chart
次に、作業中に直接bashスクリプトを実行します-私はそれを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の1つを中間ファイルに置き換えるだけですが、私が持っているように、save-configで「create」を使用してそれを取得し、変更を「適用」するだけの方が良いでしょう。つまり、kubernetesにも記録されます。幸運を
簡単に言うと、現在のインストールでAPIの古いバージョンを使用するように強制するのではなく、現在のkubeがサポートするバージョンを確認する場合は、設定ファイルでバージョンを修正するだけです。
root @ ubn64:〜#kubectl api-versions | grep -iアプリ
アプリ/ v1
root @ ubn64:〜#