其中带有一个小型Python应用程序的Docker容器被部署到Kubernetes集群中,该集群在集群中运行着redis master
和redis slave
服务。 Docker容器内的Python应用无法通过集群连接到redis
,因为未正确配置Python应用以在网络上找到redis
。
为了使app.py
中的Python应用程序能够与在同一集群中运行的redis
成功通信,需要对以下代码进行哪些具体更改?
这里是app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
在群集中运行的redis master
和redis slave
来自公共注册表,并通过使用以下JSON运行kubectl apply -f
将它们带入群集:
Redis Master复制控制器JSON from this link.
Redis主服务JSON from this link.
Redis从站复制控制器JSON from this link.
Redis从站服务JSON from this link.
答案 0 :(得分:3)
为了使app.py中的python应用能够与同一集群中运行的redis成功通信,需要对以下代码进行哪些具体更改?
redis = Redis(host="redis-master", db=0, socket_connect_timeout=2, socket_timeout=2)
因为您安装的Service
被命名为redis-master
,尽管我在上提议的简单更改是假设 ,flask应用程序与{{ 1}} redis-master
。如果不正确,则需要将其切换为:
Service
,并将redis = Redis(host="redis-master.whatever-namespace.svc.cluster.local",
替换为实际的正确名称空间。如果您不记得或不知道,whatever-namespace
会提醒您。