首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

基于Kubernetes的持续部署方案

  • 24-03-05 01:41
  • 3148
  • 12718
blog.csdn.net

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=jpeg


文章转载自Docker


方案概述

640?wx_fmt=png


本技术方案为基于Kubernetes为核心的持续部署(下文简称CD)方案,可以满足开发方的程序级日志查看分析,运维方的快速扩容与日常运维分析,并且可以保证用户的服务体验。并且整套放在可以在资源利用率上进一步提升,在不降低服务可靠性的前提下降低资源使用成本。


使用场景分析

640?wx_fmt=png


本方案适用于以Tomcat为容器的JavaWeb项目的持续部署过程,在Kubernetes方案中,所有的Node节点均采用统一配置,根据业务环境的需求进行节点数量的控制。


技术架构与选型

640?wx_fmt=png


640?wx_fmt=png


  • Kubernetes:一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。

  • Nginx:一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

  • Harbor:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。

  • Jenkins:一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

  • Filebeats:是一个日志文件托运工具,在你的服务器上安装客户端后,Filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到Elasticsearch或者Logstarsh中存放。

  • Elasticsearch:是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。

  • Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。

  • GitLab自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目(这里的GitLab并不涉及到开发的CI方案,主要为运维的CD方案)。

  • Weave Scope Docker和Kubernetes可视化监控工具。Scope提供了至上而下的集群基础设施和应用的完整视图,用户可以轻松对分布式的容器化应用进行实时监控和问题诊断。


Kubernetes集群部署模式:Stacked etcd topology

640?wx_fmt=png


Kubernetes的安装使用kubeadm安装为高可用集群,并选用Stacked etcd topology 模式。 


640?wx_fmt=png


详情参考https://kubernetes.io/docs/setup/independent/high-availability/。


Kubernetes生态技术选型:网络层面选型Weave


容器网络解决方案。Weave创建的虚拟网络可以将部署在多个主机上的容器连接起来。对容器来说,Weave就像一个巨大的以太网交换机,所有容器都被接入这个交换机,容器可以直接通信,无需 NAT 和端口映射。 


640?wx_fmt=png


原理详解:http://dockone.io/article/262


Kubernetes生态技术选型:对外服务选型NodePort

640?wx_fmt=png


Kubernetes目前支持NodePort、LoadBanlace、Ingress三种对外提供服务的模式,其中LoadBanlace需要云平台的支持,阿里云提供了解决方案,但腾讯云未找到,Ingress技术为新出技术。整体评估采用NodePort方式更为灵活,每个服务一个唯一的对外IP地址,并且使用Nginx进行负载均衡(采用Nginx主要为日志分析)。 


640?wx_fmt=png


介绍与使用方法:https://kubernetes.io/docs/concepts/services-networking/service/#nodeport。


持续部署过程

640?wx_fmt=png


640?wx_fmt=png


  • Jenkins构建时,需要传入程序版本号,构建类型(发布还是删除),程序类型(测试还是正式)。

  • CD的全过程由位于Jenkins上的脚本执行

    • 开发部将对应版本的ROOT.war传入Jenkins指定目录

    • 下拉配置(包含config,hosts,dockerfile,k8syaml等等)

    • 由Dockerfile生成Docker容器,并将root.war,hosts与配置文件内置入容器中

    • 将Docker容器打包并推送入Registry

    • 通过kubectl通过k8syaml更新/生成新的服务


各组件业务配置

640?wx_fmt=png


Kubernetes业务配置

命名空间


在业务上,Kubernetes默认配置两套Namespace,分别为Master存放正式环境,Develop配置测试环境。

对外端口


正式环境Web端口以32001开始,测试环境以31001开始,且一一对应。

Master数据目录

 
 
  1. /data

  2. └── k8s-cd-config

  3. └── test.gyyx.cn

  4.    ├── develop

  5.    │   └── v1.2.0-92-3fdd00f.yaml

  6.    ├─develop.yaml -> /data/k8s-cd-config/test.gyyx.cn/develop/v1.2.0-92-3fdd00f.yaml

  7.    ├── master

  8.    │   └── v1.2.0-91-746284e.yaml

  9.    └──master.yaml->/data/k8s-cd-config/test.gyyx.cn/master/v1.2.0-91-746284e.yaml


K8s-Master下的data目录下为k8s-cd-config, k8s-cd-config目录存放各业务的yaml配置,二级目录为域名,三级目录划分Master(正式),Develop(测试),目录下以 版本号-构建ID-GITID.yaml 命名文件,时间最后一个即为当前线上的使用配置文件,为了运维方便,在二级目录同级内,生成一个软链连接到最新的正式与测试配置文件。注意,k8s-cd-config仅在其中一台Master中存在。


