永続ボリュームのデプロイに問題がありますが、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 ポッドをデプロイすることでこれを実現しました。