簡體   English   中英

將 Python 應用程序連接到 Kubernetes 集群上的 Redis

[英]Connect Python app to Redis on Kubernetes cluster

一個內部帶有一個小型 Python 應用程序的 docker 容器被部署到一個 Kubernetes 集群,該集群具有一個redis master服務器和一個在集群中運行的redis 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來自公共注冊中心,通過運行kubectl apply -f和以下 JSON 將其帶入集群:

來自此鏈接的 Redis 主復制控制器 JSON。
來自此鏈接的 Redis Master 服務 JSON。
來自此鏈接的 Redis 從屬復制控制器 JSON。
來自此鏈接的 Redis Slave 服務 JSON。

為了讓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 命名空間中運行。 如果這不是真的,您需要將其切換為:

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

並將whatever-namespace替換為實際的、正確的命名空間。 如果你不記得或不知道, kubectl get --all-namespaces=true svc | grep redis-master kubectl get --all-namespaces=true svc | grep redis-master會提醒你。

如果 redis-master 的服務位於燒瓶應用程序部署或 pod 的同一命名空間中,則使用此 redis-master 作為 env 變量在燒瓶應用程序的部署文件中,如果不是相同的命名空間,則使用 redis-master.whatever-namespace。 svc.cluster.local 但確定在對您的應用進行 dockerizing 時使用 .env 文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM