我创建了一个自定义SQL Server数据库容器映像 . 我可以将其作为本地计算机上的容器运行(带有Docker for Windows的Windows 10) . 运行该容器后,我可以使用服务器名称127.0.0.1:1433从SQL Server Management Studio成功连接到该容器 .
我试图在Azure中的Kubernetes中运行与StatefulSet相同的容器 .
以下是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
外部服务(也用无头服务尝试,但我也需要从pod外部连接)
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
)都没有红色 .
我还为端口1433设置了Azure负载均衡器的运行状况探测和负载均衡规则 .
但是,当我在SQL Server Management Studio中输入LB:1433的公共IP地址作为服务器名称时,我收到以下错误 .
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)
我错过了什么?
1 回答
服务需要更改为
type: LoadBalancer
. 如果您已在与k8s群集相同的资源组中配置了静态IP,则可以将其指定为loadBalancerIP: WW.XX.YY.ZZ
. 如果注释,服务将提供新的IP地址 . 使用kubectl describe service sqlservice
查找IP地址或使用k8s仪表板 .