Kubernetes 永続ボリューム要求 nodeAffinity エラー

Kubernetes 永続ボリューム要求 nodeAffinity エラー

永続ボリュームのデプロイに問題がありますが、Kubernetes に mssql ポッドをデプロイしたいと考えています。

最初に、デプロイされていると思われる名前空間にストレージクラスをデプロイしましたが、永続ボリュームは保留状態で mssql にデプロイされず、describe コマンドを使用するとボリュームをバインドできないというメッセージが表示されました。

そこで、このタイプのエラーを Google で検索したところ、別の永続ボリューム構成が見つかり、yaml ファイルを変更しなければならなくなりましたが、今度は別のエラーが発生しました。

このエラーは既にこのフォーラムで質問されていますが、回答が私の問題に合わないか、問題を解決していないようです。-> 参照:同じ問題

エラーメッセージ:

永続ボリューム pvc-mssql が無効です: spec.persistentvolumesource: 禁止: 作成後は変更できません nodeaffinity: 無効な値: core.volumenodeaffinity(必須:(*core.nodeselector) (0xc007163b00)}: フィールドは変更できません

エラー画像

私のストレージクラス(デプロイ済み):

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

私のPVC(エラーあり):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pvc-mssql
  labels:
    type: local
spec:
  capacity:
    storage: 12Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  hostPath:
    path: /mnt/data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - master-production-internal

私の mssql (デプロイ待ち):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql
  labels:
    app: mssql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      containers:
      - name: mssql
        image: mcr.microsoft.com/mssql/server
        resources:
          requests:
            cpu: 1
            memory: 2Gi
        env:
          - name: ACCEPT_EULA
            value: "Y"
          - name: SA_PASSWORD
            value: mypassword
        ports:
        - containerPort: 1433
        volumeMounts:
        - name: mssql
          mountPath: /var/opt/mssql
      volumes:
      - name: mssql
        persistentVolumeClaim:
          claimName: pvc-mssql

もちろん、すべて同じ名前空間にデプロイされています。私の Kubernetes は 4 つのノード、つまり 4 つの VM で構成されており、各 VM には約 2 つの vCPU と 4 GB の RAM、128 GB のディスク容量があり、Ubuntu サーバーを実行しています。fail2ban、ufw で構成されており、マスターが 1 つ、ノードが 3 つあります。最新バージョンのクラスターがデプロイされたのは 2 か月未満です。

何が問題なのでしょうか。また、pvc で何を変更する必要があるのでしょうか。また、mssql デプロイメント yaml で何か変更する必要があるのでしょうか。

私の mssql のエラーを正しく理解している限り、別のノードにシュレッド ボリュームをバインドすることはできません。そのため、現在、マスターである特定のノードが PVC に存在します。<- これも正しいですか、それとも変更する必要がありますか?

答え1

私は、永続ボリューム要求なしで mssql および mongo ポッドをデプロイすることでこれを実現しました。

関連情報