Rabbitmq-operator 搭建RabbitMQ集羣
一、部署operator
1.1 安裝服務
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
# namespace/rabbitmq-system created
# customresourcedefinition.apiextensions.k8s.io/rabbitmqclusters.rabbitmq.com created
# serviceaccount/rabbitmq-cluster-operator created
# role.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-role created
# clusterrole.rbac.authorization.k8s.io/rabbitmq-cluster-operator-role created
# rolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-leader-election-rolebinding created
# clusterrolebinding.rbac.authorization.k8s.io/rabbitmq-cluster-operator-rolebinding created
# deployment.apps/rabbitmq-cluster-operator created
1.2 環境變量
| 變量名 |
含義 |
默認值 |
| OPERATOR_SCOPE_NAMESPACE |
命名空間或命名空間列表,操作員將協調並監視 RabbitmqClusters(獨立於安裝命名空間)。使用逗號分隔符,不帶空格,例如“project-1,project-2,rabbitmq-testing” |
所有命名空間均受到監視和協調 |
| 默認_RABBITMQ_IMAGE |
用於新 RabbitmqCluster Pod 的 RabbitMQ 容器鏡像未明確設置RabbitmqCluster.Spec.Image |
Operator 使用發佈時可用的最新 RabbitMQ 容器鏡像來運行新的 Pod |
| 默認用户更新程序_圖像 |
用於新 RabbitmqCluster Pod 的 Vault Sidecar 容器鏡像未明確設置RabbitmqCluster.Spec.SecretBackend.Vault.DefaultUserUpdaterImage |
Operator 使用發佈時可用的最新 Sidecar 容器鏡像來管理新的 Pod |
| 默認圖像拉取機密 |
在所有 RabbitmqCluster Pod 上默認設置的 imagePullSecrets 的逗號分隔列表,其中未明確設置RabbitmqCluster.Spec.ImagePullSecrets |
新的 RabbitmqCluster Pod 默認沒有 imagePullSecrets |
| 啓用_調試_PPROF |
默認值為 false,因為此變量不應在生產中使用。當將其設置為 true 時,它會在 Operator Pod 的指標端口上公開一組調試端點,以便使用 pprof 對 Operator 進行 CPU 和內存分析。 |
pprof 調試端點不會在 Operator Pod 上公開。 |
| 控制_RABBITMQ_圖像 |
實驗性!當設置為 時true,操作員將始終自動設置默認圖像標籤。當操作員升級時,這可用於自動升級 RabbitMQ 集羣。請注意,沒有執行安全檢查,也沒有執行 RabbitMQ 版本之間的任何兼容性檢查。 |
操作員不控制鏡像。用户負責更新 RabbitmqCluster 鏡像。 |
| 租約期限 |
非領導者候選人等待強制獲取領導權的時間(以秒為單位)。這是根據上次觀察到的確認時間來衡量的。默認值為 15 秒。該值必須是字符串,例如"30"。 |
默認值設置為 15 秒。 |
| 續訂截止日期 |
更新截止期限是代理控制平面在放棄之前重試刷新領導權的持續時間。默認值為 10 秒。該值必須是字符串,例如"10"。 |
默認值設置為 10 秒。 |
| 重試周期 |
重試周期是 LeaderElector 客户端在嘗試操作之間應等待的時間。默認值為 2 秒。該值必須是字符串,例如"3"。 |
默認值設置為 2 秒。 |
二、部署集羣
2.1 安裝清單
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: rabbitmq
namespace: rabbitmq-system
spec:
replicas: 3
service:
type: NodePort
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 800m
memory: 1Gi
rabbitmq:
envConfig: |
RABBITMQ_QUORUM_DIR=/var/lib/rabbitmq/quorum-segments
advancedConfig: |
[
{ra, [
{wal_data_dir, "/var/lib/rabbitmq/quorum-wal"}
]}
].
override:
statefulSet:
spec:
template:
spec:
containers:
- name: rabbitmq
volumeMounts:
- mountPath: /var/lib/rabbitmq/quorum-segments
name: quorum-segments
- mountPath: /var/lib/rabbitmq/quorum-wal
name: quorum-wal
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: persistence
namespace: default
spec:
storageClassName: ys-custom
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeMode: Filesystem
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: quorum-wal
spec:
storageClassName: ys-custom
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeMode: Filesystem
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: quorum-segments
namespace: default
spec:
storageClassName: ys-custom
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
2.2 安裝服務
kubectl apply -f rabbitmq.yaml