前一段时间倒腾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. 使用Fabric Node SDK进行Invoke和Query

      前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了.官方虽然提供了Node.JS,Java, ...

    2. Spring常用配置示例

      Spring 是一款Java平台的开源框架,是为解决企业级应用程序开发的复杂性而创建的,通过良好的分层架构让开发人员能够专注于业务逻辑的开发. Spring框架是一个分层架构,由不同的模块组成,构成s ...

    3. maven压缩js css

      maven压缩<plugin> <!-- YUI Compressor Maven压缩插件 --> <groupId>net.alchim31.maven</ ...

    4. Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬

      关注点: 1.扫描枪在扫描到条码后会在有焦点的地方显示扫描到的条码并且可设置扫码后添加回车换行让我很尴尬 2.怎样拦截扫码输入,扫描到条码就自动会嘀一声.不要这么智能行不行.瞎BB 需求详解 公司生产 ...

    5. python部署galery集群

      galery.py文件内容 import pexpect import os import configparser HOSTNAME_DB1='db1' HOSTNAME_DB2='db2' HOS ...

    6. 【学习总结】Git学习-GIT工作流-千峰教育(来自B站)

      Git工作流指南 - av32575602 文档资料 目录: 1-什么是版本控制系统 2-工作流简介 3-集中式工作流 4-功能分支工作流 5-GitFlow工作流 小记: 初看差点放弃了,不过后面还 ...

    7. Ajax跨域请求,无法传递及接收cookie信息

      最近在做一个系统遇到一个问题,在网上找个一个和我遇到相同问题的(原文地址:https://www.cnblogs.com/helloyy/p/6109665.html)按照他的步骤还是没有解决,继续查 ...

    8. EntityFramework优化:查询性能

      1. 禁用延迟加载 延迟加载是常见的方式,Entity Framework在需要时可以自动为一个实体的实例获取关联的数据. Entity Framework自动延迟加载需要同时满足以下3个条件: (1 ...

    9. 从源码看springboot默认的资源文件和配置文件所在位置

      首先,使用的springboot版本是2.X,在这里写一点学习springboot的记录 springboot需要配置的不多,但也并不是完全不需要配置就可以顺畅使用,这里看一下它默认的配置 首先,看一 ...

    10. Azure Machine Learning

      About me In my spare time, I love learning new technologies and going to hackathons. Our hackathon p ...