Kubernetes Artemis系列 | 使用 ArtemisCloud Operator 部署 artemis

目录

    • 一、ArtemisCloud Operator 介绍
    • 二、部署ArtemisCloud Operator
    • 三、使用 ArtemisCloud Operator 部署 artemis
    • 四、管理队列
    • 五、缩减规模时消息迁移

一、ArtemisCloud Operator 介绍

ArtemisCloud Operator 是一个用于管理和部署云端基础设施的工具。它基于 Kubernetes 平台,旨在简化和自动化云环境的管理任务。ArtemisCloud Operator 提供了一种通过自定义资源定义 (Custom Resource Definitions, CRDs) 来描述和操作云资源的方式,使得用户能够以更高层次的抽象来管理复杂的云架构和服务。通过 ArtemisCloud Operator,用户可以更高效地管理应用程序和服务的生命周期,提升了云计算环境中的自动化水平和管理效率。
ArtemisCloud Operator 项目地址:
https://github.com/artemiscloud/activemq-artemis-operator

二、部署ArtemisCloud Operator

下载

git clone https://github.com/artemiscloud/activemq-artemis-operator.git

创建命名空间 activemq-artemis-operator 并保存以供所有后续 kubectl 命令使用

$ kubectl create namespace activemq-artemis-operator
$ kubectl config set-context --current --namespace activemq-artemis-operator

要在当前命名空间 activemq-artemis-operator 中部署操作员,只需运行:

$ ./deploy/install_opr.sh

或者如果您已经构建了自己的镜像,请在部署Operator之前更改 deploy/operator.yaml 中定义的镜像。
操作员将被部署到当前命名空间并监视同一个命名空间。
要监视特定命名空间或所有命名空间,请运行以下命令,它会询问您要监视哪些命名空间。(与上个./deploy/install_opr.sh 脚本二选一)

$ ./deploy/cluster_wide_install_opr.sh

此时,你应该看到 activemq-artemis-operator 正在启动,如果你检查 pod,你会看到类似

$ kubectl get pod -n activemq-artemis-operator
NAME                                                   READY   STATUS    RESTARTS   AGE
activemq-artemis-controller-manager-5ff459cd95-kn22m   1/1     Running   0          70m

三、使用 ArtemisCloud Operator 部署 artemis

现在,Operator 正在运行并监听与我们的 crd 相关的更改,我们可以部署我们的artemis 单一示例 ,如下所示

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemis
metadata:
  name: artemis-broker

示例yaml(不需要执行)

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemis
metadata:
 name: artemis-broker-template
spec:
 resourceTemplates:
 - selector:
    kind: "StatefulSet"
   annotations:
    someKey: "someValue"
   patch:
    kind: "StatefulSet"
    spec:
     template:
      spec:
       containers:
       - name: "artemis-broker-template-container"
         securityContext:
          runAsNonRoot: true

特别注意spec.image,它标识用于启动 AMQ Broker 的容器映像。如果它为空、为“占位符”或未定义,它将从 deploy/operator.yaml 获取最新的默认映像 URL,其中受支持的代理映像列表被定义为环境变量。
要部署代理,只需执行

$ kubectl create -f examples/artemis/artemis_single.yaml -n activemq-artemis-operator
activemqartemis.broker.amq.io/artemis-broker created

稍后您将看到一个代理容器与操作员容器一起创建:

$ kubectl get pod -n activemq-artemis-operator
NAME                                                   READY   STATUS    RESTARTS   AGE
activemq-artemis-controller-manager-5ff459cd95-kn22m   1/1     Running   0          128m
artemis-broker-ss-0                                    1/1     Running   0          23m

扩展
spec.deploymentPlan.size 控制您要部署到集群的代理 Pod 数量。您可以更改此值并将其应用于正在运行的部署,以扩大和缩小代理 Pod 的数量。
例如,如果您想将上述部署扩展到 2 个 pod,请将大小修改为 2:
示例/artemis/artemis_single.yaml

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemis
metadata:
  name: artemis-broker
spec:
  deploymentPlan:
    size: 2

并应用它:

$ kubectl apply -f examples/artemis/artemis_single.yaml -n activemq-artemis-operator
activemqartemis.broker.amq.io/artemis-broker configured

集群中将出现 2 个 Broker Pod

$ kubectl get pod -n activemq-artemis-operator
NAME                                                   READY   STATUS    RESTARTS   AGE
activemq-artemis-controller-manager-5ff459cd95-kn22m   1/1     Running   0          140m
artemis-broker-ss-0                                    1/1     Running   0          35m
artemis-broker-ss-1                                    1/1     Running   0          69s

