前一段时间倒腾k8s的时候,写了一系列的博客,有很多人不理解那样做的意义是什么,为什么要那样做,这篇文章就尝试解释一下,在实际环境中,是如何让集群为我们工作的.

因为只研究了一个月左右的时间,认识难免有偏颇之处,到时还望指出.

首先,上一张架构图:

  • 在上图中,咱们首先达成一个共识:
    • Dockerfile:用来制作镜像.Dockerfile的设计思想就是,使用一些标准的原语来描述我们所需要构建的Docker镜像,并且按顺序来进行处理.所以对于Dockerfile我就不多说了,里面内容挺简单而且挺容易理解的.
    • yaml文件:用来部署服务.
    • Jenkins构建完成之后,还需要执行一个脚本,在这里先提出来,在后面还会进行相关讲解
  • 详细说明

    接下来就详细说一说架构图:

    1,代码和相关war包就不说了,对于项目来说,这是必不可少的内容.

    2,Dockerfile文件中,需要写相关内容.以我在实际环境中的运用为例:

    FROM reg.zll.com/library/nginx:latest
    COPY dist /usr/local/dist

    在上面我说过了,Dockerfile的设计思想就是,使用一些标准的原语来描述我们所需要构建的Docker镜像,并且按顺序来进行处理,所以我们来看Dockerfile文件中的内容很容易理解:首先需要从Harbor镜像仓库(reg.zll.com就是我搭建的Harbor镜像仓库)中,拉取我们需要的镜像,然后将Jenkins构建之后的dist拷贝到指定目录下.

    3, yaml文件负责在k8s上创建相应的pod,在这里根据项目的需要,建立了2个,一个是deployment(负责运行这个镜像),一个是service(负责服务发现)

    关于yaml文件,我写过一篇博客,对于在Kubernetes中的应用来说,应该是够用了,感兴趣可以参考:[Kubernetes]yaml文件详解

    4,Jenkins需要从svn上面拉取code,然后执行构建,构建完成之后,前端会生成dist,后端会生成war包.之后根据dockerfile制作镜像,然后在k8s上创建pod.在这个过程中,我们写了一个脚本,当Jenkins构建完成之后,会自动去执行.脚本内容如下(注意:此脚本内容仅供参考,#后面内容为注释内容)

    #!/bin/sh -l
    #定义在Harbor镜像仓库中,镜像的路径
    image_path=reg.zll.com/library/frontend-dist:1.0.0 #构建前端镜像
    #构建完成之后,再将构建后的镜像推到Harbor镜像仓库中
    docker build -t $image_path .
    docker push $image_path #推到Harbor镜像仓库之后,删除本地镜像
    docker rmi -f $image_path #k8s部署,部署之前,先删除上次的相关内容
    kubectl delete -f frontend-prod.yaml
    #删除成功之后,重新创建,这样可以保证每次都是最新的
    echo $WORKSPACE
    kubectl create -f frontend-prod.yaml

    到这里,我们应该对整体流程有了一个大概的了解.重点在于Jenkins的脚本执行.每次Jenkins构建完成之后,都会去执行脚本,这样当我们的代码有所更新时,我们不需要重新去部署,Jenkins会自动构建,构建完成之后,会自动生成相关镜像,并推到Harbor镜像仓库中.当我们需要进行相关项目部署时,只需要将镜像从Harbor仓库中拉取下来即可.

    也就是说,使用k8s之后,我们需要做的就是:对项目进行更新迭代,需要时一条命令,从Harbor仓库中拉取镜像即可.其他都有脚本帮我们自动去完成.

    我觉得在这里,Jenkins相当于一个桥梁,把我们自定义写的Dockerfile和yaml文件,和后面的k8s集群联系起来.

    相比于以前,对代码更新之后,需要重新搭环境,重新走一遍流程来说,是不是方便了许多?节省了很多时间和精力,能够将注意力更好的放在开发上,而不是维护上.

    而且统一到Harbor仓库中进行管理,需要时,从Harbor仓库中拉取镜像,这样也使得各个服务器拉取的镜像都是一样的.

    以上,就是我在实际环境中,部署k8s流程的一个整体架构,适用于我们公司的需求,所以这篇博客只有参考价值,具体还是需要根据自己项目的实际需求来进行相关配置.

    至于k8s集群的配置,我在这里就不做说明了,因为每个项目的需求不一样,而且在前面的文章中,我也做了相关说明,在这里就不重复了.

    因为只研究了一个月左右的时间,所以上面难免有偏颇之处,如果您有发现,欢迎指出,我会核实改正.

    实战完了,接下来的一段时间,我要去补充理论知识了,所以接下来的几篇文章可能还是关于k8s的相关内容,如果感兴趣,可以持续关注.

    非常感谢您的阅读~

    [Kubernetes]如何让集群为我们工作?的更多相关文章

    1. 基于Kubernetes的WAF集群介绍

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

    2. kubernetes有状态集群服务部署与管理

      有状态集群服务的两个需求:一个是存储需求,另一个是集群需求.对存储需求,Kubernetes的解决方案是:Volume.Persistent Volume .对PV,除了手动创建PV池外,还可以通过S ...

    3. Kubernetes(k8s) docker集群搭建

      原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

    4. 二进制搭建kubernetes多master集群【四、配置k8s node】

      上一篇我们部署了kubernetes的master集群,参考:二进制搭建kubernetes多master集群[三.配置k8s master及高可用] 本文在以下主机上操作部署k8s node k8s ...

    5. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

      前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...

    6. 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】

      上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...

    7. Centos7离线部署kubernetes 1.13集群记录

      一.说明 本篇主要参考kubernetes中文社区的一篇部署文章(CentOS 使用二进制部署 Kubernetes 1.13集群),并做了更详细的记录以备用. 二.部署环境 1.kubernetes ...

    8. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

      本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

    9. 搭建 Kubernetes 高可用集群

      使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载 ...

    随机推荐

    1. 8个Python高效数据分析的技巧

      一行代码定义List 下面是使用For循环创建列表和用一行代码创建列表的对比. x = [1,2,3,4] out = [] for item in x: out.append(item**2) pr ...

    2. HNOI2019做题笔记

      代码比较长所以直接去LOJ看吧- 鱼(计算几何.向量) 比较套路的内容:枚举\(D\),对于其他所有点按照\(D\)极角排序,按照极角序枚举\(A\),这样垂直于\(AD\)的线也会以极角序旋转,可以 ...

    3. java oop 集合框架

      集合主要是用来存放数据的,集合与数组的主要区别在于,集合的大小不受限制,而数组的大小受限制,在使用集合增加数据时又常常与泛型联系起来,所以集合和泛型在实际开发过程中总会结合在一起 数组致命的缺点是数组 ...

    4. OracleSql语句学习(五)

      --数据库对象数据库对象包含:表,视图,索引,序列视图VIEN视图在SQL语句中体现的角色与表一样,但是视图并非真实存在的表,它只是对应一条查询语句的结果集 使用视图通常是为了重用子查询,简化SQL语 ...

    5. Crypto加密解密

      crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...

    6. 一些很容易被忘记的css

      一些很偏门的css,用过一两次,很难记得牢,这里,我总结一些. outline 当input选中的时候会出现一个边框 /*一般设置成 none*/ textarea:focus, input:focu ...

    7. Shiro限制登录尝试次数

      /** * 认证信息.(身份验证) : Authentication 是用来验证用户身份 * * @param token * @return * @throws AuthenticationExce ...

    8. springboot jpa 复合主键

      https://blog.csdn.net/wyc_cs/article/details/9031991 创建一个复合主键类 public class LevelPostMultiKeysClass ...

    9. LODOP批量打印多页模版进行维护

      批量打印的时候,可以循环多任务,也可以循环多页,很多的时候也可以分页分任务,分组打印.如果是一个任务里的多页相同的模版,一个任务中会有很多打印项,这些打印项在每页中的位置是相同的,如果要调整,调整结果 ...

    10. [模板] 杜教筛 && bzoj3944-Sum

      杜教筛 浅谈一类积性函数的前缀和 - skywalkert's space - CSDN博客 杜教筛可以在\(O(n^{\frac 23})\)的时间复杂度内利用卷积求出一些积性函数的前缀和. 算法 ...