Kubernetes名前空間が「終了」状態で停止している問題があります。実行すると、kubectl get ns cattle-monitoring-system -o json|jq
名前空間の状態に関するエラーメッセージが生成され、名前空間の状態内の条件がcustom.metrics.k8s.io/v1beta1
表示されます。DiscoveryFailed
E1213 08:02:39.979034 953148 memcache.go:287] couldn't get resource list for custom.metrics.k8s.io/v1beta1: the server is currently unable to handle the request
…
{
"apiVersion": "v1",
"kind": "Namespace",
…
"status": {
"conditions": [
{
"lastTransitionTime": "2023-12-12T14:53:40Z",
"message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: custom.metrics.k8s.io/v1beta1: the server is currently unable to handle the request",
"reason": "DiscoveryFailed",
"status": "True",
"type": "NamespaceDeletionDiscoveryFailure"
},
…
]
}
}
名前空間を正常に削除するには、この問題をどのように解決する必要がありますか?
答え1
遭遇する問題は、Kubernetes APIサーバーが名前空間のシャットダウンを防ぐcustom.metrics.k8s.io/v1beta1 APIを取得できないことに関連しています。この問題を解決する手順は次のとおりです。
リンクされたAPIServiceを確認してください。
custom.metrics.k8s.io/v1beta1 に APIService があるかどうかを調べます。
kubectl get apiservices.apiregistration.k8s.io -o json|jq '.items[]|select(.metadata.name=="v1beta1.custom.metrics.k8s.io")'
出力は次のようにする必要があります
{
"apiVersion": "apiregistration.k8s.io/v1",
"kind": "APIService",
...
"status": {
"conditions": [
{
"message": "service/example-service in \"example-namespace\" is not present",
"reason": "ServiceNotFound",
"status": "False",
"type": "Available"
}
]
}
}
APIServiceに関連するアクティブコンポーネントがないことを確認してください。
次のコマンドを実行します。example-service
以前に生成した出力に基づいて調整します。
for c in configmaps secrets deployments statefulsets pods services; do
echo "Checking for $c related to example-service"
kubectl get $c -A | grep example-service
done
出力がない場合は、クラスタに APIService に関連するアクティブコンポーネントがないことを確認します。
API サービスの削除
kubectl delete apiservice v1beta1.custom.metrics.k8s.io
APIServiceを削除した後も、名前空間は終了し続ける必要があります。予期しない問題があるかどうかをクラスターを監視します。