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


    持续集成之应用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的信息确认是否已经成功更新镜像

    deployment-pod

    Memo

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

  • 相关阅读:
    java任务调度之Timer定时器
    springboot 启动的时候报java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext
    Spring 体系结构
    为什么MySQL数据库要用B+树存储索引?
    Nginx反向代理服务器的安装与配置
    详细的最新版fastdfs单机版搭建
    FastDFS 分布式文件系统(部署和运维)
    linux
    Spring Cloud底层原理
    Spring中ioc的实现原理
  • 原文地址:https://www.cnblogs.com/weihanli/p/kubernetes-auto-deploy-ci-config.html
Copyright © 2020-2023  润新知