前一段时间倒腾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. JS检测浏览器是否最大化

      function isFullScreen (){     if(         window.outerHeight === screen.availHeight     ){         i ...

    2. Linux笔记-ps -aux的结果解析

      参考: https://blog.csdn.net/flyingleo1981/article/details/7739490 ps 的参数说明ps 提供了很多的选项参数,常用的有以下几个: l 长格 ...

    3. 二十六、css3改变checkbox复选框的样式

      <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

    4. 通过JS获取URL链接带的参数

      1 /** 2 * 获取URL参数的方法 3 */ 4 $.extend({ //以便于通过$引用该方法 5 getUrlVars : function() { //获取多个参数数组 6 var va ...

    5. mysql 查询 int类型日期转换成datetime类型

      数据库日期类型是int类型的,该查询结果是datetime类型的 SELECT from_unixtime( `时间列名` ) FROM 表名 如果原来类型是datetime类型,查询结果要是int类 ...

    6. 【Machine Translation】CMU的NMT教程论文:最全面的神经机器翻译学习教程

      这是一篇CMU发的神经机器翻译教程论文,很全很详细,适合新手阅读,即使没有什么MT.DNN.RNN的基础知识. 另外它还配套了CMU自己的一个框架DyNet的练习. 全文共9章,从统计语言模型到DNN ...

    7. codeforces1107G Vasya and Maximum Profit 【模拟】

      题目分析: 前缀和啥的模拟一下就行了. 代码: #include<bits/stdc++.h> using namespace std; ; int n,x,d[maxn],sta[max ...

    8. Prince and Princess HDU - 4685(匹配 + 强连通)

      Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

    9. HTTP 404 Not Found Error with .woff or .woff2 Font Files

        如果是 ERR_ABORTED 404 (Not Found) WOFF2,则有可能是文件不存在

    10. tcpdump在linux上的常见用法

      https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html tcpdump -i [interface] -w cap.cap ...