Flink 集群在 Kubernetes 上的部署与运维
HA高可用hadoop集群搭建
零、本地环境搭建
0.1、JDK11下载
国内下载地址,免登录
Index of java-local/jdk/11.0.2+7
java jdk 国内下载镜像地址
1)TUNA镜像 https://mirrors.tuna.tsinghua.edu.cn/Adoptium/
2)HUAWEI镜像 https://repo.huaweicloud.com/java/jdk/
3)injdk https://d.injdk.cn/download/openjdk
其他地址:
1) https://openjdk.java.net
2) 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, 输入cmd
JAVA --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.9
2. 配置 Path
找到系统变量里的 Path → 编辑
新建:
%MAVEN_HOME%\bin
验证是否安装成功
打开 cmd,输入
mvn -v如果出现版本信息,说明安装成功。
配置阿里云镜像(解决下载慢)
Maven 官方仓库在国外,下载极慢,必须换成阿里云镜像。
打开 conf/settings.xml,找到 <mirrors> 标签,添加:
<mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors>0.3、下载IDEA
idea配置maven环境和java环境
一、docker国内镜像地址
1、https://docker.aityp.com/image/docker.io/nodered/node-red:latest
2、https://docker.xuanyuan.me/
3、https://docker.aityp.com/image/docker.io/nodered/node-red:latest
4、毫米镜像 https://1ms.run/search?query=hdfs
5、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 pods
kubectl get deployments
kubectl get services
2.3、获取资源的详细信息
kubectl describe pod <pod-name>
kubectl describe deployment <deployment-name>2.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-port>2.6、删除运行软件
Kubectl delete 类型 镜像名称
如kubectl delete service flink-jobmanager
kubectl delete pod <pod-name>
kubectl delete deployment <deployment-name>
kubectl delete -f <file.yaml>
2.7、查看日志
查看 Pod 的日志:
kubectl logs <pod-name>
查看某个容器的日志(如果 Pod 中有多个容器)
kubectl logs <pod-name> -c <container-name>
2.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-0 Warning 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/PVC
kubectl 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