一、概述

  1、通过以往的学习应该可以了解到k8s 和以往提到的devops概念更容易落地了。比如我们说的CI,CD,CD

    a、CI(Continuous Integration):持续集成

    b、CD():持续交付

    c、CD(Continuous Deployment):持续部署

  2、早期作为运维手工来实现发布和部署来讲我们一周发布一次就很头疼了,如果是持续部署的话一天可能要部署好几次甚至几十次。即当我们应用程序的程序员写完代码以后从本地推送到gitlab或者github之上,而后由对应的监控工具资源监视着事件的发生,一旦发生提交了新代码就自动的去做某些操作,比如用一些所谓的CI的工具从仓库中拖下来后做静态检查,做预部署的测试,测试完后没问题了就开始打包,打包后就发给测试,由测试部署到测试环境中,这时候就需要部署了,有些是不用部署就能测试,有些是需要部署到测试环境中来实现在线测试。所以我们做一些部署后测试。因此就有这些步骤。

  3、一共大概有如下步骤:首先推送代码到仓库。然后使用CI或CD工具把代码拖下来做静态分析。然后做一些部署前测试,即不用打包就可以做的测试。比如扫描一下代码的完整性等等。然后就开始打包发给QA,由QA手动或自动部署到QA环境中。然后做部署后测试,如果没问题就可以发给我们的相关的安装部署人员,就可以交付给我们的生产环境中的运维工程师开始发布到线上去了。所以这个时候如果从开始代码推送到后面的静态分析,打包前测试,打包后测试都是自动就称之为CI,如果随后交付给运维工程师这个过程也能通过一些工具自动实现我们通常就称之为CD。运维工程师拿到后就开始发布,比如灰度,蓝绿,金丝雀等,发布上去以后如果没问题就可以跑起来了。即如果连部署也能自动执行,比如他们交付完以后由我们的发布系统自动实现将新版本通过灰度或金丝雀或蓝绿的方式发布到线上去这种方式我们就称之为CD即持续部署。这些动作到今天为止每一步都可以使用工具来实现,比如像版本控制系统,svn,vcs,git等。另外就是一些持续集成工具,比如像jenkins等。另外其还需要构建工具去实现我们代码的构建,包括编译,打包等,比如我们的make,cmake,maven,ant等。打包后的测试我们就需要相应的测试套件来实现,比如我们的单元测试,系统测试,回归测试等等。

  4、如果我们要结合我们k8s环境做一套CI CD的环境的话大概如下图。我们的研发人员push代码到git,然后我们使用jenkins用于做CI整合工具来做构建测试等,没问题后就生成应用程序然后将应用程序打包成docker镜像。然后推到docker registry即harbor上,然后就可以被k8s从中拖下来进行部署了。如果我们把这一整套流程集中起来能用一个一整套的自动化功能来完成的话那就是所谓的CD即持续部署。我们从推送代码到git仓库上然后用jenkins自动把其pull下来进行构建,构建完了以后他就是一个应用程序包了,然后我们接下来让想办法给其生成dockerfile,只有结合dockerfile和application 才能build成镜像文件。第二步,我们开发人员还要开发第二套组件,即为我们的应用程序写一个配套的dockerfile,dockerfile开发完成后需要Push到另外一套git仓库上,当我们提供完以后把应用程序构建完了结合dockerfile利用docker build把对应的dockerfile拖下来,应用程序也有了,可直接打包为docker镜像。打包完以后我们给其推送到harbor上去就完了。我们要想把应用程序部署到k8s之上k8s怎么才能完成部署呢?因此我们要有配置清单,如果我们写好了配置清单,比如写了helm,我们把其定义成chart,把应用程序打包成镜像以后我们再开发好一个chart模板放在那里,这个chart不变,在传递时把chart版本换上就行了。或者把镜像文件版本换了就行。

  5、还有一种简单的方式,我们程序员也可以写好我们的manifests,部署时这个manifests模板用ansible或者用其它工具或Go,此处他要做的有两重作用,第一,做模板引擎渲染,即把模板中那些代码替换成他应该替换的对应的值,比如我们这个manifests为了能够做到部署多种不同的应用程序,比如我这里推到一个dockerfile中镜像标签什么的都换了,因此我们把这个信息结合manifests和ansible模板引擎对manifests完成渲染而后就可以用ansible再指挥着我们k8s拖镜像来更新了。这个过程一系列文件都要准备好,而后才会触发这些组件自动工作,而我们ansible去渲染我们manifests这个组件可能不会,默认他自己都做不了。如果可以的话可以把此段结合python 实现CI CD进行发布。

