k8s部署zkd单机和kafka单机
时间: 2025-04-13 19:38:48 浏览: 48
<think>好的,用户想在Kubernetes上部署单机版的Zookeeper和Kafka。首先,我需要回忆一下相关的组件和步骤。Zookeeper是Kafka的依赖,所以应该先部署Zookeeper,再部署Kafka。
首先,Kubernetes部署应用通常需要用到Deployment和Service资源。对于单机版,不需要复杂的配置,但需要确保两者的网络互通。可能需要创建PersistentVolume来保存数据,避免Pod重启后数据丢失。
接下来,Zookeeper的部署。需要创建一个Deployment,指定镜像,设置环境变量,比如ZOO_STANDALONE_ENABLED为true,这样Zookeeper可以以单机模式运行。然后创建Service,暴露端口2181,这样Kafka可以连接到它。
然后是Kafka的部分。Kafka的Deployment需要依赖Zookeeper,所以环境变量里要设置Zookeeper的Service地址,比如zookeeper:2181。同样需要创建Service,可能需要NodePort或LoadBalancer类型来从外部访问。
需要注意存储的问题,单机版可能不需要持久化,但为了数据安全,还是建议挂载Volume。不过用户可能只是测试用途,所以可以暂时使用emptyDir,或者不挂载,但需要明确告知用户这样做的风险。
另外,Kafka的配置可能需要调整,比如ADVERTISED_LISTENERS,确保外部客户端能正确连接到Kafka的Service。这部分可能需要根据具体的Kubernetes环境来配置,比如使用NodePort时的节点IP。
还要检查镜像的版本,确保Zookeeper和Kafka的版本兼容。比如使用bitnami的镜像,他们的文档可能会有更详细的说明,但用户可能没有提到,所以需要假设使用标准镜像。
最后,测试部署后的服务是否正常,可以通过创建Topic和发送消息来验证。可能需要进入Kafka的Pod执行命令,或者使用外部客户端工具。
现在,用户提供的引用里提到阿里云容器服务集成日志服务,虽然问题不直接相关,但可能需要注意日志收集的配置,但用户没有提到,所以暂时不考虑。
总结步骤:创建命名空间,部署Zookeeper的Deployment和Service,部署Kafka的Deployment和Service,验证连接。需要确保Service名称正确,环境变量配置准确,网络策略允许通信。</think>### 分步指南:在 Kubernetes 上部署单节点 Zookeeper 和 Kafka
---
#### **步骤 1: 创建命名空间**
为资源隔离,建议创建独立命名空间:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: kafka-single
```
---
#### **步骤 2: 部署单节点 Zookeeper**
**Deployment 配置 (zookeeper-deployment.yaml)**:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper
namespace: kafka-single
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zookeeper
image: zookeeper:3.8.0
env:
- name: ZOO_STANDALONE_ENABLED # 单机模式配置[^1]
value: "true"
ports:
- containerPort: 2181
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
```
**Service 配置 (zookeeper-service.yaml)**:
```yaml
apiVersion: v1
kind: Service
metadata:
name: zookeeper
namespace: kafka-single
spec:
selector:
app: zookeeper
ports:
- port: 2181
targetPort: 2181
```
执行命令:
```bash
kubectl apply -f zookeeper-deployment.yaml
kubectl apply -f zookeeper-service.yaml
```
---
#### **步骤 3: 部署单节点 Kafka**
**Deployment 配置 (kafka-deployment.yaml)**:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
namespace: kafka-single
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: bitnami/kafka:3.4.0
env:
- name: KAFKA_CFG_ZOOKEEPER_CONNECT
value: "zookeeper.kafka-single.svc.cluster.local:2181" # 指向Zookeeper服务
- name: KAFKA_CFG_LISTENERS
value: "PLAINTEXT://:9092"
- name: KAFKA_CFG_ADVERTISED_LISTENERS
value: "PLAINTEXT://kafka:9092" # 内部访问地址
ports:
- containerPort: 9092
```
**Service 配置 (kafka-service.yaml)**:
```yaml
apiVersion: v1
kind: Service
metadata:
name: kafka
namespace: kafka-single
spec:
selector:
app: kafka
ports:
- port: 9092
targetPort: 9092
type: NodePort # 允许外部访问
```
执行命令:
```bash
kubectl apply -f kafka-deployment.yaml
kubectl apply -f kafka-service.yaml
```
---
#### **步骤 4: 验证部署**
1. **检查 Pod 状态**:
```bash
kubectl get pods -n kafka-single
```
2. **测试 Kafka 连接**:
```bash
kubectl exec -it kafka-pod-name -n kafka-single -- bash
/opt/bitnami/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092
```
---
### **注意事项**
1. **数据持久化**:上述配置使用临时存储 (`emptyDir`),生产环境需替换为 `PersistentVolume`。
2. **网络策略**:若集群启用网络策略,需允许 `kafka` 和 `zookeeper` 间的通信。
3. **资源限制**:建议添加 `resources.requests/limits` 防止资源抢占。
---
阅读全文
相关推荐