Node数据目录

 
 
  1. /data

  2. ├── filebeat

  3. ├── dockerlibs

  4. └── nodelogs

  5.    ├── develop

  6.    │   ├── accesslogs

  7.    │   │   └── test.gyyx.cn

  8.    │   │       └── test-gyyx-cn-76d9d8d5b5-hdnql

  9.    │   │           └── localhost_access_log.2018-12-24.txt

  10.    │   ├── devlogs

  11.    │   │   └── test.gyyx.cn

  12.    │   │       └── test-gyyx-cn-76d9d8d5b5-hdnql

  13.    │   │           └── interface.datareport.wyx.cn

  14.    │   │               ├── error.log

  15.    │   │               ├── info.log

  16.    │   │               └── trace.log

  17.    │   └── tomcatlogs

  18.    │       └── test.gyyx.cn

  19.    │           └── test-gyyx-cn-76d9d8d5b5-hdnql

  20.    │               ├── catalina.2018-12-24.log

  21.    │               ├── host-manager.2018-12-24.log

  22.    │               ├── localhost.2018-12-24.log

  23.    │               └── manager.2018-12-24.log

  24.    └── master

  25.        ├── accesslogs

  26.        │   └── test.gyyx.cn

  27.        │       └── test-gyyx-cn-895cc5994-sx7gk

  28.        │           └── localhost_access_log.2018-12-24.txt

  29.        ├── devlogs

  30.        │   └── test.gyyx.cn

  31.        │       └── test-gyyx-cn-895cc5994-sx7gk

  32.        └── tomcatlogs

  33.            └── test.gyyx.cn

  34.                └── test-gyyx-cn-895cc5994-sx7gk

  35.                    ├── catalina.2018-12-24.log

  36.                    ├── host-manager.2018-12-24.log

  37.                    ├── localhost.2018-12-24.log

  38.                    └── manager.2018-12-24.log


节点下的/data一级目录下分Filebeat、Dockerlibs、Nodelogs,其中Dockerlibs存放Docker相关数据,Nodelogs目录通过volume的方式挂载入Kubernetes的Pod, Nodelogs下分Develop与Master目录,区分正式环境与测试环境,每个Master与Develop下分为accesslogs、devlogs、tomcatlogs分别存放访问日志,开发部日志,Tomcat日志,日志目录下为项目(域名),域名下为Pod名称目录。


注意事项: 节点加入集群后,一定要下载手工下载kubernetes-dashboard-amd64镜像,防止dashboard所在节点挂掉以后dashboard无法在其他节点启动。


Harbor业务配置

业务分组


Harbor重定义其Registry的存储路径直接使用docker-compose安装。template 存放基础进项,各域名分组存放业务镜像。 


640?wx_fmt=png

镜像命名


分组下镜像以站点域名:版本号-类型-CDGITLAB为名称,并基于版本号确定不同的站点版本。 


640?wx_fmt=png

数据目录


Harbor数据目录统一存放在/data下。

备份策略


Harbor默认不设置备份,对于业务镜像无需进行备份,每次进行构建即可,对于模板类镜像,在Jenkins机器上均可以找到,若Harbor出现问题,则直接重建,并将Jenkins上的模板镜像进行重新push。


注意:为了业务的稳定性,Harbor由独立的服务运行(基于Docker),并不运行在Kubernetes内。


Jenkins业务配置

数据目录

 
 
  1. .

  2. ├── dockerlibs

  3. ├── thinbackups

  4. └── gitlab-files

  5. │  └── gyyx.cn

  6. │      └── test.gyyx.cn

  7. └── jks-cd-config

  8.    └── test.gyyx.cn

  9.        └── v1.2.0

  10.            ├── develop

  11.            │   └── 101_138a37a

  12.            │       ├── …

  13.            │       └── v1.2.0-101-138a37a.yaml

  14.            ├── master

  15.            │   └── 102_4f228a7

  16.            │       ├── …

  17.            │       └── v1.2.0-102-4f228a7.yaml

  18.            └── ROOT.war


Jenkins下的data目录分为dockerlibs、thinbackups、gitlab-files 、jks-cd-config。


Dockerlibs存放Docker相关文件,thinbackups存放每日的Jenkins备份,gitlab-files存放构建GitLab的文件(运维可以在此操作pull,push),jks-cd-config为jks构建目录。


Jenkins机使用/data/jks-cd-config目录存放构建内容,二级目录为域名,三级目录为版本号(以开发部版本号为准),三级目录下存放ROOT.war,四级目录为构建ID_GITID,目录下存放构建的原始数据。


节点每天进行images清理工作。

业务分组


Jenkins的分组分为template与各domain,template存放模板,domain以域名的形式存放正式项目: 


640?wx_fmt=png


