是否可以在GKE上的多个微服务上共享单个Redis服务器?

I have a redis-service running a redis server. Should I be able to store and retrieve data to that service from multiple clients on different services? I have been unsuccessful in my experiments thus far.

I have a compute-service in its own pod that dials the redis-service and stores a key/value

rClient := redis.NewClient(&redis.Options{
    Addr:     "redis-service:6379",
    Password: "", // no password set
    DB:       0,  // use default DB
})

rClient.Set("trump", "value", 0).Err()

I then have a web-service in its own pod that tries to read this value. Error returns Nil and the value is blank.

rClient := redis.NewClient(&redis.Options{
    Addr:     "redis-service:6379",
    Password: "", // no password set
    DB:       0,  // use default DB
})

val, err := rClient.Get("trump").Result()

fmt.Fprintf(w, "Print Error: %v 
", err) //prints nil

fmt.Fprintf(w, "Print Value: %s 
", val) // blank

If I set the value in the web-service then I can read the value fine. I just cant seem to set the value in a different service. As far as I know Redis stores data on the server side which would be redis-service.

Here is my redis-service deployment/service yaml files. Maybe it is the configuration?

   apiVersion: v1
kind: Service
metadata:
  name: redis-service
  labels:
    app: redis-service
    role: master
    tier: backend
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis-service


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redis-service
spec:
  selector:
    matchLabels:
      app: redis-service
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis-service
        role: master
        tier: backend
    spec:
      containers:
      - name: redis-service
        image: k8s.gcr.io/redis:e2e  # or just image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379 
dongquanjie9328
dongquanjie9328 .....拨打redis服务并保存键/值。在Web服务中,可以调用http处理程序以从redis服务中检索值。计算和Web服务都以完全相同的方式拨打redis服务。使用相同设置的mysql数据库时,我也遇到了问题。
大约 2 年之前 回复
duanqujing3863
duanqujing3863 不,它们是通过自己的ClusterIP部署在自己的Pod中的。我当前的设计模式是Web服务从Web表单中获取一个变量并将其发送到计算服务。拨号服务
大约 2 年之前 回复
drzbc6003
drzbc6003 您是否将Redis和您的应用程序部署在相同的名称空间中?
大约 2 年之前 回复
douningchang3610
douningchang3610 你是对的。我一直在进行很多更改以尝试使其正常工作。应该在Yaml中说redis-service。因此,即使进行了更改,我仍然无法在自己的计算服务中设置键/值。我将在OP中修复该问题
大约 2 年之前 回复
doujiao7520
doujiao7520 我在您的yaml文件中没有看到redis-service,请尝试仅通过redis连接到redis:6379
大约 2 年之前 回复
doutang2017
doutang2017 所以当我尝试在计算服务中设置键/值时,错误返回nil。我的猜测是它正在写入客户端缓存而不是服务器。我仍在尝试在线查找Redis是否正常工作。
大约 2 年之前 回复
doujinai2183
doujinai2183 我确定我必须在某个时候使用,但是会再次检查,显然这会告诉我是否可以从计算服务中进行设置。
大约 2 年之前 回复
dongxili9934
dongxili9934 您是否确定Set没有返回错误?
大约 2 年之前 回复

1个回答



此问题已解决。 我在我的计算服务部署yaml中将“映像提取”策略始终设置为。 我也将其端口从:9090更改为8080,以为该端口可能已在其他地方使用。 最后,我从试用版升级了我的GCP帐户。 我不确定这些问题中的哪一个解决了问题,但现在解决已使我放心。 </ p>
</ div>

展开原文

原文

This issue has been resolved. I set the Image pull policy to always in my compute-service deployment yaml. I also changed its port from :9090 to 8080 thinking the port might have been used elsewhere. Finally I upgraded my GCP account from a trial. I am not sure exactly which one of these fixed the issue but I am relieved it is resolved now.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问