Օգտագործեք Kubernetes օպերատորների ուժը՝ ձեր RabbitMQ կլաստերը տեղակայելու համար
RabbitMQ-ն ամենալայն տարածված բաց կոդով հաղորդագրությունների բրոքերն է: Նախքան RabbitMQ-ի մասին խոսելը, եկեք սահմանենք, թե ինչ է հաղորդագրության բրոքերը: Պարզեցնելու համար այն թույլ է տալիս հավելվածներին և ծառայություններին շփվել միմյանց հետ և փոխանակել տվյալներ: Ստորև բերված դիագրամը ներկայացնում է իրադարձությունների ավտոբուսի օգտագործման դեպքը, օգտագործելով հաղորդագրության բրոքեր.
Հաղորդագրությունների բրոքերները շատ օգտակար են ձեր բաղադրիչների միջև հաղորդակցությունը անջատելու համար: Այն հնարավորություն է տալիս ստեղծել լիովին բաշխված և ժամանակակից ճարտարապետություններ: Հաղորդագրությունների բրոքերների ընտանիքում կարող եք գտնել այլ հայտնի անուններ, ինչպիսիք են Apache Kafka, Apache ActiveMQ:
RabbitMQ-ն թեթև է և հեշտ է տեղակայվել տեղում կամ ամպի մեջ: Այն առաջարկում է հետաքրքիր առանձնահատկություններ.
- Այն աջակցում է բազմաթիվ հաղորդագրությունների արձանագրություններին, ինչպիսիք են AMQP, STOMP, MQTT և այլն…
- Այն կարող է տեղակայվել բաշխված և դաշնային կոնֆիգուրացիաներում՝ բավարարելու բարձր մասշտաբային և բարձր հասանելիության պահանջները:
- Այն ապահովում է UI կառավարման և HTTP API մոնիտորինգի համար:
- Այն կարող է ընդլայնվել բազմաթիվ հասանելի հավելվածներով:
- Կան ներդրված հաճախորդներ ծրագրավորման բազմաթիվ լեզուներով՝ Python, Javascript, Java, Go, Ruby և այլն:
Այս ձեռնարկում մենք կկենտրոնանանք այն վրա, թե ինչպես տեղակայել բարձր հասանելի RabbitMQ կլաստերը Kubernetes կլաստերում: Ընտրությունը կլինի Kubernetes օպերատորների օգտագործումը՝ այս նպատակին արդյունավետորեն հասնելու համար: Մենք կտեսնենք դրանց օգտագործման առավելությունները և ինչպես տեղակայել RabbitMQ ռեսուրսները քայլ առ քայլ:
Ինչու՞ օգտագործել Kubernetes օպերատորները:
Օպերատորները Kubernetes-ի ծրագրային ընդլայնումներ են, որոնք օգտագործում են «մաքսային ռեսուրսներ՝ հավելվածները և դրանց բաղադրիչները կառավարելու համար»: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/
Kubernetes-ի օպերատորները թույլ են տալիս ընդլայնել կլաստերի վարքագիծը՝ առանց փոփոխելու հենց Kubernetes-ի կոդը: Մեր դեպքում RabbitMQ-ի վարքագիծը կփոխանցվի օպերատորներին: Սա մեզ շատ ժամանակ կխնայի մեր կողմից:
RabbitMQ թիմը մշակում և պահպանում է երկու Kubernetes օպերատորներ.
- RabbitMQ կլաստերի Kubernetes օպերատոր՝ ավտոմատացնելու RabbitMQ կլաստերների տրամադրումը, կառավարումը և գործողությունները Kubernetes-ում:
- RabbitMQ Messaging Topology Operator՝ կլաստերների տոպոլոգիան կառավարելու համար (Թույլտվություններ, օգտվողներ և այլն…)
Օպերատորները տեղադրվում են CRD-ների միջոցով (Պատվերով ռեսուրսների սահմանում) Kubernetes կլաստերում: Տեղադրվելուց հետո նոր ռեսուրսները հայտնի են կլաստերում, ինչպիսիք են դասական տեսակները (Pod, Deployment և այլն…): Դուք պարզապես պետք է ստեղծեք YAML մանիֆեստները՝ դրանք կանչելու համար:
RabbitMQ Cluster Kubernetes օպերատորի տեղակայում
CRD-ն հասանելի է պահեստի թողարկումներում: Տեղադրեք այն kubectl
հրամանով.
$ kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
Նոր ռեսուրսները գտնվում են rabbitmq-system
անվանումների տարածքում.
$ kubectl get all -n rabbitmq-system
NAME READY STATUS RESTARTS AGE
pod/rabbitmq-cluster-operator-7cbf865f89-9pq6n 1/1 Running 4 2d21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/rabbitmq-cluster-operator 1/1 1 1 2d21h
NAME DESIRED CURRENT READY AGE
replicaset.apps/rabbitmq-cluster-operator-7cbf865f89 1 1 1 2d21h
Համոզվեք, որ բոլոր ռեսուրսները պատրաստ են հաջորդ քայլին:
Ստեղծեք RabbitMQ կլաստերը
RabbitMQ կլաստերի օպերատորը տրամադրում է RabbitmqCluster
տեսակ: Այժմ դուք կարող եք ստեղծել այնքան RabbitMQ կլաստերներ, որքան ցանկանում եք ձեր Kubernetes կլաստերում: Դուք պարզապես պետք է դրանք սահմանեք YAML մանիֆեստում այսպես.
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
labels:
app: rabbitmq
name: rabbitmq
spec:
replicas: 3
image: rabbitmq:3.9.11
service:
type: ClusterIP
persistence:
storageClassName: hostpath
storage: 10
resources:
requests:
cpu: 256m
memory: 1Gi
limits:
cpu: 256m
memory: 1Gi
rabbitmq:
additionalPlugins:
- rabbitmq_management
- rabbitmq_peer_discovery_k8s
additionalConfig: |
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default.svc.cluster.local
cluster_formation.k8s.address_type = hostname
vm_memory_high_watermark_paging_ratio = 0.85
cluster_formation.node_cleanup.interval = 10
cluster_partition_handling = autoheal
queue_master_locator = min-masters
loopback_users.guest = false
default_user = guest
default_pass = guest
advancedConfig: ""
Եկեք ամփոփենք վերը նշված մանիֆեստի բովանդակությունը.
- Մենք ստեղծում ենք մի տեսակ
Rabbitmqcluster
ռեսուրս: Այն սահմանվում է նախորդ մասում մեր տեղադրած CRD-ով: - Կլաստերն ունի 3 կրկնօրինակ՝ բարձր հասանելիության և սխալների հանդուրժողականության համար:
- Յուրաքանչյուր պատիճ ունի հստակ սահմանված ռեսուրսներ:
- Ավելացված հավելումներ՝
rabbitmq_management
կառավարման միջերեսի համար ևrabbitmq_peer_discovery_k8s
՝ կլաստերների ձևավորման համար: Այլ հավելումներ կարող եք գտնել այստեղ՝ https://www.rabbitmq.com/plugins.html: - Կլաստերի կոնֆիգուրացիան կատարվում է
additionalConfig
դաշտում՝ https://www.rabbitmq.com/configure.html#config-file: - Օգտագործված ծառայության տեսակն է
ClusterIP
: Դուք կարող եք կարգավորելLoadBalancer
տեսակը, եթե ձեր հավելվածը դուրս է կլաստերից: - Համառությունը կազմաձևված է: Տրված օրինակն աշխատում է տեղական Kubernetes կլաստերի վրա, ուստի պահեստավորման դասը
hostpath
է: Դուք կարող եք դիտել Kubernetes-ում հասանելի դասերը, որոնք կհամապատասխանեն ձեր կարիքներին՝ https://kubernetes.io/docs/concepts/storage/storage-classes/
$ kubectl create -f rabbitmq.yaml
$ kubectl get pods -l app.kubernetes.io/name=rabbitmq
NAME READY STATUS RESTARTS AGE
rabbitmq-server-0 1/1 Running 0 4m41s
rabbitmq-server-1 1/1 Running 0 4m41s
rabbitmq-server-2 1/1 Running 0 4m41s
RabbitMQ տոպոլոգիայի օպերատորի տեղակայում
Եկեք հիմա անցնենք RabbitMQ տոպոլոգիայի օպերատորին: Այն թույլ է տալիս կառավարել RabbitMQ հատուկ ռեսուրսները, ինչպիսիք են օգտվողները և թույլտվությունները, օրինակ՝ https://www.rabbitmq.com/kubernetes/operator/using-topology-operator.html:
Այս Օպերատորին անհրաժեշտ է սերտիֆիկացված մենեջեր աշխատելու համար: Տեղադրեք այն և համոզվեք, որ բոլոր պատյանները առողջ են.
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
$ kubectl get pods -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-7dd5854bb4-vt5jn 1/1 Running 0 47s
cert-manager-cainjector-64c949654c-j2npq 1/1 Running 0 47s
cert-manager-webhook-6b57b9b886-f6gwt 1/1 Running 0 47s
Տեղադրեք CRD.
$ kubectl apply -f https://github.com/rabbitmq/messaging-topology-operator/releases/latest/download/messaging-topology-operator-with-certmanager.yaml
Ահա մանիֆեստի օրինակ՝ հյուր օգտատիրոջ համար նույնականացման հետ փորձարկումներ կատարելու թույլտվությունները կարգավորելու համար.
apiVersion: rabbitmq.com/v1beta1
kind: Permission
metadata:
name: rabbitmq-guest-permission
spec:
vhost: /
user: guest
permissions:
write: ".*"
configure: ".*"
read: ".*"
rabbitmqClusterReference:
name: rabbitmq
Տեղադրեք The RabbitMQ Cluster Operator Kubectl Plugin-ը
RabbitMQ թիմը տրամադրում է նաև kubectl
հավելված՝ RabbitMQ կլաստերի օպերատորից օգտվելու համար: Այս փլագինը կավտոմատացնի բազմաթիվ փոխազդեցություններ Kubernetes API-ի և RabbitMQ կլաստերի օպերատորի հետ:
Փլագինին անհրաժեշտ է տեղադրել krew
plugin մենեջեր (տեղադրումն այստեղ MacOSX-ի համար է, ստուգեք փաստաթղթավորումը և հարմարեցրեք ձեր ՕՀ-ին)
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
Թարմացրեք ձեր PATH
միջավայրի փոփոխականը՝ krew
-ի գտնվելու վայրով.
$ export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
Ստուգեք, որ տեղադրումը կարգին է.
$ kubectl krew
Տեղադրեք RabbitMQ հավելվածը.
$ kubectl krew install rabbitmq
Ստուգեք RabbitMQ հավելվածը.
$ kubectl rabbitmq help
Դուք կարող եք վերբերել ձեր կլաստերը ցանկում.
$ kubectl rabbitmq list
NAME ALLREPLICASREADY RECONCILESUCCESS AGE
rabbitmq True True 4d20h
Կարող եք նաև ուղղակիորեն բացել կառավարման միջերեսը.
$ kubectl rabbitmq manage rabbitmq
Եզրակացություն
Այս ձեռնարկի միջոցով մենք տեսանք օպերատորների օգտագործման առավելությունը՝ Kubernetes-ը տեղակայելու համար:
Նրանք թույլ են տալիս հեշտությամբ ապահովել RabbitMQ կլաստերների թափանցիկությունը և տրամադրումը: Այն ավտոմատացնում է կառավարման մեծ մասը և թույլ է տալիս սահմանել RabbitMQ տոպոլոգիան YAML մանիֆեստների միջոցով: Վերջապես, մենք տեսանք, թե ինչպես կարգավորել kubectl plugin-ը օպերատորի հետ փոխազդելու համար: