- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
同一集群上的 pod 之间的连接失败。
据我了解,默认情况下,pods 暴露在 yaml 文件中指定的端口上。例如,我为 redis 配置了我的部署文件,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always
下面是容器尝试访问redis的pod的部署文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jks
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
imagePullSecrets:
- name: myappsecret
containers:
- env:
- name: JOBQUEUE
value: vae_jobqueue
- name: PORT
value: "80"
image: repo.url
name: jks
ports:
- containerPort: 80
volumeMounts:
- name: config-vol
mountPath: /etc/sys0
volumes:
- name: config-vol
configMap:
name: config
restartPolicy: Always
我还没有创建任何服务。但这是必需的吗?该 pod 将被属于同一 helm chart 的另一个 pod 访问。使用此设置,第二个 pod 尝试访问 redis 时出现错误:
2018-11-21T16:12:31.939Z - [33mwarn[39m: Error: Redis connection to redis:6379 failed - getaddrinfo ENOTFOUND redis redis:6379
at errnoException (dns.js:27:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:26)
如何确保我的 pod 能够连接到端口 6379 上的 redis pod?
----更新----
这是我的图表现在的样子:
# Source: mychartv2/templates/redis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: myapp-redis
clusterIP: None
ports:
- name: redis
port: 6379
targetPort: 6379
---
# Source: mychartv2/templates/redis-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp-redis
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-redis
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always
---
# Source: mychartv2/templates/jks-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jks
labels:
app: myapp-jks
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-jks
spec:
imagePullSecrets:
- name: jkssecret
containers:
- env:
- name: JOBQUEUE
value: jks_jobqueue
- name: PORT
value: "80"
image: repo.url
name: jks
ports:
- containerPort: 80
volumeMounts:
- name: config-vol
mountPath: /etc/sys0
volumes:
- name: config-vol
configMap:
name: jksconfig
restartPolicy: Always
注意:我使用 minikube 作为我的 kubernetes 集群
最佳答案
你需要一个 Service
访问 Redis pod。使用您当前的资源 redis:6379
根本不存在,具有 metadata.name: redis
和适当的 spec.selector
的服务将使它成为现实可用。
请注意,您发布的 2 个部署具有与 myapp
相同的 metadata.labels.app
值,因此您必须更改一个为 myapp-例如 redis
,因此该服务将针对正确的 pod(在该示例中使用 metadata.name: myapp-redis
),而不是来自您的 HTTP 应用程序的 pod。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
labels:
app: myapp
spec:
replicas: 1
template:
metadata:
labels:
app: myapp-redis
spec:
containers:
- env:
- name: REDIS_PASS
value: '**None**'
image: tutum/redis
ports:
- containerPort: 6379
name: redis
restartPolicy: Always
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
app: myapp-redis
ports:
- protocol: TCP
port: 6379
此外,您在问题中添加了标签 kubernetes-helm
,因此如果您使用的是 Helm,我强烈推荐 this stable chart : 只需使用 helm install stable/redis
安装它,您就可以使用 redis-master:6379
访问您的 Redis master 并使用 访问任何只读从属服务器>redis-slave:6379
。如果你不需要/想要奴隶,你可以避免拥有奴隶,只需通过 the configuration知道怎么做。
关于redis - Kubernetes - 无法从同一集群上的另一个 pod 连接到 redis pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416642/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!