持续集成之应用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. Scala学习笔记:重要语法特性

    1.变量声明 Scala 有两种变量, val 和 var  val的值声明后不可变,var可变 val msg: String = "Hello yet again, world!&quo ...

  2. MySQL性能调优——锁定机制与锁优化分析

    针对多线程的并发访问,任何一个数据库都有其锁定机制,它的优劣直接关系着数据的一致完整性与数据库系统的高并发处理性能.锁定机制也因此成了各种数据库的核心技术之一.不同数据库存储引擎的锁定机制是不同的,本 ...

  3. PAT1042:Shuffling Machine

    1042. Shuffling Machine (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shu ...

  4. Oracle-03:关系型数据库和非关系的数据库的各自优缺点与区别

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 常见的非关系型数据库: Mongo DB Redis HBase 二维表的介绍: 在关系模型中,数据结构表示为 ...

  5. SSM-Spring-21:Spring中事物的使用案例

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 股票买卖案例(我会用三种开启事物的方法 代理工厂bean版的,注解版的,aspectj xml版的) 简单的介 ...

  6. Windows Server 2008取消登录前的Ctrl+Alt+Delete组合键操作

    前言: 在Windows Server 2008服务器中,为了防止人们登录服务器时错误的将账户和密码输入其他地方导致信息泄漏,所以在我们登录Windows Server 2008服务器操作系统时会要求 ...

  7. 在Python中用Request库模拟登录(一):字幕库(无加密,无验证码)

    字幕库的登录表单如下所示,其中省去了无关紧要的内容: <form class="login-form" action="/User/login.html" ...

  8. java获取一个月的天数

    import java.text.SimpleDateFormat; import java.util.Calendar; public class Test { public static void ...

  9. mvn -DskipTests和-Dmaven.test.skip=true区别

    在使用mvn package进行编译.打包时,Maven会执行src/test/java中的JUnit测试用例,有时为了跳过测试,会使用参数-DskipTests和-Dmaven.test.skip= ...

  10. k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)

    网络模型有了,如何实现呢? 为了保证网络方案的标准化.扩展性和灵活性,Kubernetes 采用了 Container Networking Interface(CNI)规范. CNI 是由 Core ...