基于kubernetes的自动化部署的研究与应用

 2022-06-12 08:06

论文总字数:22997字

摘 要

近年来随着互联网业务不断的蓬勃发展,单体应用模式已经不能满足开发者的需求了,微服务架构则应运而生。由于微服务业务中接口服务数量庞大等问题,运维人员无法只依靠自己来对其进行部署操作。此时,DevOps概念开始变得火热起来,开发人员和运维人员需要携手将整个服务部署过程自动化,来极大地提升工作效率。

本文章目标为探究并实现基于Kubernetes的自动化部署系统,通过分析如今开发团队与运维团队的不足之处以及传统部署方式的缺点,得出自动化部署的需求及目标。根据目标初步设计出自动化部署系统,并以此为基础找到能满足自动化部署系统的工具来将其实现。通过对当今流行开源软件的比较学习,本文以Kubernetes、Jenkins、Gitlab为核心工具,对其进行了详细讲解并且根据自动化部署系统的关键点阐述了选取原因。本文在最后用一个示例来实现了自动化部署系统,通过环境搭建、Jenkins插件配置、部署信息更改等操作最终成功搭建。

该系统能够自动化进行部署操作,解决了开发团队与运维团队在部署流程中浪费大量时间的问题,极大地提升了工作效率。

关键词:DevOps,Kubernetes,自动化部署,持续集成

Abstract

In recent years, with the continuous development of the Internet business, the single application model has been unable to meet the needs of developers, and the microservice architecture has emerged. Due to the large number of interface services in the micro service business, the operation and maintenance personnel cannot rely on their own to perform deployment operations. At this point, the concept of DevOps began to get hot, and developers and Oamp;M personnel needed to work together to automate the entire service deployment process to greatly improve work efficiency.

The purpose of this article is to explore and implement an automated deployment system based on Kubernetes. By analyzing the shortcomings of today's development teams and the operation and maintenance team and the shortcomings of traditional deployment methods, the needs and goals of automated deployment are derived. According to the target, the automated deployment system is preliminarily designed, and based on this, a tool that can meet the requirements of the automated deployment system is found to be implemented. Through comparative study of popular open source software today, this article takes Kubernetes, Jenkins, and Gitlab as the core tools, explains it in detail and explains the reasons for selection based on the key points of the automated deployment system. At the end of this article, an example was used to implement an automated deployment system. The environment was finally set up successfully, and Jenkins plug-in configuration and deployment information changes were successfully built.

The system can automate the deployment operation and solve the problem that the development team and the operation and maintenance team waste a lot of time in the deployment process, which greatly improves the work efficiency.

KEY WORDS:DevOps,Kubernetes, Automated deployment, Continuous integration

目录

摘要 I

Abstract II

第一章 引言 1

1.1 选题背景和意义 1

1.2 论文主要工作 1

1.3 论文组织结构 1

第二章 相关概念概述 3

2.1 DevOps 3

2.2 持续集成、持续交付、持续部署 3

2.2.1 持续集成 3

2.2.2 持续交付 4

2.2.3 持续部署 5

2.2.4 持续集成流程 6

2.3 自动化代码部署概述 7

2.4 本章小结 8

第三章 系统需求分析 9

3.1 自动化部署需求分析 9

3.2 系统设计要点分析 9

3.3 本章小结 9

第四章 使用工具的介绍 10

4.1 docker 10

4.1.1 docker介绍 10

4.1.2 选择理由 10

4.2 Jenkins 11

4.2.1 Jenkins介绍 11

4.2.2 选择原因 11

4.3 Kubernetes 12

4.3.1 Kubernetes介绍 12

4.3.2 选择原因 14

4.4 Gitlab 15

4.4.1 GitLab简介 15

4.4.2 选择原因 15

4.5 本章小结 15

第五章 系统的实现 16

5.1 实现简介 16

5.2 实现过程 16

5.2.1 安装Gitlab并建立仓库 16

5.2.2 安装并配置Kubernetes(Master节点) 17

5.2.3 搭建Jenkins 17

