我创建了一个自定义SQL Server数据库容器映像。我可以将其作为本地计算机上的容器运行(Windows 10使用Docker for Windows)。运行该容器后,我可以使用服务器名称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
外部服务(也尝试使用无头服务,但我也需要从外部连接外部服务)
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)
我错过了什么?
答案 0 :(得分:0)
服务需要更改为loadBalancerIP: WW.XX.YY.ZZ
。如果您已在与k8s群集相同的资源组中配置了静态IP,则可以将其指定为kubectl describe service sqlservice
。如果注释,服务将提供新的IP地址。使用apiVersion: v1
kind: Service
metadata:
name: sqlservice
labels:
app: sqlservice
spec:
type: LoadBalancer
#loadBalancerIP: 52.187.173.125
ports:
- port: 1433
targetPort: 1433
selector:
app: sqlinux
查找IP地址或使用k8s仪表板。
SELECT UNIX_TIMESTAMP();)