Flink 集群在 Kubernetes 上的部署与运维

发布时间:2026/7/17 6:49:14
Flink 集群在 Kubernetes 上的部署与运维 HA高可用hadoop集群搭建零、本地环境搭建0.1、JDK11下载国内下载地址,免登录Index of java-local/jdk/11.0.2+7java jdk 国内下载镜像地址1)TUNA镜像https://mirrors.tuna.tsinghua.edu.cn/Adoptium/2)HUAWEI镜像https://repo.huaweicloud.com/java/jdk/3)injdkhttps://d.injdk.cn/download/openjdk其他地址:1) https://openjdk.java.net2) https://jdk.java.net/archive/3)https://github.com/openjdk/jdk等待安装结束, 配置环境变量(此处省略)window + s 快捷键,输入env,进入环境变量配置变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk-11.0.2(JDK的安装路径,这里以你自己的安装路径为准)新建CLASSPATH变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面是有一个点的),配置好之后如下图,这里是可以复制粘贴的点击确定配置path,找到path,双击或者点编辑,最后一行添加输入%JAVA_HOME%\bin点击确定windows + R, 输入cmdJAVA --version,打印JAVA版本号说明配置环境成功0.2、maven下载安装国内下载地址把下载好的apache-maven-xxx-bin.zip解压到一个不带中文、不带空格的路径D:\Program Files\apache-maven-3.8.9目录结构说明:bin:包含 mvn 命令 conf:配置文件所在目录 lib:依赖 jar 包配置环境变量(关键步骤)1. 新建 MAVEN_HOME此电脑 → 右键属性 → 高级系统设置 → 环境变量系统变量 → 新建变量名:MAVEN_HOME变量值:你的 Maven 路径,如D:\Program Files\apache-maven-3.8.92. 配置 Path找到系统变量里的 Path → 编辑新建:%MAVEN_HOME%\bin验证是否安装成功打开 cmd,输入mvn -v如果出现版本信息,说明安装成功。配置阿里云镜像(解决下载慢)Maven 官方仓库在国外,下载极慢,必须换成阿里云镜像。打开 conf/settings.xml,找到 mirrors 标签,添加:mirrors mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror /mirrors0.3、下载IDEAidea配置maven环境和java环境一、docker国内镜像地址1、https://docker.aityp.com/image/docker.io/nodered/node-red:latest2、https://docker.xuanyuan.me/3、https://docker.aityp.com/image/docker.io/nodered/node-red:latest4、毫米镜像 https://1ms.run/search?query=hdfs5、flink1.18下载https://mirrors.aliyun.com/apache/flink/flink-1.18.1/二、K8s 基础常用命令 Kubernetes 是 Google 开源的容器编排系统,用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。它通过管理控制、高效的任务包装、超售、和进程级别性能隔离实现了高利用率,它支持高可用性应用程序与运行时功能,最大限度地减少故障恢复时间,减少相关故障概率的调度策略,该项目的目的是实现资源管理的自动化以及跨多个数据中心的资源利用率最大化,使开发者能够更简单、直接地应用。2.0、常用命令kubectl cluster-info- 显示集群主节点和服务的地址 kubectl version- 显示客户端和服务器版本信息 kubectl config view- 显示当前kubeconfig配置 kubectl get componentstatuses- 查看各组件健康状态 资源操作类 kubectl get resource- 列出资源 示例:kubectl get pods,kubectl get services kubectl describe resource name- 显示资源的详细信息 示例:kubectl describe pod my-pod kubectl create -f filename- 根据配置文件创建资源 kubectl apply -f filename- 应用配置文件(创建或更新) kubectl delete -f filename- 根据配置文件删除资源 kubectl delete resource name- 删除指定资源 示例:kubectl delete pod my-pod Pod操作类 kubectl logs pod-name- 查看Pod日志 kubectl logs -f pod-name- 实时查看Pod日志 kubectl exec -it pod-name -- /bin/bash- 进入Pod的交互式shell kubectl port-forward pod-name local-port:pod-port- 端口转发到本地 kubectl cp pod-name:path local-path- 从Pod复制文件到本地 kubectl cp local-path pod-name:path- 从本地复制文件到Pod 部署管理类 kubectl rollout status deployment/name- 查看部署状态 kubectl rollout history deployment/name- 查看部署历史 kubectl rollout undo deployment/name- 回滚到上一个版本 kubectl scale deployment name --replicas=number- 扩展/缩减副本数 kubectl autoscale deployment name --min=min --max=max --cpu-percent=percent- 设置自动扩缩容 调试类 kubectl top pod- 显示Pod的资源使用情况 kubectl top node- 显示节点的资源使用情况 kubectl get events --sort-by='.metadata.creationTimestamp'- 查看事件并按时间排序 常用参数说明 -n, --namespace- 指定命名空间 示例:kubectl get pods -n kube-system -o wide- 显示更详细的信息 -o yaml- 以YAML格式输出 -o json- 以JSON格式输出 --all-namespaces- 所有命名空间 -l, --selector- 根据标签选择器过滤 示例:kubectl get pods -l app=nginx --watch或-w- 监视资源变化 --dry-run=client- 试运行,不实际执行 删除运行资源 kubectl delete 类型 名称 kubectl delete service flink-jobmanager kubectl delete pod pod-name kubectl delete deployment deployment-name kubectl delete -f file.yaml 查看日志 kubectl logs pod-name kubectl logs pod-name -c container-name 查看 Pod 状态 kubectl get pods -l app=zookeeper 检查 Service 状态 kubectl get svc zookeeper-service 排查 Pod 错误 kubectl describe pod zookeeper-0 错误说明:0/7 nodes available 表示无可用节点,因未绑定 PVC,缺少可分配 PV 检查存储卷 kubectl get pv 状态要求:Available 为可用,Bound 为已占用2.1、列出所有资源类型如 (Pods、Deployments、Services 等)kubectl get all2.2、获取特定资源的详细信息kubectl api-resourceskubectl get podskubectl get deploymentskubectl get services2.3、获取资源的详细信息kubectl describe pod pod-namekubectl describe deployment deployment-name2.4、查看集群版本kubectl version2.5、创建/ 更新或应用资源创建应用资源kubectl create -f zookeeper.yaml 更新或应用资源kubectl apply -f zookeeper.yaml创建特定资源kubectl create deployment deployment-name --image=image kubectl create service clusterip service-name --tcp=port:target-port2.6、删除运行软件Kubectl delete 类型 镜像名称如kubectl delete service flink-jobmanagerkubectl delete pod pod-namekubectl delete deployment deployment-namekubectl delete -f file.yaml2.7、查看日志查看 Pod 的日志:kubectl logs pod-name查看某个容器的日志(如果 Pod 中有多个容器)kubectl logs pod-name -c container-name2.8、 查看应用状态2.8.1、查看Pod状态kubectl get pods -l app=zookeeper//zookeeper是名称Pod的状态是Running才是正常2.8.2、检查Service状态kubectl get svc zookeeper-service //zookeeper-service 是名称若状态是Pending,表示启动失败查看原因kubectl describe pod zookeeper-0Warning FailedScheduling 2m47s (x1 over 3m47s) default-scheduler 0/7 nodes are available: 7 pod has unbound immediate PersistentVolumeClaims.这个错误信息表明,Kubernetes无法调度你的Pod,因为所有的节点上都有未绑定的PersistentVolumeClaims(PVCs)。具体来说,这意味着Kubernetes无法找到可用的PersistentVolumes(PVs)来满足你的PVC请求!检查PersistentVolumes确保你有足够的PVs可用,并且这些PVs没有被其他PVC绑定。你可以使用以下命令查看PV的状态:kubectl get pv确保PV的状态是Available,而不是Bound或其他状态。2.8.3、创建pv文件Flink 状态默认存储在内存,任务重启会丢失。 使用RocksDB做本地状态存储,必须配合K8s 持久卷 PV/PVC实现数据持久化,避免 Pod 重建后状态丢失。创建 PV(k8s-pv.yaml)apiVersion: v1 kind: PersistentVolume metadata: name: flink-rocksdb-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/data/flink-rocksdb创建 PVC(k8s-pvc.yaml)apiVersion: v1 kind: PersistentVolumeClaim metadata: name: flink-rocksdb-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi执行创建命令kubectl apply -f k8s-pv.yaml kubectl apply -f k8s-pvc.yaml验证状态(关键)查看 PV/PVCkubectl get pv #查看 K8s 集群中所有持久卷(PV) 的状态 kubectl get pvc #查看当前所在命名空间(默认是 default 命名空间)下所有持久卷声明(PVC) 的状态 kubectl get pv -n test #查看 test 命名空间下关联的 PV(并非仅查看 test 命名空间的 PV,因 PV 是集群级,无命名空间属性)查看绑定状态(必须为 Bound)kubectl get pvc flink-rocksdb-pvc -o yaml kubectl get pv flink-rocksdb-pv -o yaml最后出现Bound表示绑定成功删除命令(异常时使用)kubectl delete pvc flink-rocksdb-pvc kubectl delete pv flink-rocksdb-pv三、使用k8s容器搭建flink集