前言
最近在应用k8s搭建微服务时,发现须要手动批改yaml文件外面的pod name、pod image、svc name、ingress tls等等,十分麻烦,然而有了helm之后状况就不一样了,helm是k8s的包管理器,相似ubuntu的apt-get,centos的yum一样,有了helm安装包就十分不便了,上面就解说通过helm来装置rabbitmq。
筹备工作
- 装置k8s
我应用的是阿里云的ACK k8s服务。 - 装置k8s客户端:kubectl
kubectl装置地址 - 装置helm客户端
装置helm 配置helm repo源
上面是我增加的三个源:stable、bitnami和alihelm repo add stable https://charts.helm.sh/stablehelm repo add bitnami https://charts.helm.sh/stablehelm repo add ali https://charts.helm.sh/stable
查看曾经装置好的repo源
$ helm repo list NAME URLstable https://charts.helm.sh/stablebitnami https://charts.bitnami.com/bitnamiali https://apphub.aliyuncs.com/stable/
rabbitmq装置形式
装置rabbitmq办法有很多上面列举几个惯例装置办法:
- centos 7/8装置rabbitmq阿里云ECS CentOS提供装置
- k8s装置rabbitmq官网文档提供装置
- helm装置rabbitmq社区大佬提供装置
helm装置rabbitmq
这里咱们应用helm来装置rabbitmq,首先咱们看看helm外面有没有rabbitmq的chart,
$ helm search repo rabbitmqNAME CHART VERSION APP VERSION DESCRIPTIONali/prometheus-rabbitmq-exporter 0.5.5 v0.29.0 Rabbitmq metrics exporter for prometheusali/rabbitmq 6.18.2 3.8.2 DEPRECATED Open source message broker software ...ali/rabbitmq-ha 1.47.0 3.8.7 Highly available RabbitMQ cluster, the open sou...bitnami/rabbitmq 8.16.1 3.8.18 Open source message broker software that implem...stable/prometheus-rabbitmq-exporter 0.5.6 v0.29.0 DEPRECATED Rabbitmq metrics exporter for promet...stable/rabbitmq 6.18.2 3.8.2 DEPRECATED Open source message broker software ...stable/rabbitmq-ha 1.47.1 3.8.7 DEPRECATED - Highly available RabbitMQ cluster,...
能够看到不同的repo源提供的rabbitmq的chart的版本也不同,咱们选用的是stable/rabbitmq,chart版本:6.18.2,APP版本:3.8.2。
接着,咱们要把stable/rabbitmq的chart文件下载下来,下载下来的chart文件是.tgz的压缩文件,解压一下即可,
helm pull stable/rabbitmqtar zxf rabbitmq-6.18.2.tgz
$ cd rabbitmq && ls -lstotal 168 8 -rwxr-xr-x 1 zhangwei staff 435 1 1 1970 Chart.yaml72 -rwxr-xr-x 1 zhangwei staff 34706 1 1 1970 README.md 0 drwxr-xr-x 5 zhangwei staff 160 6 30 14:43 ci 0 drwxr-xr-x 19 zhangwei staff 608 6 30 14:43 templates40 -rwxr-xr-x 1 zhangwei staff 19401 1 1 1970 values-production.yaml 8 -rwxr-xr-x 1 zhangwei staff 2854 1 1 1970 values.schema.json40 -rwxr-xr-x 1 zhangwei staff 18986 1 1 1970 values.yaml
而后,咱们查看一下values.yaml对外提供的可用参数,也能够通过命令查看:
helm show values stable/rabbitmq
values.yaml
## Global Docker image parameters## Please, note that this will override the image parameters, including dependencies, configured to use the global value## Current available global Docker image parameters: imageRegistry and imagePullSecrets### global:# imageRegistry: myRegistryName# imagePullSecrets:# - myRegistryKeySecretName# storageClass: myStorageClass## Bitnami RabbitMQ image version## ref: https://hub.docker.com/r/bitnami/rabbitmq/tags/##image: registry: docker.io repository: bitnami/rabbitmq tag: 3.8.2-debian-10-r30 ## set to true if you would like to see extra information on logs ## it turns BASH and NAMI debugging in minideb ## ref: https://github.com/bitnami/minideb-extras/#turn-on-bash-debugging debug: false ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName## String to partially override rabbitmq.fullname template (will maintain the release name)### nameOverride:## String to fully override rabbitmq.fullname template### fullnameOverride:## Use an alternate scheduler, e.g. "stork".## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/### schedulerName:## does your cluster have rbac enabled? assume yes by defaultrbacEnabled: true## RabbitMQ should be initialized one by one when building cluster for the first time.## Therefore, the default value of podManagementPolicy is 'OrderedReady'## Once the RabbitMQ participates in the cluster, it waits for a response from another## RabbitMQ in the same cluster at reboot, except the last RabbitMQ of the same cluster.## If the cluster exits gracefully, you do not need to change the podManagementPolicy## because the first RabbitMQ of the statefulset always will be last of the cluster.## However if the last RabbitMQ of the cluster is not the first RabbitMQ due to a failure,## you must change podManagementPolicy to 'Parallel'.## ref : https://www.rabbitmq.com/clustering.html#restarting##podManagementPolicy: OrderedReady## section of specific values for rabbitmqrabbitmq: ## RabbitMQ application username ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## username: user ## RabbitMQ application password ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## # password: # existingPasswordSecret: name-of-existing-secret ## Erlang cookie to determine whether different nodes are allowed to communicate with each other ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## # erlangCookie: # existingErlangSecret: name-of-existing-secret ## Node name to cluster with. e.g.: `clusternode@hostname` ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## # rabbitmqClusterNodeName: ## Value for the RABBITMQ_LOGS environment variable ## ref: https://www.rabbitmq.com/logging.html#log-file-location ## logs: '-' ## RabbitMQ Max File Descriptors ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## ref: https://www.rabbitmq.com/install-debian.html#kernel-resource-limits ## setUlimitNofiles: true ulimitNofiles: '65536' ## RabbitMQ maximum available scheduler threads and online scheduler threads ## ref: https://hamidreza-s.github.io/erlang/scheduling/real-time/preemptive/migration/2016/02/09/erlang-scheduler-details.html#scheduler-threads ## maxAvailableSchedulers: 2 onlineSchedulers: 1 ## Plugins to enable plugins: "rabbitmq_management rabbitmq_peer_discovery_k8s" ## Extra plugins to enable ## Use this instead of `plugins` to add new plugins extraPlugins: "rabbitmq_auth_backend_ldap" ## Clustering settings clustering: address_type: hostname k8s_domain: cluster.local ## Rebalance master for queues in cluster when new replica is created ## ref: https://www.rabbitmq.com/rabbitmq-queues.8.html#rebalance rebalance: false loadDefinition: enabled: false secretName: load-definition ## environment variables to configure rabbitmq ## ref: https://www.rabbitmq.com/configure.html#customise-environment env: {} ## Configuration file content: required cluster configuration ## Do not override unless you know what you are doing. To add more configuration, use `extraConfiguration` of `advancedConfiguration` instead configuration: |- ## Clustering cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = kubernetes.default.svc.cluster.local cluster_formation.node_cleanup.interval = 10 cluster_formation.node_cleanup.only_log_warning = true cluster_partition_handling = autoheal # queue master locator queue_master_locator=min-masters # enable guest user loopback_users.guest = false ## Configuration file content: extra configuration ## Use this instead of `configuration` to add more configuration extraConfiguration: |- #disk_free_limit.absolute = 50MB #management.load_definitions = /app/load_definition.json ## Configuration file content: advanced configuration ## Use this as additional configuraton in classic config format (Erlang term configuration format) ## ## If you set LDAP with TLS/SSL enabled and you are using self-signed certificates, uncomment these lines. ## advancedConfiguration: |- ## [{ ## rabbitmq_auth_backend_ldap, ## [{ ## ssl_options, ## [{ ## verify, verify_none ## }, { ## fail_if_no_peer_cert, ## false ## }] ## ]} ## }]. ## advancedConfiguration: |- ## Enable encryption to rabbitmq ## ref: https://www.rabbitmq.com/ssl.html ## tls: enabled: false failIfNoPeerCert: true sslOptionsVerify: verify_peer caCertificate: |- serverCertificate: |- serverKey: |- # existingSecret: name-of-existing-secret-to-rabbitmq## LDAP configuration##ldap: enabled: false server: "" port: "389" user_dn_pattern: cn=${username},dc=example,dc=org tls: # If you enabled TLS/SSL you can set advaced options using the advancedConfiguration parameter. enabled: false## Kubernetes service typeservice: type: ClusterIP ## Node port ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## # nodePort: 30672 ## Set the LoadBalancerIP ## # loadBalancerIP: ## Node port Tls ## # nodeTlsPort: 30671 ## Amqp port ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## port: 5672 ## Amqp Tls port ## tlsPort: 5671 ## Dist port ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## distPort: 25672 ## RabbitMQ Manager port ## ref: https://github.com/bitnami/bitnami-docker-rabbitmq#environment-variables ## managerPort: 15672 ## Service annotations annotations: {} # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 ## Load Balancer sources ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service ## # loadBalancerSourceRanges: # - 10.10.10.0/24 ## Extra ports to expose # extraPorts: ## Extra ports to be included in container spec, primarily informational # extraContainerPorts:# Additional pod labels to applypodLabels: {}## Pod Security Context## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/##securityContext: enabled: true fsGroup: 1001 runAsUser: 1001 extra: {}persistence: ## this enables PVC templates that will create one per pod enabled: true ## rabbitmq data Persistent Volume Storage Class ## If defined, storageClassName: <storageClass> ## If set to "-", storageClassName: "", which disables dynamic provisioning ## If undefined (the default) or set to null, no storageClassName spec is ## set, choosing the default provisioner. (gp2 on AWS, standard on ## GKE, AWS & OpenStack) ## # storageClass: "-" accessMode: ReadWriteOnce ## Existing PersistentVolumeClaims ## The value is evaluated as a template ## So, for example, the name can depend on .Release or .Chart # existingClaim: "" # If you change this value, you might have to adjust `rabbitmq.diskFreeLimit` as well. size: 8Gi # persistence directory, maps to the rabbitmq data directory path: /opt/bitnami/rabbitmq/var/lib/rabbitmq## Configure resource requests and limits## ref: http://kubernetes.io/docs/user-guide/compute-resources/##resources: {}networkPolicy: ## Enable creation of NetworkPolicy resources. Only Ingress traffic is filtered for now. ## ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/ ## enabled: false ## The Policy model to apply. When set to false, only pods with the correct ## client label will have network access to the ports RabbitMQ is listening ## on. When true, RabbitMQ will accept connections from any source ## (with the correct destination port). ## allowExternal: true ## Additional NetworkPolicy Ingress "from" rules to set. Note that all rules are OR-ed. ## # additionalRules: # - matchLabels: # - role: frontend # - matchExpressions: # - key: role # operator: In # values: # - frontend## Replica count, set to 1 to provide a default available clusterreplicas: 1## Pod priority## https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/# priorityClassName: ""## updateStrategy for RabbitMQ statefulset## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategiesupdateStrategy: type: RollingUpdate## Node labels and tolerations for pod assignment## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-featurenodeSelector: {}tolerations: []affinity: {}podDisruptionBudget: {} # maxUnavailable: 1 # minAvailable: 1## annotations for rabbitmq podspodAnnotations: {}## Configure the ingress resource that allows you to access the## Wordpress installation. Set up the URL## ref: http://kubernetes.io/docs/user-guide/ingress/##ingress: ## Set to true to enable ingress record generation enabled: false ## The list of hostnames to be covered with this ingress record. ## Most likely this will be just one host, but in the event more hosts are needed, this is an array ## hostName: foo.bar.com path: / ## Set this to true in order to enable TLS on the ingress record ## A side effect of this will be that the backend wordpress service will be connected at port 443 tls: false ## If TLS is set to true, you must declare what secret will store the key/certificate for TLS tlsSecret: myTlsSecret ## Ingress annotations done as key:value pairs ## If you're using kube-lego, you will want to add: ## kubernetes.io/tls-acme: true ## ## For a full list of possible ingress annotations, please see ## ref: https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md ## ## If tls is set to true, annotation ingress.kubernetes.io/secure-backends: "true" will automatically be set annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: true## The following settings are to configure the frequency of the lifeness and readiness probeslivenessProbe: enabled: true initialDelaySeconds: 120 timeoutSeconds: 20 periodSeconds: 30 failureThreshold: 6 successThreshold: 1readinessProbe: enabled: true initialDelaySeconds: 10 timeoutSeconds: 20 periodSeconds: 30 failureThreshold: 3 successThreshold: 1metrics: enabled: false image: registry: docker.io repository: bitnami/rabbitmq-exporter tag: 0.29.0-debian-10-r28 pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName ## environment variables to configure rabbitmq_exporter ## ref: https://github.com/kbudde/rabbitmq_exporter#configuration env: {} ## Metrics exporter port port: 9419 ## RabbitMQ address to connect to (from the same Pod, usually the local loopback address). ## If your Kubernetes cluster does not support IPv6, you can change to `127.0.0.1` in order to force IPv4. ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#networking rabbitmqAddress: localhost ## Comma-separated list of extended scraping capabilities supported by the target RabbitMQ server ## ref: https://github.com/kbudde/rabbitmq_exporter#extended-rabbitmq-capabilities capabilities: "bert,no_sort" resources: {} annotations: prometheus.io/scrape: "true" prometheus.io/port: "9419" livenessProbe: enabled: true initialDelaySeconds: 15 timeoutSeconds: 5 periodSeconds: 30 failureThreshold: 6 successThreshold: 1 readinessProbe: enabled: true initialDelaySeconds: 5 timeoutSeconds: 5 periodSeconds: 30 failureThreshold: 3 successThreshold: 1 ## Prometheus Service Monitor ## ref: https://github.com/coreos/prometheus-operator ## https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint serviceMonitor: ## If the operator is installed in your cluster, set to true to create a Service Monitor Entry enabled: false ## Specify the namespace in which the serviceMonitor resource will be created # namespace: "" ## Specify the interval at which metrics should be scraped interval: 30s ## Specify the timeout after which the scrape is ended # scrapeTimeout: 30s ## Specify Metric Relabellings to add to the scrape endpoint # relabellings: ## Specify honorLabels parameter to add the scrape endpoint honorLabels: false ## Specify the release for ServiceMonitor. Sometimes it should be custom for prometheus operator to work # release: "" ## Used to pass Labels that are used by the Prometheus installed in your cluster to select Service Monitors to work with ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec additionalLabels: {} ## Custom PrometheusRule to be defined ## The value is evaluated as a template, so, for example, the value can depend on .Release or .Chart ## ref: https://github.com/coreos/prometheus-operator#customresourcedefinitions prometheusRule: enabled: false additionalLabels: {} namespace: "" rules: [] ## List of reules, used as template by Helm. ## These are just examples rules inspired from https://awesome-prometheus-alerts.grep.to/rules.html ## Please adapt them to your needs. ## Make sure to constraint the rules to the current rabbitmq service. ## Also make sure to escape what looks like helm template. # - alert: RabbitmqDown # expr: rabbitmq_up{service="{{ template "rabbitmq.fullname" . }}"} == 0 # for: 5m # labels: # severity: error # annotations: # summary: Rabbitmq down (instance {{ "{{ $labels.instance }}" }}) # description: RabbitMQ node down # - alert: ClusterDown # expr: | # sum(rabbitmq_running{service="{{ template "rabbitmq.fullname" . }}"}) # < {{ .Values.replicas }} # for: 5m # labels: # severity: error # annotations: # summary: Cluster down (instance {{ "{{ $labels.instance }}" }}) # description: | # Less than {{ .Values.replicas }} nodes running in RabbitMQ cluster # VALUE = {{ "{{ $value }}" }} # - alert: ClusterPartition # expr: rabbitmq_partitions{service="{{ template "rabbitmq.fullname" . }}"} > 0 # for: 5m # labels: # severity: error # annotations: # summary: Cluster partition (instance {{ "{{ $labels.instance }}" }}) # description: | # Cluster partition # VALUE = {{ "{{ $value }}" }} # - alert: OutOfMemory # expr: | # rabbitmq_node_mem_used{service="{{ template "rabbitmq.fullname" . }}"} # / rabbitmq_node_mem_limit{service="{{ template "rabbitmq.fullname" . }}"} # * 100 > 90 # for: 5m # labels: # severity: warning # annotations: # summary: Out of memory (instance {{ "{{ $labels.instance }}" }}) # description: | # Memory available for RabbmitMQ is low (< 10%)\n VALUE = {{ "{{ $value }}" }} # LABELS: {{ "{{ $labels }}" }} # - alert: TooManyConnections # expr: rabbitmq_connectionsTotal{service="{{ template "rabbitmq.fullname" . }}"} > 1000 # for: 5m # labels: # severity: warning # annotations: # summary: Too many connections (instance {{ "{{ $labels.instance }}" }}) # description: | # RabbitMQ instance has too many connections (> 1000) # VALUE = {{ "{{ $value }}" }}\n LABELS: {{ "{{ $labels }}" }}#### Init containers parameters:## volumePermissions: Change the owner of the persist volume mountpoint to RunAsUser:fsGroup##volumePermissions: enabled: false image: registry: docker.io repository: bitnami/minideb tag: buster pullPolicy: Always ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName resources: {}## forceBoot: executes 'rabbitmqctl force_boot' to force boot cluster shut down unexpectedly in an## unknown order.## ref: https://www.rabbitmq.com/rabbitmqctl.8.html#force_boot##forceBoot: enabled: false## Optionally specify extra secrets to be created by the chart.## This can be useful when combined with load_definitions to automatically create the secret containing the definitions to be loaded.##extraSecrets: {} # load-definition: # load_definition.json: | # { # ... # }
values.yaml文件是helm chart对外公开的配置信息,可依据须要自行批改,因为咱们应用的是阿里云,所以存储应用alicloud-disk-ssd,留神alicloud-disk-ssd最低要求ssd为20G:
storageClass: "alicloud-disk-ssd"size: 20Gi
因为咱们要通过域名拜访所以要启用ingress及域名配置:
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx hostName: rabbitmq.baidu.com
最初就是要通过https拜访,咱们要启用tls:
tls: truetlsSecret: tls-secret-name
这里咱们留神一下,因为我应用的是cert-manager.io/cluster-issuer注解(我曾经在k8s中曾经生成了),所以能够间接生成了tls证书,十分不便,感兴趣的能够看看应用cert-manager申请收费的HTTPS证书
annotations: cert-manager.io/cluster-issuer: your-cert-manager-name
最终残缺的values.yaml文件如下:
values.yaml
ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: your-cert-manager-name nginx.ingress.kubernetes.io/force-ssl-redirect: 'true' hostName: rabbitmq.baidu.com tls: true tlsSecret: tls-secret-namepersistence: storageClass: "alicloud-disk-ssd" size: 20Gi
当初咱们来装置rabbitmq,通过上面命令运行:
# 创立rabbit命名空间kubectl create namespace rabbit# 创立rabbitmq集群helm install -f values.yaml test-rabbitmq stable/rabbitmq --namespace rabbit
上面是装置时的输入:
WARNING: This chart is deprecatedNAME: test-rabbitmqLAST DEPLOYED: Fri Jul 2 09:56:10 2021NAMESPACE: rabbitSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:This Helm chart is deprecatedGiven the `stable` deprecation timeline (https://github.com/helm/charts#deprecation-timeline), the Bitnami maintained RabbitMQ Helm chart is now located at bitnami/charts (https://github.com/bitnami/charts/).The Bitnami repository is already included in the Hubs and we will continue providing the same cadence of updates, support, etc that we've been keeping here these years. Installation instructions are very similar, just adding the _bitnami_ repo and using it during the installation (`bitnami/<chart>` instead of `stable/<chart>`)
$ helm repo add bitnami https://charts.bitnami.com/bi...
$ helm install my-release bitnami/<chart> # Helm 3
$ helm install --name my-release bitnami/<chart> # Helm 2
To update an exisiting _stable_ deployment with a chart hosted in the bitnami repository you can execute
$ helm upgrade my-release bitnami/<chart>
Issues and PRs related to the chart itself will be redirected to `bitnami/charts` GitHub repository. In the same way, we'll be happy to answer questions related to this migration process in this issue (https://github.com/helm/charts/issues/20969) created as a common place for discussion.** Please be patient while the chart is being deployed **Credentials: Username : user echo "Password : $(kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)" echo "ErLang Cookie : $(kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode)"RabbitMQ can be accessed within the cluster on port at test-rabbitmq.rabbit.svc.cluster.localTo access for outside the cluster, perform the following steps:To Access the RabbitMQ AMQP port: kubectl port-forward --namespace rabbit svc/test-rabbitmq 5672:5672 echo "URL : amqp://127.0.0.1:5672/"To Access the RabbitMQ Management interface: kubectl port-forward --namespace rabbit svc/test-rabbitmq 15672:15672 echo "URL : http://127.0.0.1:15672/"╭─zhangwei@zhangweideMacBook-Pro-2 ~/Workspace/com.awbeci/Seaurl/service/seaurl-parent/helm/rabbitmq ‹test*› ╰─$ kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decodeBnbcuwyupZ% ╭─zhangwei@zhangweideMacBook-Pro-2 ~/Workspace/com.awbeci/Seaurl/service/seaurl-parent/helm/rabbitmq ‹test*› ╰─$ kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decodeError from server (NotFound): secrets "test-rabbitmq" not found╭─zhangwei@zhangweideMacBook-Pro-2 ~/Workspace/com.awbeci/Seaurl/service/seaurl-parent/helm/rabbitmq ‹test*› ╰─$ helm install -f values.yaml test-rabbitmq stable/rabbitmq --namespace rabbit WARNING: This chart is deprecatedNAME: test-rabbitmqLAST DEPLOYED: Fri Jul 2 10:16:36 2021NAMESPACE: rabbitSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:This Helm chart is deprecatedGiven the `stable` deprecation timeline (https://github.com/helm/charts#deprecation-timeline), the Bitnami maintained RabbitMQ Helm chart is now located at bitnami/charts (https://github.com/bitnami/charts/).The Bitnami repository is already included in the Hubs and we will continue providing the same cadence of updates, support, etc that we've been keeping here these years. Installation instructions are very similar, just adding the _bitnami_ repo and using it during the installation (`bitnami/<chart>` instead of `stable/<chart>`)
$ helm repo add bitnami https://charts.bitnami.com/bi...
$ helm install my-release bitnami/<chart> # Helm 3
$ helm install --name my-release bitnami/<chart> # Helm 2
To update an exisiting _stable_ deployment with a chart hosted in the bitnami repository you can execute
$ helm upgrade my-release bitnami/<chart>
Issues and PRs related to the chart itself will be redirected to `bitnami/charts` GitHub repository. In the same way, we'll be happy to answer questions related to this migration process in this issue (https://github.com/helm/charts/issues/20969) created as a common place for discussion.** Please be patient while the chart is being deployed **Credentials: Username : user echo "Password : $(kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)" echo "ErLang Cookie : $(kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode)"RabbitMQ can be accessed within the cluster on port at test-rabbitmq.rabbit.svc.cluster.localTo access for outside the cluster, perform the following steps:To Access the RabbitMQ AMQP port: kubectl port-forward --namespace rabbit svc/test-rabbitmq 5672:5672 echo "URL : amqp://127.0.0.1:5672/"To Access the RabbitMQ Management interface: kubectl port-forward --namespace rabbit svc/test-rabbitmq 15672:15672 echo "URL : http://127.0.0.1:15672/"
$ kubectl get all -n rabbitNAME READY STATUS RESTARTS AGEpod/test-rabbitmq-0 1/1 Running 0 3h56mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/test-rabbitmq ClusterIP 172.21.15.81 <none> 4369/TCP,5672/TCP,25672/TCP,15672/TCP 3h56mservice/test-rabbitmq-headless ClusterIP None <none> 4369/TCP,5672/TCP,25672/TCP,15672/TCP 3h56mNAME READY AGEstatefulset.apps/test-rabbitmq 1/1 3h56m
期待一段时间会发现pod、svc、ingress、pvc、pv、statefulset全副创立实现,即可拜访rabbitmq了!
问题
- 拜访rabbitmq报:503
如果你配置的域名门路如:baidu.com/rabbitmq
,这样的域名,那么你要配置成上面这样,能力正确拜访, 参考这篇文章:
rabbitmq: extraConfiguration: |- management.path_prefix = /rabbitmq/ingress:... hostName: baidu.com path: /rabbitmq/...
kubectl describe svc your-service-name -n rabbit
发现service endpoint为空
- 起因:pvc没有删除参考这篇文章理解
解决:
kubectl get pvckubectl delete pvc <name>
- running "VolumeBinding" filter plugin for pod "test-rabbitmq-0": pod has unbound immediate PersistentVolumeClaims
- 起因:要设置storageClass以及阿里云盘最低要求20Gi
解决:
persistence:storageClass: "alicloud-disk-ssd"size: 20Gi
- PersistentVolumeClaim "data-test-rabbitmq-0" is invalid: spec: Forbidden: is immutable after creation except resources.requests for bound claims
- 起因:pvc的容器不反对在线批改的
- 解决:删除pvc从新创立
- Warning ProvisioningFailed 6s (x4 over 14m) diskplugin.csi.alibabacloud.com_iZbp1d2cbgi4jt9oty4m9iZ_3408e051-98e8-4295-8a21-7f1af0807958 (combined from similar events): failed to provision volume with StorageClass "alicloud-disk-ssd": rpc error: code = Internal desc = SDK.ServerError
ErrorCode: InvalidAccountStatus.NotEnoughBalance
- 起因:阿里云账户余额最低100元能力创立ssd云盘
- 解决:阿里云账户充值
- 登录rabbitmq报401
起因:明码谬误
解决:运行上面命令获取明码
echo "Password : $(kubectl get secret --namespace rabbit test-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"
总结
1、kubectl要配置k8s的连贯配置信息能力应用,而helm默认就拿到了连贯信息,默认是在~/.kube/config
2、helm3曾经移除了helm tillers和helm init命令,所以就不要探讨helm2了。
3、如果装置过程中或者之后呈现谬误,能够通过阿里云ack管制台下的利用->helm release列表删除即可。
4、不须要配置rabbitmq-plugins enable rabbitmq_management
,因为helm装置rabbitmq后默认启动了。
5、如果不是阿里云的rabbitmq太贵,我才不违心本人装呢,唉,被逼的。
援用
Helm部署RabbitMQ集群 _
helm文档
kubectl exec是如何工作的?
Helm教程