所以我想在 kubernetes 上部署 mssql pod,儘管我在部署持久性磁碟區時遇到了一些麻煩。
我首先在我的命名空間中部署了我的存儲類,該命名空間似乎已部署,我的持久卷未以掛起狀態部署 mssql,並且當使用描述命令時,它表示無法綁定我的捲
所以我用谷歌搜尋了這種類型的錯誤,並遇到了另一個持久卷配置,這讓我更改了我的 yaml 文件,但現在我遇到了另一個錯誤。
此錯誤已在此論壇上提出,但答案似乎不適合或解決我的問題。 -> 參考:同樣的問題
錯誤訊息:
持久性磁碟區 pvc-mssql 無效:spec.persistentvolumesource:禁止:建立後不可變節點親和力:無效值: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 個虛擬機,其中每個虛擬機大約有2vcpu 和4GB 內存,具有128GB 磁碟空間,運行ubuntu 伺服器:配置了fail2ban、ufw,我有1 個主節點和3 個節點。我已經部署了最新版本的集群,大約不到兩個月前
問題似乎是什麼,或者我需要在 pvc 中更改什麼,也許我必須在 mssql 部署 yaml 中更改某些內容?
當我正確理解我的 mssql 的錯誤時,它無法將碎片卷綁定到另一個節點上,這就是為什麼我現在在 pvc 中有一個特定節點,它是我的主節點。 <- 這也是正確的還是我應該更改它?
答案1
我透過部署 mssql 和 mongo pod 來實現這一目標,而無需持久卷聲明。