传统应用容器化迁移实践

背景介绍:从传统部署到容器化迁移的必要性

在过去的运维工作中,某企业一直依赖于传统的物理机和虚拟机部署方式。然而,随着业务的快速发展和应用规模的不断扩大,传统部署方式的局限性逐渐显现:

  1. 资源利用率低:物理机和虚拟机资源分配固定,导致资源利用率普遍偏低,部分服务器长期处于高负载状态,而另一些服务器却闲置。
  2. 部署复杂且耗时:每次应用部署都需要手动配置环境,耗时长且容易出错,尤其是在高峰期的紧急部署中,效率问题尤为突出。
  3. 扩展性差:面对业务高峰期的流量波动,传统的垂直扩展方式无法快速响应,导致资源浪费和用户体验下降。

为了应对这些挑战,我们项目组接到指示决定将传统应用逐步迁移至容器化平台,并最终采用Kubernetes作为容器编排工具。这一决策得到了开发和运维主管的支持,并成立了专项小组,由我负责具体实施和运维支持。

方案设计:技术选型与规划

在方案设计阶段,我们进行了详细的调研和讨论,最终确定了以下技术栈和实施策略:

  1. 容器化工具选择:采用Docker作为容器化工具,因其广泛的社区支持和成熟的生态系统。
  2. 容器编排工具选择:选择Kubernetes作为容器编排工具,以实现应用的自动化部署、扩展和管理。
  3. 网络插件选择:采用Calico作为网络插件,以支持跨主机的网络策略和高性能的网络通信。
  4. 存储方案选择:使用Ceph作为分布式存储,结合Kubernetes的PersistentVolume和PersistentVolumeClaim,实现存储资源的动态分配。

以下是具体的实施规划:

  • 第一阶段:完成核心应用的Docker化改造,编写Dockerfile和docker-compose文件,确保应用能够在容器环境中稳定运行。
  • 第二阶段:搭建Kubernetes集群,配置网络和存储,迁移应用至Kubernetes平台,实现自动化部署和扩展。
  • 第三阶段:优化集群性能,监控资源使用情况,调整资源配额和调度策略,确保集群的高效运行。
实施过程:分阶段推进迁移
第一阶段:Docker化改造

在Docker化改造过程中,我们遇到了一些挑战,例如如何处理应用的依赖和服务间的调用关系。通过详细的调研和测试,我们制定了以下解决方案:

  1. 编写Dockerfile:为每个应用编写Dockerfile,确保镜像的构建和运行环境一致。
    FROM openjdk:11-jdk
    LABEL name=Nova_CFC
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    EXPOSE 8080
    CMD ["java", "-jar", "app.jar"]
    
  2. 编写docker-compose文件:定义服务间的依赖关系和网络配置,实现一键式部署。
    version: '3'
    services:app:build: .ports:- "8080:8080"depends_on:- dbdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: appdb
    
第二阶段:Kubernetes集群搭建与应用迁移

在Kubernetes集群搭建过程中,我们遇到了一些问题,例如网络配置不正确导致服务无法通信。通过仔细排查和调整,我们最终解决了这些问题。

  1. 安装Kubernetes:使用Kubeadm工具搭建Kubernetes集群。

    # 安装Docker
    yum install -y docker
    systemctl start docker
    systemctl enable docker# 安装Kubeadm、Kubelet和Kubectl
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet
    systemctl start kubelet# 初始化集群
    kubeadm init --apiserver-advertise-address=192.168.1.100 --apiserver-bind-port=6443
    
  2. 配置网络插件:安装Calico网络插件,确保集群内的网络通信正常。

    kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
    
  3. 迁移应用至Kubernetes:将Docker化改造后的应用迁移至Kubernetes平台,编写Kubernetes资源文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: app-deployment
    spec:replicas: 3selector:matchLabels:app: apptemplate:metadata:labels:app: appspec:containers:- name: appimage: your-repository/app:1.0ports:- containerPort: 8080resources:limits:cpu: 500mmemory: 512Mi
    
第三阶段:优化与监控

