Ale*_*oki 6 kubernetes kubernetes-pod
基本上,我有一个Deployment,它创建3个可自动缩放的容器:PHP-FPM,NGINX和包含应用程序的容器,所有这些容器都设置有机密,服务和入口。该应用程序还在PHP-FPM和NGINX之间共享该项目,因此已全部完成。
由于我想使用K8s进行更多探索,因此我决定使用Redis创建一个Pod,该Pod还可以安装永久性磁盘(但这并不重要)。我还为redis创建了一个服务,如果我通过SSH进入Redis容器并运行,则一切工作都很好redis-cli
。
有趣的是,该项目无法连接到Redis所在的Pod。我了解,各个Pod之间的容器共享相同的“本地”网络,可以使用进行访问localhost
。
如何将我的项目连接到在其他Pod中运行,可独立扩展的Redis服务器?Redis服务出了什么问题?
我的Redis服务是这样的:
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
Run Code Online (Sandbox Code Playgroud)
我的Redis Pod由部署配置文件提供支持(我不一定会对其进行扩展,但我会期待它):
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
strategy:
type: Recreate
template:
metadata:
labels:
app: redis
spec:
volumes:
- name: redis-persistent-volume
persistentVolumeClaim:
claimName: redis-pvc
containers:
- image: redis:4.0.11
command: ['redis-server']
name: redis
imagePullPolicy: Always
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-persistent-volume
mountPath: /data
Run Code Online (Sandbox Code Playgroud)
另外,当我点击时kubectl get service
,Redis服务器具有群集IP:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
nginx-service NodePort 10.100.111.16 <none> 80:30312/TCP 21h
redis-service ClusterIP 10.99.80.141 <none> 6379/TCP 6s
Run Code Online (Sandbox Code Playgroud)
小智 7
事实上,使用服务名称作为主机名是有效的。我不知道 Kubernetes 的 DNS 也能做到这一点。我之前在 Docker Composer 中使用过它,并且在我的容器化应用程序中我使用它来连接到服务(即:MySQL、Redis、Elasticsearch)。
为了澄清这一点,在我的应用程序中,我将主机名设置为服务名称,例如redis-service
. 如果我想连接到 Postgres,我可以使用pgsql-service
或任何该服务的名称。
谢谢你!
如何将我的项目连接到在其他Pod中运行,可独立扩展的Redis服务器?
您在这里有三种可能的状态:
要连接到Redis的吊舱内运行的任何其他吊舱在同一个命名空间为Redis的吊舱正在运行。在这种情况下,您将使用服务名称redis-service
并指定服务端口6379
以通过其当前的ClusterIP访问它(kube-dns正在为您进行DNS解析)。我猜您正在要求这种情况。
这只是从另一个Pod(以您的情况为例)中访问一个Pod的示例。首轮:
kubectl run -it --rm test --image=busybox --restart=Never -- sh
Run Code Online (Sandbox Code Playgroud)
这将运行新的测试容器,并sh
在该容器内进行测试。现在,如果您nslookup redis-service
在此处输入(在测试容器内),您将检查DNS在各个容器之间是否正常工作。您也可以尝试查看redis端口是否真的通过打开nc -zv redis-service 6379
。如果您的kube-dns工作正常,您应该看到该端口已打开。
从运行在相同kubernetes集群中但在不同名称空间中的任何其他Pod 内连接到Redis Pod 。在这种情况下,您将使用FQDN,该FQDN由服务名和名称空间名组成,就像文档中给出的那样。
从kubernetes集群外部连接到Redis pod 。在这种情况下,您将需要一些入口之王或类似机制的nodePort才能将redis服务公开给外界。有关更多信息,请阅读官方文档。
归档时间: |
|
查看次数: |
5711 次 |
最近记录: |