5.2.4 安装并配置插件 18

5.2.5 新建任务并进行设置 18

5.2.6 修改并上传Kubernetes配置文件 19

5.2.7 Gitlab Webhook触发配置 19

5.2.8 使用插件Kubernetes Continuous Deploy 19

5.3 本章小结 20

第六章 总结与展望 21

6.1 工作总结 21

6.2 未来展望 21

致谢 22

引言

选题背景和意义

随着IT行业的迅速发展与扩张,行业内的IT部门人数迅速增多。在这一人数效益带来新技术层出不穷的结果的同时,也暴露出了许许多多的问题。其中大多数IT部门都会面对的的一个不可忽视的问题就是运维部门与开发部门之间的矛盾,他们的矛盾根源是因为他们有着截然不同的目的。开发者以开发成功为第一要务,能够尽早尽快地上线所开放应用程序使他们所期望的,而运维工作人员则以稳定性为目标。两个团队因为缺乏有效沟通的缘故,往往会使这一问题更加复杂化,开发团队不了解运行环境会发生怎样的变化,而运维团队也不知道开发团队现在的工作情况。为了解决这一矛盾,保证IT部门能正常地完成工作流程,跨职能部门常常会采用DevOps方法。

DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践。这一方法鼓励软件开发者和运维进行更多的沟通协作,这意味着运维团队需要更多的出现在台前的开发者身边,共同提高程序的质量,尤其是那些正在开发、测试和部署的程序。而开发者也需要更多地关注写完代码之后的一些工作,例如测试和部署。而本论文则正是因为DevOps迅速发展这一大环境应运而生。

正因为DevOps的诞生,使开发者和运维在工作中携手,让他们能一起商讨来优化那些存在很久的问题,这当中很大一部分是运维环节的问题。在这之前,整个运维团队会有将近一半的时间都花费在了与部署有关的工作当中:他们一直在执行实际的部署工作或者解决修复执行过程中出现的一些相关问题。这种落后低效率的运维方式已经持续了很多年,甚至部署工作占用了大部分运维人员一半的时间。

为了改变目前运维人员大部分时间工作效率较低的现状,我们必须考虑通过自动化部署来替代目前这种手工任务,从而使得所需的时间减少,大幅度节约运维人员的工作时间。

而另一方面容器Docker是DevOps不可或缺的热门工具,而Kubernetes作为近年来最受欢迎的一个容器编排工具,所以本文选择用它来为基础设施容器化部署提供支持。

论文主要工作

本文主要包括以下两个方面:

首先对传统部署方案进行研究,总结出传统部署方案的一些比较致命急需解决的缺点,并从这些缺点入手,来探讨我们期望的部署方案是什么样的,从而引出自动化部署的主题。

在确定了以自动化部署为目标之后,根据之前确定的一些核心需求,以此为基础设计出我们想要的自动化部署方案。详细探讨这一方案,研究出方案的关键性问题,并据此设计出更为具体的流程:根据设计出的方案来选择工具,并通过实例来展示方案的实现过程。

论文组织结构

第一章引言,介绍了论文的选题背景以及实现此课题的意义,同时介绍了本文的主要内容。

第二章相关概念概述,对于本论文需要了解的一些核心概念做了详细的讲解。

第三章系统需求分析,对于自动化部署做了需求分析,然后根据需求做了功能分析并且研究了其性能要求和可行性。

第四章使用工具的介绍,主要介绍了开发过程中所用到的开发工具以及选择理由。

第五章系统的实现,确定好功能和技术以后,本章通过实际操作来实现自动化部署。

第六章工作总结和展望,对于论文内容进行总结,并探讨了所做工作在未来的一些期望。

相关概念概述

DevOps

DevOps一词是由Development和Operations两个单词的缩写组合而成的,这两个单词分别意为开发和维护。DevOps这一新词强调了软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。