在应用迁移至Kubernetes平台后,我们对集群进行了优化和监控,确保资源的高效利用和应用的稳定运行。

  1. 资源配额设置:为每个命名空间设置资源配额,防止资源争用。

    apiVersion: v1
    kind: ResourceQuota
    metadata:name: app-quota
    spec:hard:cpu: 2memory: 4Girequests.cpu: 1requests.memory: 2Gi
    
  2. 监控与报警:集成Prometheus和Grafana,监控集群和应用的运行状态,设置报警规则。

    # 安装Prometheus
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    helm install prometheus prometheus-community/prometheus
    
成果总结:量化效果与经验总结

通过本次容器化迁移项目,我们取得了显著的成果:

  1. 资源利用率提升:CPU利用率从原来的30%提升至60%,内存利用率从40%提升至70%。
  2. 部署效率提升:部署时间从原来的30分钟缩短至5分钟,实现了自动化部署。
  3. 成本优化:通过资源的高效利用,硬件成本降低了30%,节省了约¥86万/年的IDC费用。
  4. 运维效率提升:通过Kubernetes的自动化管理,运维效率提升了50%,故障恢复时间从4小时缩短至30分钟。

在项目实施过程中,我作为运维工程师,学到了很多知识和思路,并且我主要完成了:

  1. 技术支持:负责Kubernetes集群的搭建和配置,解决网络和存储问题。
  2. 资源优化:通过监控和分析,优化资源配额和调度策略,提升资源利用率。
  3. 团队协作:与开发和运维主管紧密合作,制定迁移方案,协调资源,确保项目顺利推进。
结语

本次容器化迁移项目不仅提升了系统的稳定性和扩展性,也提升了团队的技术水平和协作能力。作为运维工程师,我深刻体会到技术变革的重要性,也认识到团队协作在项目成功中的关键作用。未来,我们将继续优化Kubernetes集群,探索更多的云原生技术,为业务的持续发展提供坚实的技术保障。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41196.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt的文件操作

