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

时间:2018-07-13 19:30:21

标签: python docker redis kubernetes

其中带有一个小型Python应用程序的Docker容器被部署到Kubernetes集群中,该集群在集群中运行着redis masterredis slave服务。 Docker容器内的Python应用无法通过集群连接到redis,因为未正确配置Python应用以在网络上找到redis

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

PYTHON应用代码

这里是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)


相同KUBERNETES集群中的Redis服务

在群集中运行的redis masterredis 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.

1 个答案:

答案 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会提醒您。