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

news2025/2/26 9:44:12

目录

    • 一、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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArtTS系统能力-通知的学习(3.1)

上篇回顾: ArtTS语言基础类库-容器类库内容的学习(2.10.2) 本篇内容: ArtTS系统能力-通知的学习(3.1) 一、 知识储备 1. 基础类型通知 按内容分成四类: 类型描述NOTIFICATION_CONTENT_BASIC_TEXT普通文…

大物3错题整理

平衡位置:在O点上的位置 相位: 当N很大的时候,wxwywz。因此,平均平动动能除以3,就是能量均分定理。 W F在x上的积分 Π时无单位 180,就是单位 1rad,rad就是单位 左手定则、右手定则、安培定…

金融科技如何多角度助力小微企业融资

一、引言 在全球化与数字化交织的时代背景下,金融科技(FinTech)作为新兴力量,正逐步改变传统的金融业态,尤其在助力小微企业融资方面,金融科技展现出了多元化的价值和优势。本文将从不同角度探讨金融科技如…

数据同步软件有哪些

数据同步软件有哪些呢?随着企业规模的扩大,企业数据也积累得越来越多,万一发生宕机风险,那么这个损失将不可估量。所以为了容灾备用,我们往往需要将数据同步到另一台备胎服务器上,进行冗余。 那么需要同步的…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近,新版的《植物大战僵尸杂交版》火爆全网啊!许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》,所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包,包含安装视频教程、修改器、防闪退、…

论文阅读《One-Step Image Translation with Text-to-Image Models》

Abstract. 在这项工作中,我们解决了现有条件扩散模型的两个局限性:迭代去噪过程导致的推理速度慢,以及模型微调对配对数据的依赖。为了解决这些问题,我们引入了一种通用方法,通过对抗学习目标将单步扩散模型适应新任务…

【C++】string基本用法(常用接口介绍)

文章目录 一、string介绍二、string类对象的创建(常见构造)三、string类对象的容量操作1.size()和length()2.capacity()3.empty()4.clear()5.reserve()6.resize() 四、string类对象的遍历与访问1.operator[ ]2.正向迭代器begin()和end()3.反向迭代器rbeg…

昇思25天学习打卡营第10天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成自己的个性化音乐 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型(LM)的音乐生成模型,能够根据文本描述或音频提示生成高质量的音乐样本,相关研究成果参考论文《Simple and Controllable …

Keepalive技术

文章目录 一、Keepalive基础vrrp技术Keepalived介绍Keepalived架构 二、 Keepalived 相关文件配置文件组成全局配置虚拟路由器配置 三、配置lvs和keepalive联动服务器架构抢占模式配置配置单播、组播配置通知模块日志功能脑裂现象 四、keepalived和nginx联动keepalive和其他应用…

html文章卡片

完成效果 中医网站的文本卡片制作,其中用到了grid布局 css基础知识回顾 阴影样式 好的阴影样式可以保存 box-shadow: 6px 6px 5px hsla(0, 0%, 0%, 0.02), 25px 25px 20px hsla(0, 0%, 0%, 0.03), 100px 100px 80px hsla(0, 0%, 0%, 0.05); grid-template-column…

Python的numpy简单使用

1.可以调用引入numpy里面的函数,如add可以把俩数相加,也可以创建一个数组arr,arr.shape是数组arr的属性,如果后有跟()就是里面的一个函数 type()函数可以知道里面是什么类型 变量.shape可以知道这个变量是…

这些并发编程技术你都知道吗?

与其碌碌无为,不如兴风作浪。 虽然不是所有的系统都需要很多的并发编程技术,但是掌握常见的高并发秘籍,便能让我们的系统快起来,面对访问量的剧增从容应对。 接下来,为我们一起来看看常见的高并发技术有哪些。总结起来…

NAS教程丨铁威马如何登录 SSH终端?

适用型号: 所有TNAS 型号 如您有特殊操作需要通过 SSH 终端登录 TNAS,请参照以下指引: (注意: 关于以下操作步骤中的"cd /"的指令,其作用是使当前 SSH/Telnet 连接的位置切换到根目录,以免造成对卷的占用.请不要遗漏它.) Windows…

Django 对模型创建的两表插入数据

1,添加模型 Test/app8/models.py from django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email models.EmailField(uniqueTrue)password models.CharField(max_length128) # 使用哈希存储密码first_name …

Excel 数据筛选难题解决

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

leetCode.98. 验证二叉搜索树

leetCode.98. 验证二叉搜索树 题目描述 代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(n…

Spring 动态增强逻辑执行分析

1、假如UserService中存在被增强的public 普通方法,那么spring ioc时就会创建对应的代理对象放置到容器中; 2、那么Controller中注入的userService就是代理对象; Service public class UserService {Transactionalpublic void f2(String us…

理解GPT2:无监督学习的多任务语言模型

目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据,更大的模型 2、大数据量,大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…

WDG看门狗

1 WDG 1.1 简介 WDG是看门狗定时器(Watchdog Timer)的缩写,它是一种用于计算机和嵌入式系统中的定时器,用来检测和恢复系统故障。 看门狗就像是一个忠诚的宠物狗,它时刻盯着你的程序,确保它们正常运行。…

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外,对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备,另外预埋出默认设置的编码构造,便捷大伙儿在目前…