0

这是我基于KafkaJs的发布者客户端。我创建了一个容器镜像Pod并向 Strimzi 代理提交了一个 YAML。

const { Kafka } = require('kafkajs')

async function clients() {
const kafka = new Kafka({
  clientId: 'my-app',
  brokers: ['test-kafka-bootstrap.strimzi.svc.cluster.local:9092']
})

const producer = kafka.producer()

await producer.connect()
await producer.send({
  topic: 'clients',
  messages: [
    { value: 'Hello KafkaJS user!' },
  ],
})

await producer.disconnect()
}

clients()

我的Dockerfile.

FROM node:14 as build_app

WORKDIR /

WORKDIR /app
COPY app .
COPY package.json .
COPY package-lock.json .
RUN npm i
CMD ["node", "index.js"]

我的podYAML。

apiVersion: v1
kind: Pod
metadata:
  name: clients
spec:
  containers:
  - name: clients
    image: ghcr.io/org/clients:v0.0.0
    imagePullPolicy: Always

Pod不断崩溃并且kubectl logs没有显示任何内容 - 它是空的。Akubectl describe也没有透露任何东西。

我错过了什么?

4

2 回答 2

1

日志什么也不显示,因为 1)您的代码没有日志输出 2)您的代码只发送一条记录,然后停止,因此容器干净地退出;这不是一项长期运行的服务。docker run一个简单的命令也会有同样的问题。

如果你想要一个长期运行的服务,你需要将你的代码包装在一个 web 服务(NextJS、Express、Hapi 等)中,然后为 k8s 服务添加一个健康检查探针。

于 2021-12-03T19:25:23.307 回答
1

您可以在睡眠模式下启动 pod,然后您可以从那里进行调试,在 yaml 下使用

apiVersion: v1
kind: Pod
metadata:
  name: clients
spec:
  containers:
  - name: clients
    image: ghcr.io/org/clients:v0.0.0
    imagePullPolicy: Always
    command: ["sleep" , "100000000"]

现在执行到 pod

kubectl exec -it <pod> -- bash

现在执行

node index.js
于 2021-12-03T21:34:53.477 回答