《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在 OpenShift 4.15 + RHODS 2.7.0 的环境中验证
说明:请先完成《OpenShift AI - 部署静态物体识别 AI 应用》一文的内容。
注意:如无特殊说明,和 OpenShift AI 相关的 Blog 均无需 GPU。
配置 Kafka 环境
创建 Kafka 资源
- 使用默认选项安装 AMQ Streams Operator。
- 在 object-detect 项目中创建名为 object-detection 的 Kafka 集群实例。
- 在 object-detect 项目中创建以下 KafkaTopic 实例。
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: images
labels:
strimzi.io/cluster: object-detection
namespace: object-detect
spec:
config:
retention.ms: 604800000
segment.bytes: 1073741824
partitions: 1
replicas: 3
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: objects
labels:
strimzi.io/cluster: object-detection
namespace: object-detect
spec:
config:
retention.ms: 604800000
segment.bytes: 1073741824
partitions: 1
replicas: 3
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: notebook-test
labels:
strimzi.io/cluster: object-detection
namespace: object-detect
spec:
config:
retention.ms: 604800000
segment.bytes: 1073741824
partitions: 1
replicas: 3
- 执行命令查看运行的 kafkatopic。
$ oc get kafkatopic -n object-detect
NAME CLUSTER PARTITIONS REPLICATION FACTOR READY
consumer-offsets---84e7a678d08f4bd226872e5cdd4eb527fadc1c6a object-detection 50 3 True
images object-detection 1 3 True
notebook-test object-detection 1 3 True
objects object-detection 1 3 True
strimzi-store-topic---effb8e3e057afce1ecf67c3f5d8e4e3ff177fc55 object-detection 1 3 True
strimzi-topic-operator-kstreams-topic-store-changelog---b75e702040b99be8a9263134de3507fc0cc4017b object-detection 1 3 True
验证 Kafka 环境
- 在 Jupyter Notebook 中克隆 https://github.com/blues-man/object-detection-kafka-consumer。
- 打开 object-detection-kafka-consumer 目录下的 1_kafka_consumer.ipynb 和 2_kafka_producer.ipynb 文件,修改 KAFKA_BOOTSTRAP_SERVER 和 KAFKA_SECURITY_PROTOCOL 变量。
KAFKA_BOOTSTRAP_SERVER = os.environ.get('KAFKA_BOOTSTRAP_SERVER', 'object-detection-kafka-brokers.object-detect.svc.cluster.local:9092')
KAFKA_SECURITY_PROTOCOL = os.environ.get('KAFKA_SECURITY_PROTOCOL', 'PLAINTEXT')
其中 KAFKA_BOOTSTRAP_SERVER 变量的值是名为 object-detection 的 Kafka 对象中的 object-detection-kafka-brokers 服务对应的主机名和 tcp-clients 端口。
- 分别运行 1_kafka_consumer.ipynb 和 2_kafka_producer.ipynb,确认可以向 Kafka 发送和接受消息。
运行应用
部署新的应用模块
根据下面配置,使用 “从 Git 导入” 的方式部署 object-detection-kafka-consumer 模块。
Git Repo URL :https://github.com/blues-man/object-detection-kafka-consumer
构建器镜像: “Python 3.9 (UBI 8)”
创建路由:取消选项
CPU资源: 500 millicores - 1000 millicores
内存资源: 2200 Mi - 3000 Mi
为应用模块提供 Kafka 配置
- 根据以下 YAML 在 object-detect 项目中创建 Secret,其中 KAFKA_BOOTSTRAP_SERVER 为前面获取到的 object-detection-kafka-brokers 服务对应的地址+端口。
apiVersion: v1
kind: Secret
metadata:
name: object-detection-kafka
labels:
app: object-detection
app.kubernetes.io/component: object-detection
app.kubernetes.io/instance: object-detection
app.kubernetes.io/part-of: object-detection
data:
stringData:
KAFKA_BOOTSTRAP_SERVER: object-detection-kafka-brokers.object-detect.svc.cluster.local:9092
KAFKA_TOPIC_IMAGES: images
KAFKA_TOPIC_OBJECTS: objects
- 进入 object-detection-kafka 页面,然后点击 “在工作负载中添加 Secret”。
- 在弹出窗口中的下拉框中选择 object-detection-ui,然后 “保存”。
- 这时 object-detection-ui 部署会更新 Pod。
- 可以在 object-detection-ui 部署的 “环境” 中查看到已添加的名为 object-detection-kafka 的 Secret。
- 重复以上 2-5 步操作,将名为 object-detection-kafka 的 Secret 添加到 object-detection-kafka-cunsumer 工作负载中。
- 完成后打开 object-detection-ui 路由地址。
- 完成后打开 object-detection-ui 路由地址,然后点击下图的图标进入视频模式。
- 确认可以对拍摄到的动态物体进行识别。
参考
https://redhat-scholars.github.io/rhods-od-workshop/rhods-od-workshop/index.html