背景

服务器配置

节点 内网IP 公网IP 配置
ds-2 10.80.239.78
8C16G
ds-8 10.80.239.84
8C16G
ds-9 10.80.239.85
8C16G
ds-10 10.80.239.86
8C16G
ds-11 10.80.239.87
8C16G

软件版本

软件 版本
centos 7.6
docker 20.10.7
docker-compose 2.2.3
kubelet 1.20.9
kubeadm 1.20.9
kubectl 1.20.9
harbor 2.6.0
helm 3.5.4

seatunnel

镜像版本

镜像 版本
k8s.gcr.io/kube-apiserver 1.20.9
k8s.gcr.io/kube-controller-manager 1.20.9
k8s.gcr.io/kube-scheduler 1.20.9
k8s.gcr.io/kube-proxy 1.20.9
k8s.gcr.io/pause 3.2
k8s.gcr.io/etcd 3.4.13-0
k8s.gcr.io/coredns 1.7.0

创建初始文件夹

  1. #/Users/keyboardone/同步空间/software
  2. mkdir -p /opt/software
  3. cd /opt/software/k8s/
  4. chmod 755 /opt/software/k8s/*.sh

前置工作

安装docker

docker安装

安装k8s

局域网离线部署k8s集群

安装helm

helm安装
helm部署私库

安装seatunnel

参考官网:https://seatunnel.apache.org/docs/2.1.1/start/kubernetes

seatunnel版本:2.1.1

下载镜像

编辑Dockerfile

  1. vi Dockerfile
  1. FROM flink:1.13
  2. ENV SEATUNNEL_VERSION="2.1.0"
  3. RUN wget https://archive.apache.org/dist/incubator/seatunnel/${SEATUNNEL_VERSION}/apache-seatunnel-incubating-${SEATUNNEL_VERSION}-bin.tar.gz
  4. RUN tar -xzvf apache-seatunnel-incubating-${SEATUNNEL_VERSION}-bin.tar.gz
  5. RUN mkdir -p $FLINK_HOME/usrlib
  6. RUN cp apache-seatunnel-incubating-${SEATUNNEL_VERSION}/lib/seatunnel-core-flink.jar $FLINK_HOME/usrlib/seatunnel-core-flink.jar
  7. RUN rm -fr apache-seatunnel-incubating-${SEATUNNEL_VERSION}*

构建

  1. docker build -t seatunnel:2.1.0-flink-1.13 -f Dockerfile .

加载镜像到minikube

  1. minikube image load seatunnel:2.1.0-flink-1.13

k8s安装cert文件

  1. #下载
  2. wget https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml
  3. #部署
  4. kubectl create -f cert-manager.yaml

helm安装Flink Kubernetes Operator

  1. helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-0.1.0/
  2. helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator

验证

验证pod进程

  1. #alias kubectl="minikube kubectl --"
  2. kubectl get pod -A

image.png

验证seatunnel应用

构造虚拟数据流

  1. vi flink.streaming.conf
  2. #新增如下内容
  3. env {
  4. execution.parallelism = 1
  5. }
  6. source {
  7. FakeSourceStream {
  8. result_table_name = "fake"
  9. field_name = "name,age"
  10. }
  11. }
  12. transform {
  13. sql {
  14. sql = "select name,age from fake"
  15. }
  16. }
  17. sink {
  18. ConsoleSink {}
  19. }

拷贝配置文件到nfs目录下

image.png

编写seatunnel的yaml部署文件

  1. vi seatunnel-flink.yaml

新增如下内容

  1. apiVersion: flink.apache.org/v1alpha1
  2. kind: FlinkDeployment
  3. metadata:
  4. namespace: default
  5. name: seatunnel-flink-streaming-example
  6. spec:
  7. #image: seatunnel:2.1.0-flink-1.13
  8. image: ren:8088/keyboardone/seatunnel:2.1.0-flink-1.13
  9. flinkVersion: v1_14
  10. flinkConfiguration:
  11. taskmanager.numberOfTaskSlots: "2"
  12. serviceAccount: flink
  13. jobManager:
  14. replicas: 1
  15. resource:
  16. memory: "2048m"
  17. cpu: 1
  18. taskManager:
  19. resource:
  20. memory: "2048m"
  21. cpu: 2
  22. podTemplate:
  23. spec:
  24. containers:
  25. - name: flink-main-container
  26. volumeMounts:
  27. - mountPath: /data
  28. name: config-volume
  29. volumes:
  30. - name: config-volume
  31. hostPath:
  32. path: "/nfs/data"
  33. type: Directory
  34. job:
  35. jarURI: local:///opt/flink/usrlib/seatunnel-core-flink.jar
  36. entryClass: org.apache.seatunnel.SeatunnelFlink
  37. args: ["--config", "/data/flink.streaming.conf"]
  38. parallelism: 2
  39. upgradeMode: stateless

执行部署

  1. kubectl apply -f seatunnel-flink.yaml

验证

验证服务

  1. kubectl get svc

image.png

查看日志

  1. kubectl logs -f deploy/seatunnel-flink-streaming-example

暴露端口

  1. kubectl port-forward svc/seatunnel-flink-streaming-example-rest 8081

Now the Flink Dashboard is accessible at localhost:8081.

打印日志

  1. kubectl logs \
  2. -l 'app in (seatunnel-flink-streaming-example), component in (taskmanager)' \
  3. --tail=-1 \
  4. -f

image.png

删除部署

  1. kubectl delete -f seatunnel-flink.yaml