【发布时间】:2021-03-01 04:55:21
【问题描述】:
我正在开发一个带有 Web 服务和持久层的简单 Web 应用程序。 Web 持久层是 Cockroach db。我正在尝试使用单个命令部署我的应用程序:
kubectl apply -f my-app.yaml
应用部署成功。但是,当后端必须在 db 中存储某些内容时,会出现以下错误:
dial tcp: lookup web-service-cockroach on 192.168.65.1:53: no such host
当我启动我的应用程序时,我向 cockroach db 提供以下连接字符串并且连接成功,但是当我尝试在 db 中存储某些内容时,出现上述错误:
postgresql://root@web-service-db:26257/defaultdb?sslmode=disable
由于某种原因,web pod 无法与 db pod 通信。我的整个配置是:
# Service for web application
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-service
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: http
nodePort: 30103
externalIPs:
- 192.168.1.9 # < - my local ip
---
# Deployment of web app
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service
spec:
selector:
matchLabels:
app: web-service
replicas: 1
template:
metadata:
labels:
app: web-service
spec:
hostNetwork: true
containers:
- name: web-service
image: my-local-img:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
hostPort: 8080
env:
- name: DB_CONNECT_STRING
value: "postgresql://root@web-service-db:26257/defaultdb?sslmode=disable"
---
### Kubernetes official doc PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: cockroach-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/my-local-volueme"
---
### Kubernetes official doc PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cockroach-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
---
# Cockroach used by web-service
apiVersion: v1
kind: Service
metadata:
name: web-service-cockroach
labels:
app: web-service-cockroach
spec:
selector:
app: web-service-cockroach
type: NodePort
ports:
- protocol: TCP
port: 26257
targetPort: 26257
nodePort: 30104
---
# Cockroach stateful set used to deploy locally
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web-service-cockroach
spec:
serviceName: web-service-cockroach
replicas: 1
selector:
matchLabels:
app: web-service-cockroach
template:
metadata:
labels:
app: web-service-cockroach
spec:
volumes:
- name: cockroach-pv-storage
persistentVolumeClaim:
claimName: cockroach-pv-claim
containers:
- name: web-service-cockroach
image: cockroachdb/cockroach:latest
command:
- /cockroach/cockroach.sh
- start
- --insecure
volumeMounts:
- mountPath: "/tmp/my-local-volume"
name: cockroach-pv-storage
ports:
- containerPort: 26257
部署后一切看起来都很好。
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50m
web-service NodePort 10.111.85.64 192.168.1.9 8080:30103/TCP 6m17s
webs-service-cockroach NodePort 10.96.42.121 <none> 26257:30104/TCP 6m8s
kubectl get pods
NAME READY STATUS RESTARTS AGE
web-service-6cc74b5f54-jlvd6 1/1 Running 0 24m
web-service-cockroach-0 1/1 Running 0 24m
提前致谢!
【问题讨论】:
-
如果您使用
webs-service-cockroach.default.svc.cluster.local作为数据库的DNS 名称会发生什么?这源自kubernetes.io/docs/concepts/services-networking/dns-pod-service/… -
请注意:我不确定您的服务名称是什么。 yaml 有
web-service-cockroach,但获取服务命令返回webs-service-cockroach -
服务名称是
web-service-cockroach。当我尝试使用以下连接字符串时: value: "postgresql://web-service-cockroach.default.svc.cluster.local:26257/defaultdb?sslmode=disable" Db 报告: dial tcp [::1]:26257 : 连接:连接被拒绝 -
我已经设法通过将 cockroach-service 设置为连接字符串中的地址来使其工作,非常感谢 Ben!
标签: kubernetes deployment yaml kubectl cockroachdb