### kafka - 构建镜像: ```bash docker build -t k8s-kafka:latest . ``` 分发镜像到node节点 - 部署: ```bash kubectl get node NAME STATUS ROLES AGE VERSION master1 Ready master 30d v1.18.6 master2 Ready master 30d v1.18.6 node1 Ready 30d v1.18.6 node2 Ready 30d v1.18.6 node3 Ready 30d v1.18.6 kubectl taint node node1 node2 node3 travis.io/schedule-only=kafka:NoSchedule kubectl label node node1 node2 node3 travis.io/schedule-only=kafka kubectl apply -f public-service-ns.yaml kubectl apply -f zookeeper/ kubectl get pod -n public-service NAME READY STATUS RESTARTS AGE zk-0 1/1 Running 0 6m28s zk-1 1/1 Running 0 5m48s zk-2 1/1 Running 0 5m22s kubectl apply -f ./ kubectl get pod -n public-service -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kafka-0 1/1 Running 0 50s 172.10.4.70 node1 kafka-1 1/1 Running 0 34s 172.10.2.47 node2 kafka-2 1/1 Running 0 27s 172.10.3.52 node3 zk-0 1/1 Running 0 8m28s 172.10.4.69 node1 zk-1 1/1 Running 0 7m48s 172.10.2.46 node2 zk-2 1/1 Running 0 7m22s 172.10.3.51 node3 kubectl get svc -n public-service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kafka ClusterIP None 9092/TCP 3m59s zk-cs ClusterIP 10.102.25.178 2181/TCP 11m zk-hs ClusterIP None 2888/TCP,3888/TCP 11m ``` --- - zk测试: ```bash kubectl exec zk-0 -n public-service -- cat /opt/zookeeper/conf/zoo.cfg #This file was autogenerated by k8szk DO NOT EDIT clientPort=2181 dataDir=/var/lib/zookeeper/data dataLogDir=/var/lib/zookeeper/log tickTime=2000 initLimit=10 syncLimit=2000 maxClientCnxns=60 minSessionTimeout= 4000 maxSessionTimeout= 40000 autopurge.snapRetainCount=3 autopurge.purgeInteval=1 server.1=zk-0.zk-hs.kafka.svc.cluster.local:2888:3888 server.2=zk-1.zk-hs.kafka.svc.cluster.local:2888:3888 server.3=zk-2.zk-hs.kafka.svc.cluster.local:2888:3888 ``` ```bash kubectl exec zk-0 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: follower kubectl exec zk-1 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: leader kubectl exec zk-2 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: follower ``` ```bash kubectl exec zk-0 -n public-service -- zkCli.sh create /hello lzx WATCHER:: WatchedEvent state:SyncConnected type:None path:null Created /hello kubectl exec zk-1 -n public-service -- zkCli.sh get /hello WATCHER:: WatchedEvent state:SyncConnected type:None path:null lzx cZxid = 0x10000003e ctime = Fri Jun 12 09:14:05 UTC 2020 mZxid = 0x10000003e mtime = Fri Jun 12 09:14:05 UTC 2020 pZxid = 0x10000003e cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 ``` 可以看到,zookeeper集群状态正常,zk-1 是 leader ,在 zk-0 创建的数据在集群中所有的服务上都是可用的。 - kafka测试: master1 进入 kafka-0 ,创建topic test,进入生产者窗口, ```bash kubectl exec -it kafka-0 -n public-service -- bash kafka@kafka-0:/$ kafka-topics.sh --create \ --topic test \ --zookeeper zk-0.zk-hs.kafka.svc.cluster.local:2181,zk-1.zk-hs.kafka.svc.cluster.local:2181,zk-2.zk-hs.kafka.svc.cluster.local:2181 \ --partitions 3 \ --replication-factor 2 Created topic test. kafka@kafka-0:/$ kafka-topics.sh --list --zookeeper zk-0.zk-hs.kafka.svc.cluster.local:2181,zk-1.zk-hs.kafka.svc.cluster.local:2181,zk-2.zk-hs.kafka.svc.cluster.local:2181 test kafka@kafka-0:/$ kafka-console-producer.sh --topic test --broker-list localhost:9092 ``` master2 进入 kafka-1 ,进入消费者窗口, ```bash kubectl exec -it kafka-1 -n public-service --bash kafka@kafka-0:/$ kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 ``` 此时在生产者窗口输入的消息,可以在消费者窗口看到。 kafka消息的生产和消费正常,kafka集群正常。k8s部署kafka集群完成。 ---