关于k8s:K8S使用Helm安装RabbitMQ和Redis的总结

5次阅读

共计 2705 个字符,预计需要花费 7 分钟才能阅读完成。

前言

记得去年 2021 上半年的时候自学了 k8s 并且应用 helm 装置了 rabbitmq 和 redis,能够在开发、测试和生产环境上用起来,然而下半年之后就没有用,再拾起来的时候发现好多知识点都忘了,这篇文章就是总结应用 helm 装置 rabbmitmq 和 redis 的集体总结分享给大家。

总结

1、将服务裸露给内部客户端

第一种通过 service 类型裸露:

这里先理解下 service 的几种类型:

Clusterip:默认类型,主动调配一个仅 Cluster 外部能够拜访的 虚构 IP,个别用作集群外部负载平衡。

NodePort(service 向外裸露):在 ClusterIP 根底上为 Service 在每台机器上绑定一个映射端口,外网客户端能够通过 NodeIP,Nodeport 拜访。

LoadBalancer(service 向外裸露):在 NodePort 根底上,借助 cloud provider 创立一个内部负载均衡器,并将申请转发到 NodeIP 和 NodePort

ExternalName:把集群内部的服务引入到集群外部来,在集群外部间接应用。没有任何类型代理被创立,只有 1.7 之后版本的 kube-dns 反对。

所以能够设置 service 为 NodePort 或者 LoadBalancer 来对外裸露服务

第二种通过 ingress 裸露:
此外 externalIPs 也能够使各类 service 对外提供服务,然而当集群服务很多的时候,NodePort 形式最大的毛病是会占用很多集群机器的端口;LB 形式最大的毛病则是每个 service 一个 LB 又有点节约和麻烦,并且须要 k8s 之外的反对;而 ingress 则只须要一个 NodePort 或者一个 LB 就能够满足所有 service 对外服务的需要。

2、不同环境下 rabbitmq 或者 redis 拜访形式不同

例如:开发环境和测试环境下 rabbitmq 拜访都不同,首先讲测试环境,个别咱们测试环境都会有台测试服务器,咱们只有把 rabbitmq 和前台及后盾的 pod 放到同一个集群内,这样咱们能够通过 k8s 的集群域名形式来拜访,如上面:

test-redis-master.redis.svc.cluster.local
test-rabbitmq.rabbitmq.svc.cluster.local

这个域名如何失去呢?能够通过装置 dnsutils 来解析:

kubectl run dnsutils --image=tutum/dnsutils --generator=run-pod/v1 --command -- sleep infinity
kubectl exec dnsutils -- nslookup test-rabbmit-headless.rabbitmq                                                                                                                     130 ↵
Server:        172.21.0.10
Address:    172.21.0.10#53

Name:    nacos-headless.default.svc.cluster.local
Address: 172.20.0.119

然而,开发环境则不同,因为开发环境的代码在咱们本地机器下面,所以你不能应用下面的集群域名来拜访,那么如何做到本地机器拜访 rabbitmq 和 redis 服务呢,答案就在下面的总结外面,咱们能够通过下面的三种形式来裸露 rabbitmq 和 redis,哪三种呢?以及开发环境应该选取哪种?

1、NodePort
2、LoadBalancer
3、Ingress

这里我只会对开发环境来谈,既然是开发环境,咱们则用最小的代价来实现工作,咱们首选是 NodePort,因为 rabbitmq 和 redis 咱们应用的是 StatefulSet 有状态形式来部署,那么显然 IP 也是固定的,咱们只有通过节点 IP+PORT 形式来拜访即可,节点 IP 能够通过观察 pod 或者 service 第三方服务商的后盾管理系统即可看到,当然你也能够通过命令查看。

3、Helm 删除服务

间接在第三方服务商的控制台操作即可,留神连同 PVC 也一起删除了。

4、什么是无头服务(Headless Services)?

有时不须要或不想要负载平衡,以及独自的 Service IP。遇到这种状况,能够通过指定 Cluster IP(spec.clusterIP)的值为 “None” 来创立 Headless Service。

留神:

1、同 Service 下的 pod 能够间接依据 PodIP 互相通信
不同 Service 下的 pod 在集群间 pod 通信要借助于 cluster ip
Service 的 IP 地址,此为虚构 IP 地址。内部网络无奈 ping 通,只有 kubernetes 集群外部拜访应用。

2、dnsutils 指定命名空间的查问:

kubectl exec -i -t dnsutils -- nslookup <service-name>.<namespace>

3、在开发环境下 Service 类型设置成 NodePort 后,要找到正确的对应端口和 IP,否则拜访失败,如:拜访 rabbitmq

NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                         AGE
service/test-rabbitmq            NodePort    172.21.10.248   <none>        5672:31469/TCP,4369:32745/TCP,25672:32057/TCP,15672:31961/TCP   183d
service/test-rabbitmq-headless   ClusterIP   None            <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP                           183d

因为 rabbitmq 的图形界面是 15672 对应的端口,所以应该是:31961。

NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/test-redis-headless   ClusterIP   None           <none>        6379/TCP         5h58m
service/test-redis-master     NodePort    172.21.5.38    <none>        6379:30554/TCP   5h58m
service/test-redis-replicas   NodePort    172.21.9.204   <none>        6379:32709/TCP   5h58m

Redis 同理,6379 对外的端口应该是:30554。当然 redis 没有图形界面。

遗留问题

rabbitmq 通过 ingress 形式对外裸露之后集群内域名拜访没有问题,然而通过对外实在域名拜访 UI 图形界面的时候始终拜访不上,所以前面我选用了 NodePort 和 LoadBalancer 形式来对外裸露,如果有哪位大佬晓得能够通知我一下。

援用:

k8s 对外服务之 ingress

正文完
 0