sudo mkdir /mnt/mssql
sudo chmod +777 /mnt/mssql
apiVersion: v1
kind: PersistentVolume
metadata:
name: mon-volume-persistant
spec:
storageClassName: local-storage
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/mssql
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mon-volume-persistant-claim
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
apiVersion: apps/v1
kind: Deployment
metadata:
name: mssql-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mssql
template:
metadata:
labels:
app: mssql
spec:
terminationGracePeriodSeconds: 30
hostname: mssqlinst
securityContext:
runAsUser: 10001
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2019-latest
resources:
requests:
memory: "2G"
cpu: "2000m"
limits:
memory: "2G"
cpu: "2000m"
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: MSSQL_SA_PASSWORD
volumeMounts:
- name: mssqldb
mountPath: /var/opt/mssql
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: mon-volume-persistant-claim
apiVersion: v1
kind: Secret
metadata:
name: mssql
type: Opaque
data:
MSSQL_SA_PASSWORD: {{ .Values.sql_sa_password | b64enc }}
apiVersion: v1
kind: Service
metadata:
name: mssql-deployment
spec:
selector:
app: mssql
ports:
- protocol: TCP
port: 1433
targetPort: 1433
type: LoadBalancer
pod无法启动成功
kubectl describe pvc mon-volume-persistant-claim
Name: mon-volume-persistant-claim
Namespace: default
StorageClass: local-storage
Status: Bound
Volume: mon-volume-persistant
Labels: app.kubernetes.io/managed-by=Helm
Annotations: meta.helm.sh/release-name: mssql
meta.helm.sh/release-namespace: default
pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 10Gi
Access Modes: RWO
VolumeMode: Filesystem
Used By: mssql-deployment-6477c9d6fb-jpbx4
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal WaitForFirstConsumer 31m persistentvolume-controller waiting for first consumer to be created before binding
kubectl describe pv mon-volume-persistant
Name: mon-volume-persistant
Labels: app.kubernetes.io/managed-by=Helm
Annotations: meta.helm.sh/release-name: mssql
meta.helm.sh/release-namespace: default
pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: local-storage
Status: Bound
Claim: default/mon-volume-persistant-claim
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 10Gi
Node Affinity: <none>
Message:
Source:
Type: HostPath (bare host directory volume)
Path: /mnt/mssql
HostPathType:
Events: <none>
kubectl logs mssql-deployment-6477c9d6fb-jpbx4 --all-containers
SQL Server 2019 will run as non-root by default.
This container is running as user mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
/opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. File: LinuxDirectory.cpp:420 [Status: 0xC0000022 Access Denied errno = 0xD(13) Permission denied]
我确定我正在尝试解决一个非常普遍和简单的问题,但我在 K8S 官方文档中找不到任何清晰和完整的方法。
实际上,我必须删除存储类并使用
standard
代替。
然后我必须进入minikube容器的终端,并使
chown -R 10001:0 <my host folder>
实际上,从kubernetes的角度来看,minikube容器是kubernetes的宿主。 (参见此处:https://mycsharpdeveloper.wordpress.com/2022/10/30/minikube-opt-mssql-bin-sqlservr-error-the-system-directory-system-could-not-be-created/ )
然后,要将此文件夹按原样映射到我的裸机本地文件夹中,我必须从我的机器上使用
minikube mount
命令。 (参见此处:https://minikube.sigs.k8s.io/docs/handbook/mount/)
minikube mount /mnt/mssql:/data/mssql --uid=10001
10001 是部署中提到的用户。这个命令实际上对 minikube 说,托管 kubernetes 的容器镜像会将其文件夹
/data/mssql
映射到非常本地的文件夹 /mnt/mssql
,并且它的本地文件夹将属于用户 10001。然后在卷上,该文件夹是提到 hostPath
是直接主机的路径...即 minikube 容器。在这个 minikube 容器上,我们刚刚定义这个文件夹将是 /data/mssql
docker ps
run docker exec -it -u root <the previously discovered container_id>
chown -R 10001:0 /data/mssql
minikube tunnel
kubectl get svc