您可以以类似的方式缩小部署规模,即减小尺寸并再次应用它。
聚类
默认情况下,如果代理容器扩展到多个,则代理容器将形成一个代理 集群,这意味着彼此连接并使用默认的“ON_DEMAND”策略重新分发消息。
代理
要取消部署代理,我们只需执行

$ kubectl delete -f examples/artemis/artemis_single.yaml -n activemq-artemis-operator
activemqartemis.broker.amq.io "artemis-broker" deleted

四、管理队列

概述
用户可以使用 activemqartemisaddress CRD 在正在运行的代理 pod 上创建和删除队列/地址。
要应用本节中的命令,必须拥有已部署的代理 pod 。
假设您已经有一个正在运行的资源,那么您可以从示例目录部署一个activemqartemisaddress资源:
地址队列.yaml:

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemisAddress
metadata:
  name: artemis-address-queue
spec:
  addressName: myAddress0
  queueName: myQueue0
  routingType: anycast
  removeFromBrokerOnDelete: true

和部署命令:

$ kubectl create -f examples/address/address_queue.yaml -n activemq-artemis-operator
activemqartemisaddress.broker.amq.io/artemis-address-queue created

部署时,它将在地址myAddress0上创建一个名为myQueue0的队列,具有任播路由类型,例如:

$kubectl exec artemis-broker-ss-0 -nactivemq-artemis-operator  --container artemis-broker-container -- amq-broker/bin/artemis queue stat

Connection brokerURL = tcp://artemis-broker-ss-0.artemis-broker-hdls-svc.activemq-artemis-operator.svc.cluster.local:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|activemq.management.27...|activemq.management.27...|1             |0            |0             |0               |0             |0              |MULTICAST   |
|myQueue0                 |myAddress0               |0             |0            |0             |0               |0             |0              |ANYCAST     |

spec.removeFromBrokerOnDelete控制当您删除上述自定义资源时如何处理创建的队列/地址资源:

$ kubectl delete -f examples/address/address_queue.yaml -n activemq-artemis-operator

activemqartemisaddress.broker.amq.io “artemis-address-queue” deleted
如果spec.removeFromBrokerOnDelete为 true,队列/地址资源将从 broker 中删除。如果为 false,即使自定义资源被删除,此自定义资源创建的队列/地址仍将保留在 broker 中。
您可以使用以下命令检查队列是否已被删除:

$ kubectl exec artemis-broker-ss-0 --container artemis-broker-container -- amq-broker/bin/artemis queue stat
Connection brokerURL = tcp://artemis-broker-ss-0.artemis-broker-hdls-svc.activemq-artemis-operator.svc.cluster.local:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|activemq.management.d9...|activemq.management.d9...|1             |0            |0             |0               |0             |0              |MULTICAST   |

五、缩减规模时消息迁移

当代理 pod 正在缩小规模时,可以自动部署缩小规模控制器来处理从缩小规模的代理 pod 到活跃代理的消息迁移。
当缩减控制器检测到事件时,它会启动一个排空器 pod。排空器 pod 将联系集群中的一个活动 pod,并将消息排空到它。排空完成后,它会自动关闭。
仅当您在代理自定义资源上启用了持久性和消息迁移时,消息排空才有效。例如,您可以从我们的代理集群持久性示例中部署集群
注:这里会使用默认的存储类创建pvc

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemis
metadata:
  name: artemis-broker
spec:
  deploymentPlan:
    size: 2
    persistenceEnabled: true
    messageMigration: true

为了演示消息消耗,首先部署上述自定义资源(假设操作员正在运行):

$ kubectl create -f ./examples/artemis/artemis_cluster_persistence.yaml -n activemq-artemis-operator
activemqartemis.broker.amq.io/artemis-broker created

您将看到创建了 2 个代理容器。

$ kubectl get pod -n activemq-artemis-operator
NAME                                                   READY   STATUS    RESTARTS   AGE
activemq-artemis-controller-manager-5ff459cd95-kn22m   1/1     Running   0          3h19m
artemis-broker-ss-0                                    1/1     Running   0          89s
artemis-broker-ss-1                                    1/1     Running   0          53s

也可以看到持久化存储
在这里插入图片描述

现在我们将使用 broker 的 cli 工具向每个 broker pod 发送一些消息。
首先向代理artemis-broker-ss-0发送 100 条消息:

$ kubectl exec artemis-broker-ss-0 -- amq-broker/bin/artemis producer --url tcp://artemis-broker-ss-0:61616 --message-count=100
Defaulted container "artemis-broker-container" out of: artemis-broker-container, artemis-broker-container-init (init)
Connection brokerURL = tcp://artemis-broker-ss-0:61616
Producer ActiveMQQueue[TEST], thread=0 Started to calculate elapsed time ...