二、生产环境部署k8s,接下来我们描述一下在真正生产环境中我们部署k8s应该部署成什么样子

  1、我们要部署k8s要么是在裸机上要么是在虚拟机或公有云私有云等都是支持的。这就是基础架构,在基础架构上我们要有网络工程师帮我们去部署好基础网络环境和存储工程师帮我们部署好存储环境,一般来说这种架构不会让我们一个人去部署。在有了基础环境和网络环境之上我们就可以构建我们的k8s了。有了k8s集群之后我们还需要一个容器化的工作流系统。即确保我们的工作负载能运行起来。即有一个正常的容器运行环境。但是不管怎么讲这一套环境中我们还需要用到另外的两个服务。比如镜像服务。另外为了管理我们的集群,我们还需要编排服务。接着对整个集群来讲我们都需要做监控,都要记录日志,即还需要监控系统和日志系统。如果可以的话k8s服务发布后还要有外置的负载均衡器。另外我们还需要公建仓库。另外我们还需要自动化工具。并且还有自动化发布工具等。

    

  2、如果这个一整套环境组合完成了叫Paas,即平台即服务的环境。Openshit就是这一整套的解决方案。

Kubernetes 学习26 基于kubernetes的Paas概述的更多相关文章

  1. 【Kubernetes学习之一】Kubernetes 简介

    环境 centos 7 一.概念和组件Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理,简称k8s. 1.Master Kubernetes中的 ...

  2. Kubernetes 学习19基于canel的网络策略

    一.概述 1.我们说过,k8s的可用插件有很多,除了flannel之外,还有一个流行的叫做calico的组件,不过calico在很多项目中都会有这个名字被应用,所以他们把自己称为project cal ...

  3. 【Kubernetes学习之四】Kubernetes可视化管理

    环境 centos 7 k8s-master 192.168.118.106 k8s-node01 192.168.118.107 k8s-node01 192.168.118.108 之前使用ku8 ...

  4. 【Kubernetes学习之三】Kubernetes分布式集群架构

    环境 centos 7 一.Kubernetes分布式集群架构1.Kubernetes服务注册和服务发现问题怎么解决的?每个服务分配一个不变的虚拟IP+端口, 系统env环境变量里有每个服务的服务名称 ...

  5. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  6. kubernetes学习01—kubernetes介绍

    本文收录在容器技术学习系列文章总目录 一.简介 1.Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/. 2.Kubern ...

  7. Kubernetes 中的核心组件与基本对象概述

    Kubernetes 是 Google 基于 Borg 开源的容器编排调度,用于管理容器集群自动化部署.扩容以及运维的开源平台.作为云原生计算基金会 CNCF(Cloud Native Computi ...

  8. 基于Kubernetes 的Cloud Native 实战 培训课程安排

    课程安排: 基于Kubernetes 的Cloud Native 实战 课程介绍: 云计算.虚拟化.容器微服务PaaS 技术已经广泛应用于新兴互联网企业(如电商平台.搜索引擎.社交平台网站.位置服务平 ...

  9. 基于Kubernetes的WAF集群介绍

    Kubernetes是Google开源的容器集群管理系统.它构建Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,可看作是基于容器技术的PaaS平台. 本文旨 ...

随机推荐

  1. Nvidia Jetson TX2开发板学习历程(1)- 详细开箱、上电过程

    考试周已经结束了,开发板也已经到了.希望借着这个假期能够好好的利用这块开发板学习Linux系统以及Tensorflow的相关知识. 我打算将学习历程通过博客的方式写出来,作为自己的笔记,也可以供以后拿 ...

  2. 7、注解@Mapper、@MapperScan

    7.注解@Mapper.@MapperScan 2018年09月20日 11:12:41 飞奔的加瓦 阅读数 3284    版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  3. 【Linux内核】CPU和线程

    首先明确一个概念,Linux系统中甚至没有真正的线程.不过,可以认为Linux是系统的线程是内核线程,所有调度是基于线程的. 1.线程分类 一个进程由于其运行空间的不同, 从而有内核线程和用户进程的区 ...

  4. iOS 播放系统自带铃声

    播放声音代码例子 https://github.com/baitongtong/git-.git 给一个国外网址,苹果系统铃声以及自定义铃声免登陆免费下载:http://www.zedge.net/r ...

  5. vue watch 的简单使用

    在项目开发中遇到的需求,这点写第一个dome 监听父组件传过来的值发送变化 在子组件中 <template> <div class="components"> ...

  6. Vivado中备份设计好的block design

    参考链接 https://blog.csdn.net/dimples_song/article/details/81391615 前言 为了不每次都重新生成block design,避免重复劳动. 可 ...

  7. Eclipse - servlet显示无法导入javax.servlet包问题的解决方案

    项目名-->右键 Property-->选择 Java Build Path-->选择 Add External JARs-->选择 把servlet-api.jar的路径输入 ...

  8. Qt环境搭建

    下载 qtcreator:http://download.qt.io/official_releases/qtcreator/ 编译器(mingw):http://download.qt.io/dev ...

  9. SpringBoot学习<一>——快速搭建SpringBoot

    这是我的第一篇博客,博客记录我以后的学习,包括一些总结之类的东西,当然,这些记录是针对于与我个人而言的,可能有些地方会有不好的,或者出现错误,欢迎大家来指正(如果有人看的话)废话不多说.进入正题:Sp ...

  10. Mongodb之简介

    MongoDB是一个基于分布式存储的数据库,由C++语言编写,旨在为WEB应用提供的可扩展的高性能数据存储解决. MongoDB是介于关系型数据库与非关系型数据库之间的产品,也是非关系型数据库中功能最 ...