DevOps是为了解决开发部门和运维部门之间的交流困难问题的,它的目标是增强两个团队之间的协作。DevOps打破了过去长久以来开发部门仅仅关注编写程序并提交代码给运维部门,由他们进行部署,而运维部门不参与开发过程的的传统规律。DevOps是一种全新的开发文化,也可以说是一中推动部门间更好地交流和协作以便于更快地构建可靠性更高、质量更好的软件的运动。

DevOps早早就被提出,最近几年有越来越多的相关概念或工具开始出现,例如:微服务架构和容器技术。正因为这些相关的概念和工具的帮助,使得DevOps目前迅速发展,并成为一个非常火热的理念。近年来,微服务架构的提出以及容器技术的迅速发展使得DevOps理念的实施越来越容易,另外计算机计算性能的不断提升和以及云服务器的迅速扩张使得快速开发的产品可以立刻获得更广泛的使用。

持续集成、持续部署是DevOps的核心做法。

持续集成、持续交付、持续部署

持续集成

持续集成(Continuous integration,简称CI)指的是频繁地(一天多次)将代码集成到主干。它有以下两个优点:

第一点,持续集成容易让开发人员快速找出错误。每当开发人员完成一点更新后,代码就会被集成到主干,开发人员便可以借此发现错误,并且定位错误也比较容易。

第二点,持续集成有助于防止代码分支大幅偏离主干。如果开发人员的代码集成频率很低,而主干却不断地更新,这样便会导致二者相距较大,使集成的难度变大,甚至难以集成。

在持续集成这一概念出现之前,开发团队需要花很多时间精力用于集成阶段。在这个阶段中,由每个独立的开发人员或者开发团队将各自开发的各个模块集成为一个可以工作使用的产品。在整个过程中,很可能会花几个月来解决冲突。并且这个过程中还很有可能会出现各种非常难以解决的问题,很可能造成延迟发布的结果,最终造成无法预计的损失。而持续集成的出现解决了这些问题。

可以将持续集成比作为一个监视你版本控制系统改变的软件。每当代码仓库有新操作使得代码发生改变的时候,这个工具便会自动化编译和测试你的程序。如果在这一过程中出现了错误,这个工具则会立即通知开发者,从而使得开发者能够立即修复问题。另外它还能自动地监测代码质量和测试覆盖率,这种可视化的代码质量测量方案能够鼓励开发者不断地改进他们的代码。

Martin Fowler曾说过,"持续集成并不能消除Bug,而是让它们非常容易发现和改正。"而持续集成的目的,就是让程序可以快速更新迭代,同时保证程序的高质量。通常达成这一目的的核心方法是,在代码集成到主干之前,会在这一过程中通过一系列自动化测试。只要有一个测试用例失败,则最终将不能完成集成。另外还可以通过Code Review、代码质量分析工具的手段来监控代码质量,来确定代码是否能够集成。

图1 持续集成流程示意图

与持续集成相关的,还有两个概念,分别是持续交付和持续部署。

持续交付

持续交付(Continuous Delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

持续交付与持续部署有略微的不同。持续交付的版本通过了整个流程中所有的自动化测试或者其他的程序质量测试方法,最终可以通过相关人员通过人工操作的方式后续完全自动化的部署到生产环境中,在这之后用户便可以直接使用改程序。但是,这整个过程并不是自动的,它是由评审部门人工地决定最好的发布时间而不是由电脑程序通过一系列流程直接自动化发布的。

图2 持续交付流程示意图

持续部署

持续部署(Continuous Deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署最终的目标是确保代码在任何时刻都可以进行部署,能够直接进入生产阶段供人使用。

持续部署的前提条件是整个流程自动化,能自动化完成测试、构建、部署等步骤。它与持续交付的区别,前文已经提到,正如下图所示。

图3 持续部署流程示意图

持续集成流程

根据持续集成的设计思路,代码从提交到生产,整个过程有以下几步。

(1)提交

流程的第一步,是开发者向代码仓库提交代码。本地代码的一次提交(commit)是整个持续集成流程的开始,并衔接之后的环节。

剩余内容已隐藏,请支付后下载全文,论文总字数:22997字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;