既存の k0s クラスターでストレージ クラスを構成する方法

既存の k0s クラスターでストレージ クラスを構成する方法

実行するとkos kubectl get storageclassプロビジョニングされていないことに気づき、手動で追加する必要があります。正確な手順についてはよくわかりません。[ドキュメント][https://docs.k0sproject.io/main/storage/]によると、k0sにはOpenEBSがインストールされています。わからないのは、この拡張機能を有効にする設定ファイル内。

既存の設定ファイルにはこれだけがあります (これがデフォルトの設定ファイルであるはずです。これで正しいでしょうか?):

spec:
  api:
    externalAddress

実行したk0s stop後、設定ファイルを次のように修正しました。

spec:
  api:
    externalAddress
  extensions:
    storage:
      type: openebs_local_storage

この構成変更後も、クラスターのストレージクラスが見つからないという同じエラーが発生します。k0s も再インストールする必要がありますか? 既存の k0s.yaml には、リンクに示されているサンプルと比較して、構成パラメーターが非常に少ないように見えるため、少し不安です。

編集: 使用ドキュメンテーション既存のデフォルト設定を使用する新しい k0s.yaml の生成を進めました。既存の k0s.yaml (上記) が上書きされることが判明しました。また、新しい yaml ファイルに変更を加えて、次の結果を作成しました。

apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
  creationTimestamp: null
  name: k0s
spec:
  api:
    address: 10.XXX.XXX.XXX
    k0sApiPort: 9443
    port: 6443
    sans:
    - 10.XX.XX.XXX
    - 172.XX.XX.XXX
    - 10.XX.XX.XXX
    - 10.XX.XX.XXX
    - fe80::XXX:XXX:XXX:XXX
    - fe80::XXX:XXX:XXX:XXX
    - fe80::XXX:XXX:XXX:XXX
    - fe80::XXX:XXX:XXX:XXX
    - fe80::XXX:XXX:XXX:XXX
    - fe80::XXX:XXX:XXX:XXX
    tunneledNetworkingMode: false
  controllerManager: {}
  extensions:
    helm:
      charts: null
      repositories: null
    storage:
      create_default_storage_class: true
      type: openebs_local_storage
  images:
    calico:
      cni:
        image: docker.io/calico/cni
        version: v3.21.2
      kubecontrollers:
        image: docker.io/calico/kube-controllers

この変更後、クラスターの再インストール(新しい構成を使用)を実行します。

k0s install controller -c /etc/k0s/k0s.yaml

しかし、今はエラーが発生しています:

Error: failed to install k0s service: failed to install service: Init already exists: /etc/systemd/system/k0scontroller.service

答え1

問題を再現できました。OpenEBS ストレージの新しい構成でクラスターを再インストールするには、以前のセットアップをクリーンアップする必要があります。

  1. k0s サービスを停止します。
sudo k0s stop
  1. カスタマイズされた構成ファイルなしで行われた以前のインストールをリセットします。
sudo k0s reset
  1. 新しい設定ファイルと--enable-workerフラグ -> を使用して k0s を再インストールすると、コントローラーとワーカー機能を備えた単一ノード k0s が再度インストールされます。
sudo k0s install controller --enable-worker -c /etc/k0s/k0s.yaml
  1. k0s サービスを開始します。
sudo k0s start
  1. 数秒後、クラスター上で使用できる 2 つのストレージ クラスが有効になっていることを確認します。
sudo k0s kubectl get storageclass

ストレージ クラスにはvolumeBindingMode: WaitForFirstConsumer- が含まれます。つまり、アプリケーション ポッドがノード上でスケジュールされるまで、ボリュームのバインドに遅延が発生します。

関連情報