Producer ActiveMQQueue[TEST], thread=0 Produced: 100 messages
Producer ActiveMQQueue[TEST], thread=0 Elapsed time in second : 0 s
Producer ActiveMQQueue[TEST], thread=0 Elapsed time in milli second : 409 milli seconds

然后再向代理artemis-broker-ss-1发送 100 条消息

$ kubectl exec artemis-broker-ss-1 -- amq-broker/bin/artemis producer --user x --password y --url tcp://artemis-broker-ss-1:61616 --message-count=100
Defaulted container "artemis-broker-container" out of: artemis-broker-container, artemis-broker-container-init (init)
Connection brokerURL = tcp://artemis-broker-ss-1:61616
Producer ActiveMQQueue[TEST], thread=0 Started to calculate elapsed time ...

Producer ActiveMQQueue[TEST], thread=0 Produced: 100 messages
Producer ActiveMQQueue[TEST], thread=0 Elapsed time in second : 0 s
Producer ActiveMQQueue[TEST], thread=0 Elapsed time in milli second : 466 milli seconds

现在两个代理各有 100 条消息。

$ kubectl exec artemis-broker-ss-0 --container artemis-broker-container -- amq-broker/bin/artemis queue stat
Connection brokerURL = tcp://artemis-broker-ss-0.artemis-broker-hdls-svc.activemq-artemis-operator.svc.cluster.local:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|TEST                     |TEST                     |0             |100          |100           |0               |0             |0              |ANYCAST     |
|activemq.management.14...|activemq.management.14...|1             |0            |0             |0               |0             |0              |MULTICAST   |
$ kubectl exec artemis-broker-ss-1 --container artemis-broker-container -- amq-broker/bin/artemis queue stat
Connection brokerURL = tcp://artemis-broker-ss-1.artemis-broker-hdls-svc.activemq-artemis-operator.svc.cluster.local:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|TEST                     |TEST                     |0             |100          |100           |0               |0             |0              |ANYCAST     |
|activemq.management.2a...|activemq.management.2a...|1             |0            |0             |0               |0             |0              |MULTICAST   |

修改 ./examples/artemis/artemis_cluster_persistence.yaml 以缩减为一个代理

apiVersion: broker.amq.io/v1beta1
kind: ActiveMQArtemis
metadata:
  name: artemis-broker
spec:
  deploymentPlan:
    size: 1
    persistenceEnabled: true
    messageMigration: true

并重新应用它:

$ kubectl apply -f ./examples/artemis/artemis_cluster_persistence.yaml -n activemq-artemis-operator
activemqartemis.broker.amq.io/artemis-broker configured

代理容器将减少到只有一个

$ kubectl get pod -n activemq-artemis-operator
NAME                                                   READY   STATUS    RESTARTS   AGE
activemq-artemis-controller-manager-5ff459cd95-kn22m   1/1     Running   0          3h57m
artemis-broker-ss-0                                    1/1     Running   0          39m

现在 broker pod artemis-broker-ss-1上的消息应该已经全部迁移到 pod artemis-broker-ss-0 了。再次使用 broker cli 工具检查:

$ kubectl exec artemis-broker-ss-0 -- amq-broker/bin/artemis queue stat --url tcp://artemis-broker-ss-0:61616

您可以看到队列 TEST 现在有 200 条消息。
在这里插入图片描述

以上部分操作设置了默认操作的名称空间,自己可以改;
kubectl config set-context --current --namespace activemq-artemis-operator

持续更新中,关注不迷糊…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精益软件开发:从理念到实践

目录 前言1. 精益软件开发的起源与背景1.1 精益制造的起源1.2 精益思想在软件开发中的应用 2. 精益软件开发的核心原则2.1 消除浪费2.2 强调学习和持续改进2.3 快速交付2.4 尊重团队成员 3. 实施精益软件开发的方法3.1 精简流程3.2 持续反馈和迭代3.3 持续集成和持续交付3.4 建…

Vue 学习之 axios

目录 执行安装命令:npm install axios 使用的时候导入 axios以data,params,headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库,作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求…

chromium源码魔改思路

1.首先确定需要要改动的JS的API 比如要改动navigator.webdriver false 2.在官网查找JS的API https://developer.mozilla.org/zh-CN/docs/Web/Guide 3.在chromium源码官网查找源码 https://source.chromium.org/chromium/chromium/src 直接修改webdriver()返回值即可 4.然后…

idea常用配置 | 快捷注释

idea快速注释 一、类上快速注释 (本方法是IDEA环境自带的,设置特别方便简单易使用) 1、偏好设置->编辑器->文件和代码模版 | File-Settings-Editor-File and Code Templates 2、右下方的“描述”中有相对应的自动注注释配置格式 贴…

