持续集成之应用k8s自动部署

Intro

上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如何更好的应对大并发的情况,如何不停机更新应用,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理,于是 k8s 就出现了。

K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。

k8s 十分强大,可以帮助我们很方便的实现应用的伸缩,也可以很轻易的实现不停机更新,更好更方便的实现服务高可用,还有很多很实用的功能,例如服务发现/负载均衡/配置中心等,更多 k8s 的介绍请参考https://www.kubernetes.org.cn/docs

k8s 自动部署介绍

这里只是我自己的一些实践,不一定是最合适的,仅供参考。

自动部署流程:

  1. 自己在 k8s 集群上手动创建 deployment 和 service
  2. CI 自动构建新的 docker 镜像
  3. CI 推送新的 docker 镜像到 docker hub 或者自己的 docker registry
  4. 更新 k8s 应用对应的 deployment 的镜像

示例应用

这里有一个 示例应用

  1. 在部署了 k8s 集群环境的服务器上部署应用

    wget https://raw.githubusercontent.com/WeihanLi/AccountingApp/dev/accountingapp-k8s-deployment.yaml
    kubectl apply -f accountingapp-k8s-deployment.yaml
  2. 配置CI,这里以 Azure Pipeline 为例

    Azure pipeline 示例配置:

    pool:
    vmImage: 'Ubuntu 16.04' variables:
    tagName: '$(Build.BuildNumber)'
    imageName: '$(dockerId)/accountingapp:$(tagName)' steps: - script: docker build -f Dockerfile -t $(imageName) .
    displayName: 'Docker build Script' - script: |
    docker login -u $(dockerId) -p $(pswd)
    docker push $(imageName)
    displayName: 'Push docker image' - task: SSH@0
    displayName: 'Run shell inline on remote machine'
    inputs:
    sshEndpoint: 'weihanli-vm'
    runOptions: inline inline: |
    kubectl set image deployment/accountingapp-deployment accountingapp=$(imageName)
  3. 提交代码触发CI

    docker build -f Dockerfile -t weihanli/accountingapp:20190407.3 .
    # 此处省略N行代码...
    deployment.extensions/accountingapp-deployment image updated
  4. 查看效果

查看 pod 信息,执行 kubectl get pod 获取 pod 信息,再使用 kubectl describe pod <podName> 获取pod的信息确认是否已经成功更新镜像

Memo

希望对你有帮助,作者水平有限,如有疏漏或者错误,还望指出。

持续集成之应用k8s自动部署的更多相关文章

  1. Jenkins Android APP 持续集成体系建设二—自动部署、执行测试任务,关联打包任务

    经过上一遍博客我们知道了怎么使用Jenkins自动打包,但打完包之后,我们还需要对新包进行回归测试,确定新包有没有问题,然后才能发布包,那么,话不多说,我们先来新建个自动化回归测试任务 新包自动化回归 ...

  2. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  3. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  4. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)

    本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...

  5. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  6. kubernetesV1.13.1一键部署脚本(k8s自动部署脚本)

    部署k8sv1.13.1只需要下面几步就OK了: git clone https://github.com/luckman666/deploy_Kubernetes-v1.13.1.git cd de ...

  7. 第一章 持续集成jenkins工具使用之部署

    1.1 硬件要求 内存:至少512MB 磁盘空间:10G JDK8 最好同时安装jre 从官网https://jenkins.io/download/下载最新的war包(Generic Java Pa ...

  8. [Jenkins][centos]1 持续集成 之 配置VNC,部署Jenkins

    痛点:上一篇的AWS部署的VNC不知为啥挂了,死活连不上,因此改申请京东云做部署Jenkins 预计阅读时间:20分钟 更新软件,安装桌面 yum -y update yum -y groupinst ...

  9. 持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

    目录 一.整体流程 二.Jenkins 配置 2.1.首先安装插件 2.2.配置目标服务器 2.3.创建 job 2.4.配置 gitlab 触发 三.改进 一.整体流程 二.Jenkins 配置 2 ...

随机推荐

  1. 构建基于Netty 的HTTP/HTTPS 应用程序

    HTTP/HTTPS是最常见的协议套件之一,并且随着智能手机的成功,它的应用也日益广泛,因为对于任何公司来说,拥有一个可以被移动设备访问的网站几乎是必须的.这些协议也被用于其他方面.许多组织导出的用于 ...

  2. maven使用与技巧

    1.Pom文件介绍与基本组成 说明:全称是Project Object Model,通俗点的话说就是要对构建的项目进行建模. 组成的基本元素: 元素 描述 modelVersion 超级pom版本 g ...

  3. 玩转SSH--Hibernate(三)---手动修改数据库,前台查询信息不同步更新问题解决方法

    在用hibernate时遇到一个挺纠结的问题,就是我在手动修改数据库的信息后,前台页面查询到的信息还是之前的结果,一开始以为是缓存的问题,经过多次修改和在网上查询资料,最终发现可能是hibernate ...

  4. vue.js小总结

    Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统; 指令带有前缀 v-,以表示它们是 Vue 提供的特殊特性; v-for 指令可以绑定数组的数据来渲染一个项目列 ...

  5. 4. 整合MyBatis

    mybatis既有jdbc的灵活,有具有orm工具的方便,是一套很好用的工具,这儿就使用mybatis来作为数据访问工具,具体添加过程如下: 1. 添加mybatis依赖,并更新项目 <depe ...

  6. forwardPort.go

    packagemain import(     "encoding/json"     "flag"     "fmt"     " ...

  7. 在C++遇到有些关键字或者函数被弃用的情况

    随着每一次C++的不断更新,可能都会有些函数或者关键字会被弃用,或者换成了其他的名字,这在编写代码的时候经常会碰到,碰到这种情况,可以在代码的第一行写上忽略此错误的句子,一般为: #pragma  w ...

  8. BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树

    BZOJ_5180_[Baltic2016]Cities_ 斯坦纳树 题意: 给定n个点,m条双向边的图.其中有k个点是重要的.每条边都有一定的长度. 现在要你选定一些边来构成一个图,要使得k个重要的 ...

  9. BZOJ_2561_最小生成树_最小割

    BZOJ_2561_最小生成树_最小割 题意: 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条 ...

  10. BZOJ_4773_负环_倍增弗洛伊德

    BZOJ_4773_负环 Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边 ...