如何在kubernetes内部调用redis?删除旧redis服务时出现问题

hlswsv35  于 2021-06-10  发布在  Redis
关注(0)|答案(2)|浏览(353)

以前我一直在docker上为桌面kubernetes试验这个命令

helm install my-release --set password=password bitnami/redis

我已经发出了命令 helm uninstall my-release .
现在,我正在尝试让我的todolistclient在kubernetes(docker for desktop)中与redis一起工作:

kubectl run redis --image=bitnami/redis:latest --replicas=1 --port=6379 --labels="ver=1,app=todo,env=proto" --env="REDIS_PASSWORD=password" --env="REDIS_REPLICATION_MODE=master" --env="REDIS_MASTER_PASSWORD=password"
kubectl run todolistclient --image=siegfried01/todolistclient:latest --replicas=3 --port=5000 --labels="ver=1,app=todo,env=proto"

当我查看todolistclient的日志时,我看到一个堆栈跟踪,指示它无法连接到redis服务器,并显示以下错误消息:

System.AggregateException: One or more errors occurred. (No connection is available to service this operation: EVAL; SocketFailure on my-release-redis-master.default.svc.cluster.local:6379/Subscription, origin: Error, input-buffer: 0, outstanding: 0, last-read: 0s ago, last-write: 0s ago, unanswered-write: 9760s ago, keep-alive: 60s, pending: 0, state: Connecting, last-heartbeat: never, last-mbeat: -1s ago, global: 0s ago)

这是什么 my-release-redis-master.default.svc.cluster.local ? 这个已经卸载了,我不再运行了。
我的c代码正在用连接到redis

.AddDistributedRedisCache(options => { options.InstanceName = "OIDCTokens"; options.Configuration = "redis,password=password"; })

为了确定我确实在使用上面的代码,特别是“redis”,我重新编译了我的代码并再次推送到dockerhub,我再次遇到同样的错误。
所以很明显,redis的掌舵版本中有一些东西将“redis”翻译成了“我的发行版redis master”。如何删除此项以便连接到当前的redis?
谢谢
西格弗里德

h6my8fg2

h6my8fg21#

问题是我最初更改了源代码以适应helm生成的名称: my-release-redis-master 后来把代码还原成只使用域名 redis .
混淆的原因是,即使我打算编译并部署(到kubernetes)调试版本(这是我为visualstudio设置的),visualstudio仍在继续重新编译调试版本,但部署的是带有坏域名的旧版本。
VisualStudio2019发布对话框的gui显然已损坏,不允许您在调试模式下部署(我希望我能找到发布对话框存储其设置的文件,这样我就可以用记事本更正它了)。如果我收到一个警告,表明它没有部署我的最新版本,那就太好了。
arghya sadhu的回答很有帮助,因为它让我有信心说这不是kubernetes的一些奇怪的特性导致我的域名被翻译成了赝品 my-release-redis-master .
谢谢你,阿吉亚。
所以解决方案很简单:在发布模式下重新编译并部署。
西格弗里德

f8rj6qna

f8rj6qna2#

在您正在使用的todolistclient应用程序中 my-release-redis-master.default.svc.cluster.local:6379/Subscription . 这是公开redis pod的服务的url。这是由 Helm 释放自动创建的。
如果不需要,那么您需要将todolistclient应用程序中的url更改为redis服务。您已经部署了redis,但是还没有创建任何服务来公开redis,因此您不能使用服务url连接到它,除非您创建了它。
所以你有两个选择
在todolistclient应用程序中使用redis pod ip。不建议这样做,因为pod ip在重新启动时会发生更改。
创建一个服务,然后在todolistclient应用程序中使用该服务url。

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    run: redis
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    run: redis

下面是关于如何在kubernetes上部署留言簿应用程序并连接到redis的指南。
一个建议是不要对todolistclient和redis使用相同的标签

相关问题