Actor-agnostic Multi-label Action Recognition with Multi-modal Query

标题:基于多模态查询的非特定行为者多标签动作识别 源文链接:https://openaccess.thecvf.com/content/ICCV2023W/NIVT/papers/Mondal_Actor-Agnostic_Multi-Label_Action_Recognition_with_Multi-Modal_Query_ICCVW_2023_paper.pdfhttps://openaccess.t…

Java研学-Shiro安全框架(二)

四 Shiro 鉴权 1 介绍 授权功能:就是为用户分配相关的权限的过程;鉴权功能:判断当前访问用户是否有某个资源的访问权限的过程。我们的权限管理系统是基于角色的权限管理,所以在系统中应该需要下面三个子模块:用户管理…

Theta方法:一种时间序列分解与预测的简化方法

Theta方法整合了两个基本概念:分解时间序列和利用基本预测技术来估计未来的价值。 每个数据科学爱好者都知道,时间序列是按一定时间间隔收集或记录的一系列数据点。例如,每日温度或经济指标的月值。把时间序列想象成不同成分的组合,趋势(数据…

观测云产品更新 | Pipelines、智能监控、日志数据访问等

观测云更新 Pipelines 1、Pipelines:支持选择中心 Pipeline 执行脚本。 2、付费计划与账单:新增中心 Pipeline 计费项,统计所有命中中心 Pipeline 处理的原始日志的数据大小。 监控 1、通知对象管理:新增权限控制。配置操作权…

PCL 使用列文伯格-马夸尔特法计算变换矩阵

目录 一、算法原理1、计算过程2、主要函数3、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、计算过程 2、主要函数 void pcl

民用无人驾驶航空器运营合格证怎么申请

随着科技的飞速发展,无人机已经从遥不可及的高科技产品飞入了寻常百姓家。越来越多的人想要亲自操纵无人机,探索更广阔的天空。但是,飞行无人机可不是简单的事情,你需要先获得无人机许可证,也就是今天所要讲的叫民用无…

免费可视化工具为何成为数据分析新宠?

免费可视化工具为何越来越受欢迎?在当今数据驱动的时代,数据分析和展示已成为各行各业不可或缺的核心能力。然而,传统的数据处理和可视化工具往往价格昂贵,且使用门槛较高,这为许多中小企业和个人用户带来了不小的困扰…

微信浏览器自动从http跳转到https的坑

只要访问过同地址的https地址,就只能一直https了,无法再用https访问了,只能全站加上https才行。

电脑怎么设置锁屏密码?这3个方法你知道吗

在日常生活中,电脑已成为我们工作和娱乐的重要工具。为了保护个人信息和数据安全,设置锁屏密码是必不可少的一步。通过设置锁屏密码,您可以有效防止未经授权的访问,确保电脑上的隐私和数据不被泄露。本文将详细介绍电脑怎么设置锁…

【CSS in Depth 2 精译】1.5 渐进式增强

文章目录 1.5 渐进式增强1.5.1 利用层叠规则实现渐进式增强1.5.2 渐进式增强的选择器1.5.3 利用 supports() 实现特性查询启用浏览器实验特性 1.5 渐进式增强 要用好 CSS 这样一门不断发展演进中的语言,其中一个重要的因素就是要与时俱进,及时了解哪些功…

使用Python进行大数据处理Dask与Apache Spark的对比

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行大数据处理Dask与Apache Spark的对比 随着数据量的增加和数据处理需求的增长…

旅游管理系统源码小程序

便捷旅行,尽在掌握 旅游管理系统是一款基于FastAdminElementUNIAPP开发的多端(微信小程序、公众号、H5)旅游管理系统,拥有丰富的装修组件、多端分享、模板消息、电子合同、旅游攻略、旅游线路及相关保险预订等功能,提…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…

Hadoop简单应用程序实例

Hadoop是一个分布式系统基础架构&#xff0c;主要用于大数据的存储和处理。它允许使用简单的编程模型跨集群处理和生成大数据集。Hadoop主要由HDFS&#xff08;Hadoop Distributed FileSystem&#xff0c;分布式文件系统&#xff09;和MapReduce编程模型两部分组成。 准备工作…

LeeCode 994. 腐烂的橘子

原题链接994. 腐烂的橘子 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;采用bfs遍历图&#xff0c;将烂橘子加入队列&#xff0c;然后将被烂橘子感染的橘子也加入队列&#xff0c;bfs的具体细节就不多说了&#xff0c;可以自己去搜&#xff0c;很简单&#xff0c;…