从Kubernetes中的另一个Pod引用Helm Redis主文件

时间:2019-08-13 01:27:00

标签: kubernetes redis kubernetes-helm

我正在Kubernetes上通过Helm运行Redis,想知道如何从我的应用程序引用主Pod,该应用程序也作为Kubernetes在Pod中运行。 Helm足以创建ClusterIP服务,但是我仍然不清楚我的应用程序中始终引用主服务器的内容:

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图表时,吊舱名称都会更改,这似乎很脆弱。在Kubernetes集群中处理内部服务发现的推荐方法是什么?

2 个答案:

答案 0 :(得分: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将不采取任何行动。

答案 1 :(得分:0)

我找不到详细记录的文件,但是按照模板代码,您应该可以将fullnameOverride value设置为您控制的某个字符串,并且redis主文件将显示为<yourFullname>-master,并且您可以让客户通过它达到目标。如果您的客户位于其他命名空间中,则可以通过<yourFullname>-master.<redisMasterServiceNamespace>与主服务器联系。