我创建了一个自定义 SQL Server 数据库容器镜像。我可以将其作为容器在本地计算机上运行(Windows 10 和 Docker for Windows)。运行该容器后,我可以使用服务器名称 127.0.0.1:1433 从 SQL Server Management Studio 成功连接到它。
我正在尝试在 Azure 中运行与 Kubernetes 中的 StatefulSet 相同的容器。
以下是 Kubernetes 资源。
secret (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,但我还需要从 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 的公共(public) IP 地址:1433 作为服务器名称时,出现以下错误。
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)
我错过了什么?
最佳答案
服务需要更改为类型:LoadBalancer
。如果您已经在与 k8s 集群相同的资源组中配置了静态 IP,则可以将其指定为 loadBalancerIP: WW.XX.YY.ZZ
。如果评论,服务将提供一个新的 IP 地址。使用kubectl描述服务sqlservice
来查找IP地址或使用k8s仪表板。
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
关于sql-server - 无法从 Management Studio 连接到 Azure 上的 Kubernetes (ACS) 上的 SQL Server 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351616/