一、k8s部署kafka集群
k8s部署kafka集群需要考虑到kafka的分布式特性,可以使用kafka-manager或者Zookeeper进行管理。
第一步是创建一个Zookeeper集群,可以使用Kubernetes的StatefulSet来创建,通过Kubernetes的DNS服务来管理集群中的Zookeeper服务。
<apiVersion: v1
kind: Service
metadata:
name: zk-cs
spec:
selector:
app: zk-cs
ports:
- name: client
port: 2181
protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zk-cs
spec:
selector:
matchLabels:
app: zk-cs
serviceName: zk-cs
replicas: 3
template:
metadata:
labels:
app: zk-cs
spec:
containers:
- name: zk-cs
image: zookeeper
ports:
- name: client
containerPort: 2181
readinessProbe:
tcpSocket:
port: client
initialDelaySeconds: 10
periodSeconds: 5 >
接下来是创建kafka集群,在使用kubernetes创建kafka集群时,需要使用Kafka StatefulSet,以便保持kafaka的有序ID。
<apiVersion: v1
kind: Service
metadata:
name: kafka-cs
spec:
selector:
app: kafka-cs
type: NodePort
ports:
- name: kafka
port: 9092
protocol: TCP
nodePort: 30092
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kafka-cs
spec:
selector:
matchLabels:
app: kafka-cs
serviceName: kafka-cs
replicas: 3
template:
metadata:
labels:
app: kafka-cs
spec:
containers:
- name: kafka-cs
image: wurstmeister/kafka
env:
- name: KAFKA_ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: KAFKA_ADVERTISED_PORT
value: "9092"
- name: KAFKA_ZOOKEEPER_CONNECT
value: zk-cs-0.zk-cs:2181,zk-cs-1.zk-cs:2181,zk-cs-2.zk-cs:2181
ports:
- name: kafka
containerPort: 9092
readinessProbe:
tcpSocket:
port: kafka
initialDelaySeconds: 10
periodSeconds: 5 >
二、k8s部署kafka和logstash
在kubernetes中部署kafka和logstash可以将logstash部署在单独的Pod中。
首先需要创建一个Kafka的Service,通过该service进行和Kafka Pod的通信。
然后创建一个Logstash Deployment和Service,将logstash部署在独立的Pod里面,将需要处理的日志转发到kafka的Service。
<apiVersion: v1
kind: Service
metadata:
name: kafka-cs
spec:
selector:
app: kafka-cs
type: NodePort
ports:
- name: kafka
port: 9092
protocol: TCP
nodePort: 30092
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
spec:
replicas: 1
selector:
matchLabels:
app: logstash
template:
metadata:
labels:
app: logstash
spec:
containers:
- name: logstash
image: docker.elastic.co/logstash/logstash:7.12.0
volumeMounts:
- name: logstash-config
mountPath: /usr/share/logstash/pipeline/logstash.conf
subPath: logstash.conf
ports:
- name: logstash
containerPort: 5000
env:
- name: KAFKA_BROKERS
value: "kafka-cs:9092"
livenessProbe:
tcpSocket:
port: 5000
initialDelaySeconds: 10
periodSeconds: 5
volumes:
- name: logstash-config
configMap:
name: logstash-config
items:
- key: logstash.conf
path: logstash.conf
---
apiVersion: v1
kind: Service
metadata:
name: logstash
spec:
selector:
app: logstash
ports:
- name: logstash
port: 5000
protocol: tcp
targetPort: 5000 >
三、k8s部署kafka单机
在kubernetes中单机部署kafka通常使用Deployment和Service进行部署。
首先需要创建一个Kafka Deployment和Service,将它们部署到Kubernetes集群之中。
<apiVersion: v1
kind: Service
metadata:
name: kafka
spec:
selector:
app: kafka
ports:
- name: kafka
port: 9092
protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: wurstmeister/kafka
ports:
- name: kafka
containerPort: 9092
env:
- name: KAFKA_ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: KAFKA_ADVERTISED_PORT
value: "9092"
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper:2181
readinessProbe:
tcpSocket:
port: kafka
periodSeconds: 10
timeoutSeconds: 5 >
四、k8s部署方式
k8s部署kafka一般有两种方式:使用StatefulSet和使用Deployment。StatefulSet适用于有状态的应用,如数据库等。Deployment适用于无状态的应用,如Web应用程序或API服务。
使用StatefulSet部署kafka可以创建一个稳定的网络标识符和唯一标识符,以便容器通过网络与其他容器进行通信。
使用Deployment部署kafka可以快速创建和删除kafka服务,可以很好地解决容器的运行效率问题。
五、k8s部署服务
k8s部署kafka服务需要使用Deployment或者StatefulSet和Service进行部署。
Deployments和StatefulSet通常用于部署应用程序或服务,而Service用于通过Kubernetes服务发现机制将这些应用程序或服务公开给其他客户端。
六、k8s部署流程
k8s部署kafka的流程包括以下步骤:
1.创建Zookeeper Deployment和Service。
2.创建Kafka Deployment和Service。
3.在Kafka中配置Kafka上的Zookeeper地址。
4.创建logstash Deployment和Service,启动logstash和Kafka之间的连接。
七、k8s部署jar包
k8s部署kafka jar包需要使用Docker构建一个容器镜像,并将jar包文件复制到容器镜像中。
构建Docker镜像的Dockerfile文件如下:
<FROM openjdk:8u171-jdk-alpine
ADD kafka_2.11-2.0.0.tgz /opt
WORKDIR /opt/kafka_2.11-2.0.0
EXPOSE 9092
CMD ["bin/kafka-server-start.sh", "config/server.properties"] >
八、k8s部署应用
k8s部署kafka应用一般使用Deployment或者StatefulSet和Service进行部署,具体步骤见上述内容。
九、k8s部署nginx
k8s部署nginx可以使用Deployment和Service进行部署。
部署nginx的Deployment文件如下:
<apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.8
ports:
- containerPort: 80
name: http >
通过定义Service来将nginx服务暴露给外部客户端:
<apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80 >