Я создал собственный образ контейнера базы данных SQL Server. Я могу запустить это как контейнер на моем локальном компьютере (Windows 10 с Docker для Windows). После запуска этого контейнера я могу успешно подключиться к нему из SQL Server Management Studio, используя имя сервера 127.0.0.1:1433.
Я пытаюсь запустить тот же контейнер в качестве StatefulSet в Kubernetes в Azure.
Ниже приведены ресурсы Kubernetes.
Секрет (для пароля SQL Server SA)
apiVersion: v1
kind: Secret
metadata:
name: sqlsecret
type: Opaque
data:
sapassword: base64encodedvalue
Класс хранилища (StatefulSet - внешнее хранилище)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azurestorageclass
provisioner: kubernetes.io/azure-disk
parameters:
skuName: Standard_LRS
location: southeastasia
storageAccount: myaccount
Внешняя служба (также пробовала использовать Headless Service, но мне также нужно подключаться извне из модулей)
apiVersion: v1
kind: Service
metadata:
name: sqlservice
labels:
name: sqlservice
spec:
ports:
- port: 1433
targetPort: 1433
externalIPs:
- Kubernetes-Cluster-LB-Public-IP-Address-From-Azure-Portal
selector:
role: sqlservice
и, наконец, StatefulSet.
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: sqlserverstatefulset
spec:
serviceName: "sqlservice"
replicas: 1
template:
metadata:
labels:
role: sqlservice
spec:
terminationGracePeriodSeconds: 10
containers:
- name: sqlinux
image: custom-image-from-docker-hub
env:
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: sqlsecret
key: sapassword
- name: ACCEPT_EULA
value: "Y"
ports:
- containerPort: 1433
volumeMounts:
- name: sql-persistent-storage
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: sql-persistent-storage
annotations:
volume.beta.kubernetes.io/storage-class: "azurestorageclass"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 100Gi
Я запускаю эту команду, чтобы подготовить эти ресурсы со своего локального компьютера (с контекстом, указывающим на кластер Azure).
kubectl create -f c:\sqlkube.yaml
Все мои ресурсы успешно подготовлены. Все зеленое, ничего красного на панели управления Kubernetes (kubctl proxy
).
Я также установил проверку работоспособности и правило балансировки нагрузки для Azure Load Balancer для порта 1433.
Однако, когда я ввожу общедоступный IP-адрес LB: 1433 в качестве имени сервера в SQL Server Management Studio, я получаю следующую ошибку.
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - The wait operation timed out.) (Microsoft SQL Server, Error: 258)
Что мне не хватает?