Kubernetes内部如何调用Redis?删除旧 Redis 服务时出现问题
How to call Redis inside Kubernetes? Problems removing Old Redis service
之前我一直在 Docker 上为 Desktop Kubernetes
试验这个命令
helm install my-release --set password=password bitnami/redis
我已经发出命令helm uninstall my-release
。
现在我正在尝试让我的 todolistclient 在(Docker 用于桌面)Kubernetes 和 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 的 helm 版本还剩下一些东西,它正在将“redis”翻译成“my-release-redis-master”。如何删除它以便连接到我当前的 redis?
谢谢
齐格弗里德
在您正在使用的 todolistclient 应用程序中 my-release-redis-master.default.svc.cluster.local:6379/Subscription
。这是 service 公开 redis pod 的 url。这是由 helm release 自动创建的。
如果不需要,那么您需要将 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
这里是guide关于如何在 kubernetes 上部署留言簿应用程序并连接到 redis。
建议不要对 todolistclient 和 redis 使用相同的标签
问题是我最初更改了我的源代码以适应 helm 生成的名称:my-release-redis-master
后来恢复代码只使用域名 redis
.
混淆是因为即使我打算编译和部署(到 Kubernetes)调试版本(这是我为 Visual Studio 设置的),Visual studio 仍在继续重新编译调试版本,但部署带有错误域名的旧版本。
Visual Studio 2019 发布对话框的 GUI 显然已损坏,无法让您在调试模式下进行部署。 (我希望我能找到发布对话框存储其设置的文件,这样我就可以用记事本更正它)。如果我收到一条警告表明它没有部署我的最新版本,那就太好了。
Arghya Sadhu 的回复很有帮助,因为它让我有信心说这不是 Kubernetes 的一些奇怪功能导致我的域名被翻译成假 my-release-redis-master
。
谢谢 Arghya。
所以解决方案很简单:在发布模式下重新编译并部署。
齐格弗里德
之前我一直在 Docker 上为 Desktop Kubernetes
试验这个命令helm install my-release --set password=password bitnami/redis
我已经发出命令helm uninstall my-release
。
现在我正在尝试让我的 todolistclient 在(Docker 用于桌面)Kubernetes 和 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 的 helm 版本还剩下一些东西,它正在将“redis”翻译成“my-release-redis-master”。如何删除它以便连接到我当前的 redis?
谢谢
齐格弗里德
在您正在使用的 todolistclient 应用程序中 my-release-redis-master.default.svc.cluster.local:6379/Subscription
。这是 service 公开 redis pod 的 url。这是由 helm release 自动创建的。
如果不需要,那么您需要将 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
这里是guide关于如何在 kubernetes 上部署留言簿应用程序并连接到 redis。
建议不要对 todolistclient 和 redis 使用相同的标签
问题是我最初更改了我的源代码以适应 helm 生成的名称:my-release-redis-master
后来恢复代码只使用域名 redis
.
混淆是因为即使我打算编译和部署(到 Kubernetes)调试版本(这是我为 Visual Studio 设置的),Visual studio 仍在继续重新编译调试版本,但部署带有错误域名的旧版本。
Visual Studio 2019 发布对话框的 GUI 显然已损坏,无法让您在调试模式下进行部署。 (我希望我能找到发布对话框存储其设置的文件,这样我就可以用记事本更正它)。如果我收到一条警告表明它没有部署我的最新版本,那就太好了。
Arghya Sadhu 的回复很有帮助,因为它让我有信心说这不是 Kubernetes 的一些奇怪功能导致我的域名被翻译成假 my-release-redis-master
。
谢谢 Arghya。
所以解决方案很简单:在发布模式下重新编译并部署。
齐格弗里德