一、概述

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

​ CI(Continuous Integration):持续集成

    CD():持续交付

    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版本换上就行了。或者把镜像文件版本换了就行。[img]

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

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

  1、我们要部署k8s要么是在裸机上要么是在虚拟机或公有云私有云等都是支持的。这就是基础架构(Core Infrastructure),在基础架构上我们要有网络工程师帮我们去部署好基础网络环境和存储工程师帮我们部署好存储环境(Network和Storage),一般来说这种架构不会让我们一个人去部署。在有了基础环境和网络环境之上我们就可以构建我们的k8s了。有了k8s集群之后我们还需要一个容器化的工作流系统。即确保我们的工作负载能运行起来。即有一个正常的容器运行环境(Containized Worload)。但是不管怎么讲这一套环境中我们还需要用到另外的两个服务。比如镜像服务(images registry)。另外为了管理我们的集群,我们还需要编排服务(provisioning Configuration)。接着对整个集群来讲我们都需要做监控,都要记录日志,即还需要监控系统((monitoring))和日志系统(logging)。如果可以的话k8s服务发布后还要有外置的负载均衡器(Load balancer)。另外我们还需要公建仓库(Artifact factory)。另外我们还需要自动化工具(Build Automation)。并且还有自动化发布工具(Rlease Automation )等。如果这个一整套环境组合完成了叫Paas,即平台即服务的环境。Openshit就是这一整套的解决方案。

   

  2、PaaS实际生产使用时的注意事项,本k8s集群学习博客未进行记录的知识点,后续需进行深入了解

​ master 节点高可用

​ kubernetes Federation (k8s集群联合,类似于双机房效果,通过Federation Api进行联合 )

​ priorityClass 优先级类别,定义哪些pod应该优先被启动等

​ limitRange 资源限制范围

​ PSP :pod 安全策略

​ SecurityContext 安全上下文

二十,基于K8S集群的PaaS简介的更多相关文章

  1. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  2. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  3. 基于 K8S 集群安装部署 istio-1.2.4

    使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...

  4. 从零开始搭建高可用的k8s集群

    一.环境准备 使用Hyper-V虚拟机功能搭建三台Centos虚拟机系统,配置好静态IP,分别为k8s-node1(192.168.0.8),k8s-node2(192.168.0.9),k8s-no ...

  5. 使用kubectl管理k8s集群(二十九)

    前言 在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理.命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用. 在下一篇,我们将讲述 ...

  6. 使用Kubeadm创建k8s集群之部署规划(三十)

    前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...

  7. 基于 kubeadm 部署单控制平面的 k8s 集群

    单控制平面不符合 HA 要求,但用于开发/测试环境不会有任何问题,如果资源足够的话(10台以上服务器,3台用于APIserver.3台用于 etcd 存储.至少3台用于工作节点.1台作为负载均衡),可 ...

  8. 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备

    本k8s集群参考了 Michael 的 https://gitee.com/pa/kubernetes-ha-kubeadm-private 这个项目,再此表示感谢! Michael的项目k8s版本为 ...

  9. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...

随机推荐

  1. xdebug调试的原理

    转自 https://segmentfault.com/a/1190000002528341 使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码! 运行原理 在实际使用前,我们 ...

  2. 剑指offer难题代码

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,前重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.假如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序 ...

  3. admin源码分析

    django settings 源码分析 导入settingso模块,进入源码,会发现settings是一个 单例 LazySettings类实例化产生的一个对象,LazySettings实例化后就会 ...

  4. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动

    上一章节我们已经实现了从客户端往服务端发送数据并且通过反射方法调用服务端的实现类最后返回给客户端的底层协议. 这一章节我们来实现客户端代理类的注入. 承接上一章,我们实现了多个底层协议,procoto ...

  5. 第24课.经典问题解析(1.析构函数的顺序;2.const修饰对象;3.成员函数,成员变量是否属于具体对象)

    1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象 单个对象创建时构造函数的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的 ...

  6. 使用 Mybatis-plus 进行 crud 操作

    1 Mybatis-Plus简介 1.1 什么是Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化 ...

  7. Thinkphp自定义生成缩略图尺寸的方法

    Thinkphp自定义生成缩略图尺寸的方法,本实例中生成两张不同尺寸的图片:第一张是大图350*350,第二张 50*50的缩略图 Image类是Thinkphp系统自带的,可以研究下,这个缩略图类很 ...

  8. 【思维】Kenken Race

    题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...

  9. k8s-prometheus 数据采集(node redis kubelet等)

    apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-ops data: prometheu ...

  10. 数据结构和算法总结(三):A* 寻路算法

    前言 复习下寻路相关的东西,而且A star寻路在游戏开发中应用挺多的,故记录下. 正文 迪杰斯特拉算法 说起A*得先谈谈Dijkstra算法,它是在BFS基础上的一种带权值的两点最短寻路贪心算法. ...