其中包含一个小型Python应用程序的docker容器部署到一个Kubernetes集群,该集群在集群中运行 redis master
和 redis slave
服务 . Docker容器中的Python应用程序无法连接到群集中的 redis
,因为未正确配置Python应用程序以在网络上查找 redis
.
为了使 app.py
中的Python应用程序能够与在同一群集中运行的 redis
成功通信,需要对下面的代码进行哪些具体更改?
PYTHON APP代码
这是 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}
" \
"<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 SERVICES IN THE SAME KUBERNETES CLUSTER
群集中运行的 redis master
和 redis slave
来自公共注册表,并通过使用以下JSON运行 kubectl apply -f
进入群集:
Redis Master复制控制器JSON from this link.
Redis Master服务JSON from this link.
Redis Slave复制控制器JSON from this link.
Redis奴隶服务JSON from this link.
1 回答
因为您安装的
Service
名为redis-master,尽管我上面提到的这个简单的更改假设烧瓶应用程序在与redis-master
Service
相同的kubernetes命名空间中运行 . 如果那不是't true, you' ll需要将其切换为:并将
whatever-namespace
替换为实际的,正确的命名空间 . 如果您不记得或不知道,kubectl get --all-namespaces=true svc | grep redis-master
会提醒您 .