解决Flink提交任务时的LinkageError类加载冲突问题
在 Apache Flink 任务提交到 YARN 集群时,常常会遇到依赖冲突引发的类加载异常,典型表现是: 1Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/flink/util/ChildFirstClassLoader) previously initiated loading for a different type with name "org/apache/kafka/clients/consumer/ConsumerRecord" 这个错误通常表明 Flink 应用程序中的依赖与集群已有环境中的依赖版本发生冲突,导致 JVM 在加载类时无法明确使用哪个版本。本文将结合 Kafka 依赖冲突示例,分享两种可行的排查与解决方案,适用于类似的依赖重复或版本不一致问题。 操作场景复现使用如下命令将 Flink 应用作为 application 模式提交至 YARN: 1./bin/flink...
基于Gitee、Docker、Jenkins、SonarQube和Harbor的最简CI/CD流水线搭建
本文最终实现的效果是:只需要在idea中提交代码到git远程仓库后,登陆Jenkins点一下“立即构建”,即可可自动触发CI/CD流水线进行自动部署项目。 博主在网上教程的基础上,进行了进一步封装、简化了CI/CD的部署搭建教程。特点如下: 使用的docker、jenkins等组件版本都是最新的。 各个组件的镜像版本都是固定版本号的,不会因为后面官方更新镜像,导致教程失效。 编写shell脚本,帮助用户可以快速安装、配置各个组件(jenkins的插件、镜像、jenkins中使用docker等都已经帮助用户完成了) 没有任何坑(坑我的已经踩过了,跟着我的教程,百分百可以一遍过。 环境准备至少需要一台 Centos7 服务器,并都需要完成下面的配置要求: docker、 docker-compose...
CentOS系统用户管理入门指南
在CentOS系统中,用户管理是日常运维中的重要工作。本文将详细介绍如何创建新用户、设置密码、赋予sudo权限以及切换用户,帮助您高效、安全地管理系统用户。 创建新用户账户使用adduser命令可以便捷地创建一个新用户账户。示例如下: 1sudo adduser 用户名 该命令会自动创建用户的主目录及相关配置文件。 需要使用sudo权限执行该命令,确保有足够的权限来添加用户。 设置用户密码为新建用户设置登录密码,确保账户安全。执行以下命令: 1sudo passwd 用户名 系统会提示您输入并确认新密码。请设置一个强密码以保护用户账户不被非法访问。 授予sudo权限默认情况下,新用户无法执行需要管理员权限的操作。如果需要给予用户sudo权限,以允许其执行管理任务,可以将用户添加到wheel组: 1sudo usermod -aG wheel...
CentOS7与RockyLinux系统时间同步指南
系统时间的准确性对于服务器的稳定运行至关重要。无论是日志记录的准确性、安全认证的时效性,还是数据库事务与分布式系统的协调,时间均扮演关键角色。本文将全面介绍如何在 CentOS 7 和 Rocky Linux 9.4 上配置时间同步方案,重点对比传统工具 ntpdate 与现代工具 chrony 的使用方法和最佳实践,助您打造高效、稳定的服务器环境。 CentOS 7 上使用 ntpdate 进行时间同步在 CentOS 7 中,ntpdate 是一个常用但渐显过时的时间同步工具,适合快速手动同步系统时间,简洁易用但不适合长期自动同步。 安装 ntpdate1sudo yum install -y ntpdate 手动同步系统时间下面命令使用阿里云的 NTP 服务器作为时间源,立即同步系统时间: 1sudo ntpdate ntp.aliyun.com 同步硬件时钟为了确保硬件时钟(RTC)与系统时钟一致,建议执行: 1sudo hwclock --systohc 这有助于避免重启后时间偏差。 配置定时同步任务(可选)虽然不推荐频繁使用 ntpdate...
Rainbond在线快速一键安装K8s集群实战指南
新人学习k8s最难的第一步就是安装k8s集群,笔者为了找到一个省心省力的安装方式也是煞费苦心。前前后后使用过kubeadm、kubekey、rancher等方式,但是无不一存在的大大小小的坑, 属实让我吃了不少的罪。但是今天介绍的Rainbond,真的惊艳到了我,全程一二十分钟、零报错,一个k8s集群从0到1就起来了【当然也有坑,但是我已经解决了】。真的是小白的福利哦,下面就跟着我开始吧! 系统环境 最好之前把防火墙关闭 集群规划 完全可以不按照笔者的规则来,甚至只需要一个节点也可以 角色 IP地址 hostname 配置(最少) 主节点 10.0.0.87 master 2核4G 硬盘40G 普通节点1 10.0.0.88 node1 2核4G 硬盘40G 普通节点2 10.0.0.89 node2 2核4G 硬盘40G 普通节点3 10.0.0.90 node2 2核4G 硬盘40G 建议您的操作系统处于干净状态(不安装任何其他软件),否则可能会发生冲突。 集群安装成功后的版本情况: docker:...
Jenkins容器中如何使用Docker命令实现镜像构建
在基于 Jenkins 和 Docker 构建的 DevOps 流水线中,常见的需求是需要在 Jenkins 容器内部执行 Docker 命令,用于构建、打包镜像等操作。然而,由于 Jenkins 本身运行在容器中,Docker 环境也被隔离,直接调用 Docker 命令通常会失败。本文将重点介绍如何高效、安全地解决这一问题,实现容器内调用宿主机 Docker 引擎的最佳实践。 核心问题Jenkins 容器内的 Docker 命令执行失败,主要源于如下原因: 容器内缺少 Docker 客户端二进制文件 容器无法访问宿主机的 Docker 守护进程(docker daemon) 访问 docker.sock 权限受限 所以,解决方案实际上是让 Jenkins 容器通过共享宿主机环境的方式,调用宿主机的 Docker 引擎,而不是在容器内独立运行 Docker。 完整的 Docker Compose 配置示例以下是一个完整的示例docker-compose.yaml,展示如何部署可调用 Docker 的 Jenkins...
浅谈Dockerfile中RUN、CMD与ENTRYPOINT
在容器化开发中,理解 Dockerfile 的指令至关重要,尤其是与命令执行相关的 RUN、CMD 和 ENTRYPOINT。它们虽关联紧密,但作用时机与目的存在本质差异。本文将详细剖析这三个指令的功能、区别及最佳实践,助力你编写高效且灵活的 Dockerfile。 RUN:构建镜像时执行命令 执行阶段:RUN 指令在镜像构建期间运行,执行结果会被写入生成的镜像中。 主要用途:安装软件包、配置环境、修改文件系统。例如安装依赖、创建文件夹等。 语法示例: 12RUN apt-get update && apt-get install -y curlRUN mkdir /app 镜像层影响:每个 RUN 指令都会生成一个新的镜像层,因此合理合并命令可以减少镜像层数,优化镜像体积。 CMD:指定容器启动时的默认命令与参数 执行阶段:CMD 指令是在容器运行时执行,用以设置默认启动命令或参数。 可被覆盖:通过 docker run 提供命令参数时会覆盖 CMD 指令。 用途场景: 如果 Dockerfile 无 ENTRYPOINT,则 CMD...
快速配置Docker镜像加速与日志管理
Docker 是现代容器化应用的核心技术,配置合适的镜像加速器和日志管理策略,对于提升构建性能和系统稳定性至关重要。本文将指导您如何快速配置国内可用的 Docker 镜像加速器,同时优化日志文件大小与轮转,以及设置容器数据存储路径,助力打造高效且可维护的容器环境。 配置目标 使用国内可靠的镜像加速器,提高镜像拉取速度 优化 Docker 日志文件大小和轮转策略,避免日志爆满 统一数据存储根目录,便于管理与备份 使用 systemd 作为 CGroup 驱动,提高兼容性与性能 执行配置命令请通过以下命令步骤完成配置: 123456789101112131415161718192021222324# 创建 Docker 配置目录(如不存在)sudo mkdir -p /etc/docker# 写入 daemon.json 配置文件sudo tee /etc/docker/daemon.json <<-'EOF'{ "exec-opts":...
修改KubeSphere外网访问端口
KubeSphere 作为一款强大的容器管理平台,其默认的外网访问端口是 30880。在实际企业网络环境中,出于安全策略或网络规划的考虑,用户可能需要将该端口调整为其它符合公司规范的端口号,以确保访问的灵活性和合规性。本文将详细介绍如何修改 KubeSphere 的外网访问端口,帮助您高效便捷地完成定制化配置。 了解 NodePort 端口范围的重要性KubeSphere 的外网访问通常是通过 Kubernetes 的 NodePort 类型服务实现的。NodePort 允许将集群内部服务暴露在指定的端口上,默认范围通常是 30000 到 32767。若要使用非默认端口,则需要先确保 Kubernetes 集群允许该端口范围,否则服务暴露可能会失败或不被访问。 因此,修改访问端口前,需要先确认或调整 Kubernetes 的 NodePort 端口范围,使新端口被系统支持,以保证后续配置有效。 调整 NodePort 端口范围示例请参考对应 Kubernetes 版本的官方文档,或参考我的完整教程:k8s 修改默认 NodePort 端口范围...
K8s修改NodePort端口范围详细指南
在 Kubernetes 集群中,NodePort 是一种常用的 Service 类型,默认分配的端口范围是 30000-32767。这一范围在某些企业网络环境下可能存在限制,导致无法使用默认端口。本文将详细介绍如何修改 Kubernetes 默认 NodePort 端口范围,以满足不同网络策略和安全需求。 为什么需要修改 NodePort 端口范围默认的 NodePort 端口范围较大且固定,但某些场景下: 企业防火墙策略限制了开放端口范围; 端口冲突需要调整可用端口区间; 集群资源隔离与管理需要定制端口范围。 因此,调整 NodePort 端口范围成为保障集群服务正常访问的重要操作。 修改 kube-apiserver 启动参数来调整端口范围Kubernetes API Server 通过参数 --service-node-port-range 来定义 NodePort 的端口范围。通过调整该参数即可灵活设置所需端口区间。 定位配置文件若您的 Kubernetes 集群是基于 kubeadm 安装,配置文件位于 Master...
