Use*_*984 19 kubernetes kubernetes-pod
对于一个 POD,已创建三张图像。这里的问题是同一 Pod 中的容器之间没有通信。我的应用程序应该如何与这三个容器连接?
我的 Pod 有以下容器。
[dev-application dev-app-nginx dev-app-redis]
Run Code Online (Sandbox Code Playgroud)
在这里我可以看到只有rails正在运行,但是redis和nginx没有运行。因为 Redis 和 nix 在同一个 pod 中作为不同的容器运行。
kubectl exec -ti test-deployment-5f59864c8b-mv4kk sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulting container name to dev-application.
Use 'kubectl describe pod/test-deployment-5f59864c8b-mv4kk -n dev-app' to see all of the containers in this pod.
# rails -v
Rails 4.2.11.3
# redis -v
sh: 2: redis: not found
# nginx -v
sh: 3: nginx: not found
#
Run Code Online (Sandbox Code Playgroud)
在我正在使用的 yam 文件下面
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: dev-app
name: test-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: Dev-app
spec:
nodeSelector:
cloud.io/sec-zone-green: "true"
containers:
- name: dev-application
image: hub.docker.net/appautomation/dev.app.1.0:latest
command: ["/bin/sh"]
args: ["-c", "while true; do echo test; sleep 20;done"]
resources:
limits:
memory: 8Gi
cpu: 5
requests:
memory: 8Gi
cpu: 5
ports:
- containerPort: 3000
- name: dev-app-nginx
image: hub.docker.net/appautomation/dev.nginx.1.0:latest
resources:
limits:
memory: 4Gi
cpu: 4
requests:
memory: 4Gi
cpu: 4
ports:
- containerPort: 80
- name: dev-app-redis
image: hub.docker.net/appautomation/dev.redis.1.0:latest
resources:
limits:
memory: 4Gi
cpu: 4
requests:
memory: 4Gi
cpu: 4
ports:
- containerPort: 6379
Run Code Online (Sandbox Code Playgroud)
乔纳斯是对的,但我想稍微扩展一下这个话题。
\n让我们讨论容器在 Kubernetes 中可以使用的两种相互通信方法:
\n\n\nPod 中的容器共享相同的 IPC 命名空间,这意味着它们还可以使用标准进程间通信(例如SystemV 信号量或POSIX 共享内存)\n相互通信。容器使用 localhost 主机名策略在 Pod 内\n进行通信。
\n
Pod 中的容器可通过 \xe2\x80\x9clocalhost\xe2\x80\x9d 访问;他们使用相同的网络命名空间。另外,对于容器来说,可观察的主机名是 Pod\xe2\x80\x99s 名称。由于容器共享相同的 IP 地址和端口空间,因此您应该在容器中使用不同的端口来进行传入连接。换句话说,Pod 中的应用程序必须协调它们对端口的使用。因此,每个容器都可以作为本地主机上的不同端口访问 Pod 中的其他容器。
\n\n\n在 Kubernetes 中,您可以使用共享 Kubernetes Volume 作为在 Pod 中的容器之间共享数据的简单而高效的方式。对于大多数情况,使用主机上与 Pod 中的所有容器共享的目录就足够了。
\n
如果您想更多地探索第二种方法,我建议您阅读官方指南:使用共享卷在同一 Pod 中的容器之间进行通信:
\n\n\n本页展示如何使用卷在同一 Pod 中运行的两个\n容器之间进行通信。
\n
此外,您还可以在下面找到完整的源文章,其中包含更多详细信息和示例:
\n\n| 归档时间: |
|
| 查看次数: |
16278 次 |
| 最近记录: |