一、概述
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简介的更多相关文章
-
基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
-
基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
-
基于 K8S 集群安装部署 istio-1.2.4
使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...
-
使用kubectl管理k8s集群(二十九)
前言 在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理.命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用. 在下一篇,我们将讲述 ...
-
使用Kubeadm创建k8s集群之部署规划(三十)
前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...
-
基于 kubeadm 部署单控制平面的 k8s 集群
单控制平面不符合 HA 要求,但用于开发/测试环境不会有任何问题,如果资源足够的话(10台以上服务器,3台用于APIserver.3台用于 etcd 存储.至少3台用于工作节点.1台作为负载均衡),可 ...
-
基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备
本k8s集群参考了 Michael 的 https://gitee.com/pa/kubernetes-ha-kubeadm-private 这个项目,再此表示感谢! Michael的项目k8s版本为 ...
-
k8s学习笔记之二:使用kubeadm安装k8s集群
一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...
-
基于prometheus监控k8s集群
本文建立在你已经会安装prometheus服务的基础之上,如果你还不会安装,请参考:prometheus多维度监控容器 如果你还没有安装库k8s集群,情参考: 从零开始搭建基于calico的kuben ...
随机推荐
-
webpack -p压缩打包react报语法错误处理
前言:在用webpack打包react代码的时候发现一个问题,做一个处理总结. 我的webpack配置: var webpack = require('webpack'); //打包less插件 va ...
-
hdu 2583 permutation 动态规划
Problem Description Permutation plays a very important role in Combinatorics. For example ,1 2 3 4 ...
-
[置顶] JDK-CountDownLatch-实例、源码和模拟实现
Conception A synchronization aid that allows one or more threads to wait until a set of operations b ...
-
PHP常用函数(收集)
<?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...
-
(3)activiti流程的挂起和激活
有时候,我们需要对一个已经执行的流程进行暂停,而不是删除它,这个时候就需要我们调用activiti暂停和激活的api来操作他们 每启动一个流程实例,都会在该流程实例下产生相应的流程任务,处于1*多的关 ...
-
kotlin学习-初次见面
第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...
-
Django----使用模板系统渲染博客页面、实现列表和详情页的跳转、前后跳转功能
.模板写法同Flask,可以参考之前的FLask-模板 .将之前的BootStrap静态页面中的数据使用模板写 <!DOCTYPE html> <html lang="en ...
-
sqlserver-触发器-判断更新了哪个字段。
create trigger 触发器名称on 表名(将触发器创建到那张表中)for updateasif update(判断更新字段)beginupdate (要更新的表名) set 字段=inser ...
-
PAT 1059 Prime Factors[难]
1059 Prime Factors (25 分) Given any positive integer N, you are supposed to find all of its prime fa ...
-
Linux命令之ftp
ftp [-pinegvd] [host] pftp [-inegvd] [host] 用户通过ftp这个程序来使用Internet上的标准文件传输协议(FTP).本程序允许用户向远端网站发送文件,或 ...