我的Rails部署无法连接到postgres数据库。日志中的错误:
PG::ConnectionBad (could not connect to server: Connection refused
Is the server running on host "db" (10.0.105.11) and accepting
TCP/IP connections on port 5432?
):
这是我的kubectl get services
输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
load-balancer LoadBalancer 10.0.5.147 60.86.4.33 80:31259/TCP 10m
db ClusterIP 10.0.105.11 <none> 5432/TCP 10m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 10m
web ClusterIP 10.0.204.107 <none> 3000/TCP 10m
db-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: db
name: db
spec:
replicas: 1
selector:
matchLabels:
app: db
strategy:
type: Recreate
template:
metadata:
labels:
app: db
spec:
containers:
- env:
- name: POSTGRES_DB
value: postgres
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: POSTGRES_USER
value: postgres
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
image: postgres
imagePullPolicy: ""
name: db
resources: {}
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres
restartPolicy: Always
serviceAccountName: ""
volumes:
- name: postgres
persistentVolumeClaim:
claimName: postgres
status: {}
db-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: db
labels:
app: db
spec:
ports:
- port: 5432
selector:
app: db
tier: database
config / database.yml:
default: &default
adapter: postgresql
encoding: utf8
host: db
username: postgres
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
如何确保postgres实例正在运行并接受连接?我是否在清单文件中配置错误,还是database.yml文件需要指向其他主机?
答案 0 :(得分:3)
首先让我惊讶的是,您的public class Tree {
public static void main(String[] args) {
BinarySearchTree<String> bTree = new BinarySearchTree<String>();
bTree.add("1");
bTree.add("2");
bTree.add("3");
bTree.add("4");
bTree.add("5");
bTree.add("6");
bTree.add("7");
int size = abcTree.treeHeight() - 1;
int leftNode = abcTree.size() - abcTree.oobScore2();
double balanced = leftNode / size;
for (int i = 0; i < size; i++ ) {
if (i < leftNode) {
//abcTree.rebalance();
System.out.println(balanced);
return;
}
}
}
}
服务针对两个选择器db
和app: db
,但是对应的tier: database
仅具有{{1 }} 标签。您将需要在部署模板元数据中添加deployment.yml
标签,以便该服务将适当地定位到正确的pod。
db
通常,如果服务未连接到后端Pod,则可以使用简单的kubectl命令轻松诊断问题。
这将告诉您当前将哪些选择器应用于您的服务
tier
然后,您可以获取选择器所引用的pod,并确保它返回了某些东西。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: db
tier: database
name: db
spec:
replicas: 1
selector:
matchLabels:
app: db
tier: database
strategy:
type: Recreate
template:
metadata:
labels:
app: db
tier: database
最后,我建议通过kube-proxy使用服务设置的 DNS 名称,而不是群集IP地址。我倾向于将其视为比群集更具弹性的,因为如果服务IP发生更改,它将自动路由。在您的连接字符串中,使用kubectl describe service db -o yaml
代替kubectl get pods -l app=db -l tier=database
。