Qt的文件操作 由于 Qt 的发展比较早,在 C 尚未提供标准的文件流操作时,Qt 就研发出了自己的文件操作并沿用至今。Qt 提供了丰富的文件操作类,包括 QFile 文件操作和读写类以外,还有 QSaveFile(安全文件保存类&#xf…

Netty源码—7.ByteBuf原理四

大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.ByteBuf的回收 13.Page级别的内存分配 (1)Page级别的内存分配的入口 (2)Page级别的内存分配的流程 (3)尝试在现…

Leetcode 最小基因变化

java solution&#xff1a;BFS 算法 class Solution {public int minMutation(String startGene, String endGene, String[] bank) {//首先创建一个集合来存储有效基因串Set<String> bankSet new HashSet<>(Arrays.asList(bank));if(!bankSet.contains(endGene))…

Hive工作所遇问题之Hive -e命令中使用正则表达式问题

前言 今天工作因为之前建表时&#xff0c;看不到数据&#xff0c;导致建表的字段格式有问题&#xff0c;然后使用split函数拆分时&#xff0c;发现是正则表达式使用的问题。 下面来说明问题 一、数据准备 --创建码表&#xff1a; create table hive_sql.d_type( type_id st…

自动化框架的设计与实现

一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”&#xff0c;就感觉非常神秘&#xff0c;非常遥远。大家之所以觉得复杂&#xff0c;是因为落地运用起来很复杂&#xff1b;每个公司&#xff0c;每个业务及产品线的业务流程都不一样&#xff0c;所以就导致了“自动化…

如何防止用户大量使用同一用户名恶意攻击

如何防止用户大量使用同一用户名恶意攻击&#xff1f; 在数据库层兜底 使用redisson分布式锁 当用户第一次在毫秒级别使用大量的请求去注册 由于布隆过滤器中还没没有缓存这些数据 大量请求打在数据库上可能会造成数据库宕机 因此可以使用reddison分布式锁来保证只有一个…

超详细docker部署搭建私有仓库harbor

一、安装docker 确保你的服务器上已经安装了 Docker 如果没有安装&#xff0c;按以下方法安装 yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io 启动d…

541. 反转字符串 II

541. 反转字符串 IIhttps://leetcode.cn/problems/reverse-string-ii/ 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。…

力扣HOT100之普通数组:53. 最大子数组和

这道题目我用贪心做的&#xff0c;感觉用贪心的思路比较简单&#xff0c;以后要是面试碰到这道题就直接用贪心好了&#xff0c;这道题用贪心的核心思想就是不断将数组元素i加入总和sum&#xff0c;如果sum比当前维护的最大值result更大&#xff0c;说明当前遍历到的i是正数&…

muduo库的思路梳理

前言 对于muduo库源码的剖析我发现还是有些混乱的&#xff0c;所以这里再次梳理一下muduo网络库争取可以简单明了 首先对于muduo库来说&#xff0c;不能想的得太过于复杂&#xff0c;它无非就是一个线程池加上epoll组成的网络库 这里我们从用的角度出发理解muoduo网络库 #inc…

【C语言系列】数据在内存中存储

数据在内存中存储 一、整数在内存中的存储二、大小端字节序和字节序判断2.1什么是大小端&#xff1f;2.2练习2.2.1练习12.2.2练习22.2.3练习32.2.4练习42.2.5练习52.2.6练习6 三、浮点数在内存中的存储3.1练习3.2浮点数的存储3.2.1 浮点数存的过程3.2.2 浮点数取的过程 3.3题目…

C++学习之网盘项目单例模式

目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…

多模态自动驾驶混合渲染HRMAD:将NeRF和3DGS进行感知验证和端到端AD测试

基于3DGS和NeRF的三维重建技术在过去的一年中取得了快速的进步&#xff0c;动态模型也变得越来越普遍&#xff0c;然而这些模型仅限于处理原始轨迹域内的对象。 HRMAD作为一种混合方案&#xff0c;将传统的基于网格的动态三维神经重建和物理渲染优势结合&#xff0c;支持在任意…

质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全

在食品生产加工领域&#xff0c;质量安全是贯穿全产业链的生命线。随着《食品安全法》对全过程追溯要求的深化&#xff0c;传统实验室管理模式已难以满足高效、精准的质量管控需求。质检实验室信息管理系统&#xff08;LIMS&#xff09;作为数字化升级的核心工具&#xff0c;正…

树莓派超全系列文档--(8)RaspberryOS实用程序

RaspberryOS实用程序 实用程序kmsprintvclogvcgencmdvcosversionget_throttledmeasure_tempmeasure_clock [clock]measure_volts [block]otp_dumpget_config [configuration item|int|str]get_mem typecodec_enabled [type]mem_oommem_reloc_statsread_ring_osc 文章来源&#…

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…

文件上传绕过的小点总结(6)

14.文件上传&#xff08;文件包含漏洞&#xff09;二次渲染 很多服务器为了防止代码嵌入图片&#xff0c;通常会将上传的图片进行重新生成处理&#xff0c;包括文件格式转换等等&#xff0c;嵌入的恶意代码很容易被改掉。于是产生了二次渲染&#xff0c;二次渲染的原理就是找到…

x-cmd install | Wuzz - Web 开发与安全测试利器,交互式 HTTP 工具

目录 安装配置快捷键上下文相关搜索待办事项 在 Web 开发和安全测试中&#xff0c;我们经常需要检查和修改 HTTP 请求。浏览器自带的开发者工具虽然好用&#xff0c;但复制出来的 cURL 命令冗长且难以编辑。今天要介绍的是 Wuzz&#xff0c;一款交互式命令行 HTTP 工具&#xf…

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…

搭建k8s集群的可观测体系(log和metric)(已踩完坑)

Loki是日志聚合系统,属于云原生技术,由Grafana Labs开发。它专注于轻量级和高效的日志管理,特别是适合Kubernetes环境。而Prometheus-operator则是用来管理Prometheus监控系统的,简化部署和配置,处理监控数据,尤其是指标(metrics)的收集和告警。 本片文档踩坑结束,使用…