首页 文章

将Python应用程序连接到Kubernetes集群上的Redis

提问于
浏览
0

其中包含一个小型Python应用程序的docker容器部署到一个Kubernetes集群,该集群在集群中运行 redis masterredis 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 masterredis 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 回答

  • 2

    需要对下面的代码进行哪些具体更改才能使app.py中的python应用程序能够与在同一群集中运行的redis成功通信?

    redis = Redis(host="redis-master", db=0, socket_connect_timeout=2, socket_timeout=2)
    

    因为您安装的 Service 名为redis-master,尽管我上面提到的这个简单的更改假设烧瓶应用程序在与 redis-master Service 相同的kubernetes命名空间中运行 . 如果那不是't true, you' ll需要将其切换为:

    redis = Redis(host="redis-master.whatever-namespace.svc.cluster.local",
    

    并将 whatever-namespace 替换为实际的,正确的命名空间 . 如果您不记得或不知道, kubectl get --all-namespaces=true svc | grep redis-master 会提醒您 .

相关问题