新项目由运维手工创建,后续的秩序构建过程由开发部调用API完成。

构建参数


Jenkins构建时,需要传递三参数,1:程序版本号,2:类型:apply与delete,3:正式环境还是测试环境,正式环境为Master,测试环境为Develop,对应Kubernetes的Namespace。 


640?wx_fmt=png


此部分功能后期将通过开发部的构建凭条调用JenkinsAPI实现。

JenkinsAPI

 
 
  1. curl -X POST http://jenkinsapi.com/job/域名/build \

  2. –user admin:11b80a61d260aa41eb4a43ef0115bcbb26 \

  3. –data-urlencode json=’{“parameter”: [{“name”:”VERSION”, “value”:”v1.2.0”}, {“name”:”TYPE”, “value”:”apply”}, {“name”:”BRANCH”, “value”:”develop”}]}’


APIDoc:https://wiki.jenkins.io/display/JENKINS/Remote+access+API


Token:https://jingyan.baidu.com/article/0eb457e5dbad8003f0a9056c.html

备份策略


Jenins安装ThinBackup插件,配置每小时进行一次全局备份,且最多保留10份,备份后数据传至异地。 


640?wx_fmt=png


注意:为了业务的稳定性,Jenkins由独立的服务运行,并不运行在Kubernetes内。


GitLab业务配置

业务分组

CD GitLab项目下分两个组template与各domain,template存放模板文件。例如: 


640?wx_fmt=png

Git分支


default下以域名划分项目,每个项目划分Master与Develop两个分支,分别存放正式环境与测试环境CD文件。 


640?wx_fmt=png

CD文件树

 
 
  1. ├── catalina.sh              #tomcat配置文件

  2. ├── config                  #程序配置文件,此文件夹会替换掉容器内的/data/conf

  3. │   └── hello.conf

  4. ├── deployment.yaml         #k8s deploymen配置

  5. ├── dockerfile               #docker镜像生成文件

  6. ├── hosts                   #docker镜像的hosts,此文件将合并到deployment.yaml

  7. ├── service.yaml             #k8s service配置

  8. └── tomcat                 #tomcat配置文件

  9.    ├── Catalina

  10.    │   └── localhost

  11.    ├── catalina.policy

  12.    ├── catalina.properties

  13.    ├── context.xml

  14.    ├── logging.properties

  15.    ├── server.xml

  16.    ├── tomcat-users.xml

  17.    └── web.xml

备份策略


GitLab使用gitlab-rake gitlab:backup:create进行每日定期备份,并传送至异地。


EFK与日志管理

Elasticsearch


ES数据通过索引仅保留近10天的数据,每日通过脚本方式进行数据删除。ES的数据保存在/data/elasticsearch目录下。

Filebeat


在每个Node节点启动一个Filebeat进程,用于日志的采集工作,filebeat分别监控:


  • /data/nodelogs//accesslogs///

  • /data/nodelogs//devlogs///

  • /data/nodelogs//tomcatlogs///


其中,tomcatlogs日志需要进行特殊处理,进行多行合并,数据写入ES时,使用processors. Dissect进行目录名称截取,并使用域名作为ES的索引使用。


 
 
  1. processors:

  2. - dissect:

  3.    tokenizer: "%{?key1}/%{?key2}/%{?key3}/%{wtype}/%{ltype}/%{domain}/%{?key7}/%{?key8}"

  4.    field: "source"

  5. target_prefix: "gy"



截取gy. wtype ( master或develop) , ltype(accesslogs 、tomcatlogs、devlogs),domain(xxx.gyyx.cn)。

Kibana


Kibana目前我们仅使用其discover节点,用于日志数据的查询,在配置方面。


Kibana配置使用“域名-*”方式进行配置,每次新增域名,需要在此进行手工配置。 


640?wx_fmt=png


Kibana使用discover查看时,默认展示一个域名下所有的日志,可以通过gy.wtype筛选选择查看测试环境还是正式环境,或者通过gy.ltype哪种日志类型。 


640?wx_fmt=png


容器资源监控


容器资源使用WeaveScope进行资源消耗监控。 


640?wx_fmt=png

640?wx_fmt=png


640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 全面剖析企业私有云

  • 30 秒?!Chrome 插件带你速成编程学习 | 程序员硬核评测

  • 为什么程序员下班后只关显示器从不关电脑?

  • 算法警告!该图片涉嫌违规不予显示

  • 交易机器人春天已来?先看完这篇再说吧

  • 2019年中国IT市场趋势热点

  • 2019年最值得关注的五大微服务发展趋势


640?wx_fmt=png 喜欢就点击“好看”吧
注:本文转载自blog.csdn.net的CSDN云计算的文章"https://blog.csdn.net/FL63Zv9Zou86950w/article/details/87941704"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top