【问题标题】:Referencing Helm Redis master from another pod within Kubernetes从 Kubernetes 中的另一个 pod 引用 Helm Redis master
【发布时间】:2019-08-13 01:27:00
【问题描述】:

我在 Kubernetes 上通过 Helm 运行 Redis,想知道如何从我的应用程序中引用主 pod,该应用程序也在 Kubernetes 内部作为 pod 运行。 Helm 可以很好地创建 ClusterIP 服务,但我仍然不清楚我的应用程序中我总是引用 master 的内容:

MacBook-Pro ➜  api git:(master) ✗ kubectl get services
NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
ignoble-hyena-redis-master     ClusterIP   10.100.187.188   <none>        6379/TCP         5h21m
ignoble-hyena-redis-slave      ClusterIP   10.100.236.164   <none>        6379/TCP         5h21m
MacBook-Pro ➜  api git:(master) ✗ kubectl describe service ignoble-hyena-redis-master
Name:              ignoble-hyena-redis-master
Namespace:         default
Labels:            app=redis
                   chart=redis-9.0.1
                   heritage=Tiller
                   release=ignoble-hyena
Annotations:       <none>
Selector:          app=redis,release=ignoble-hyena,role=master
Type:              ClusterIP
IP:                10.100.187.188
Port:              redis  6379/TCP
TargetPort:        redis/TCP
Endpoints:         192.168.34.46:6379
Session Affinity:  None
Events:            <none>

我是否使用:redis://my-password@ignoble-hyena-redis-master:6379。这似乎很脆弱,因为每次我重新部署 Helm 图表时 pod 名称都会发生变化。在 Kubernetes 集群中处理内部服务发现的推荐方法是什么?

【问题讨论】:

    标签: kubernetes redis kubernetes-helm


    【解决方案1】:

    你应该package your application as a Helm chart。这基本上涉及运行helm create,然后将您现有的部署YAML 复制到templates 目录中。 Charts can have dependencies 这样您就可以声明您的应用程序需要 Redis。使用standard Helm charts repository 中的版本,您可以这样说

    # I am requirements.yaml
    - name: redis
      version: ~9.0.2
      repository: https://kubernetes-charts.storage.googleapis.com
    

    这里的重要细节是,您的应用程序和它的 Redis 将具有相同的 Helm 版本名称——如果您的应用程序是 ignoble-hyena-myapp,那么它的 Redis 将是 ignoble-hyena-redis-master。您可以使用模板在部署 YAML 规范中进行设置

    env:
      - name: REDIS_HOST
        value: {{ .Release.Name }}-redis-master
    

    由于 Kubernetes 内部的工作方式,即使您 helm upgrade 将您的图表添加到更新的图像标签,它通常也不会触及 Redis。 Helm 将上传新版本的 Redis 工件,看起来与旧版本完全相同,Kubernetes 不会采取任何行动。

    【讨论】:

      【解决方案2】:

      我找不到有据可查的文档,但是按照模板代码,您应该能够将fullnameOverride value 设置为您控制的某个字符串,并且redis master 将显示为&lt;yourFullname&gt;-master,您可以拥有您的客户通过它到达它。如果您的客户在不同的命名空间中,他们可以通过&lt;yourFullname&gt;-master.&lt;redisMasterServiceNamespace&gt; 联系到主人。

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 1970-01-01
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2023-04-07
        • 2023-04-03
        相关资源
        最近更新 更多