网站建设推广优化话术,网站文化制度建设,做一个网站的完整教程,推广网站建设花费得多少钱戳蓝字“CSDN云计算”关注我们哦#xff01;文章转载自Docker方案概述本技术方案为基于Kubernetes为核心的持续部署#xff08;下文简称CD#xff09;方案#xff0c;可以满足开发方的程序级日志查看分析#xff0c;运维方的快速扩容与日常运维分析#xff0c;并且可以保… 戳蓝字“CSDN云计算”关注我们哦文章转载自Docker方案概述本技术方案为基于Kubernetes为核心的持续部署下文简称CD方案可以满足开发方的程序级日志查看分析运维方的快速扩容与日常运维分析并且可以保证用户的服务体验。并且整套放在可以在资源利用率上进一步提升在不降低服务可靠性的前提下降低资源使用成本。使用场景分析本方案适用于以Tomcat为容器的JavaWeb项目的持续部署过程在Kubernetes方案中所有的Node节点均采用统一配置根据业务环境的需求进行节点数量的控制。技术架构与选型Kubernetes一个开源的用于管理云平台中多个主机上的容器化的应用Kubernetes的目标是让部署容器化的应用简单并且高效Kubernetes提供了应用部署规划更新维护的一种机制。Nginx一款轻量级的Web 服务器/反向代理服务器及电子邮件IMAP/POP3代理服务器。HarborHarbor是一个用于存储和分发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 topologyKubernetes的安装使用kubeadm安装为高可用集群并选用Stacked etcd topology 模式。 详情参考https://kubernetes.io/docs/setup/independent/high-availability/。Kubernetes生态技术选型网络层面选型Weave容器网络解决方案。Weave创建的虚拟网络可以将部署在多个主机上的容器连接起来。对容器来说Weave就像一个巨大的以太网交换机所有容器都被接入这个交换机容器可以直接通信无需 NAT 和端口映射。 原理详解http://dockone.io/article/262Kubernetes生态技术选型对外服务选型NodePortKubernetes目前支持NodePort、LoadBanlace、Ingress三种对外提供服务的模式其中LoadBanlace需要云平台的支持阿里云提供了解决方案但腾讯云未找到Ingress技术为新出技术。整体评估采用NodePort方式更为灵活每个服务一个唯一的对外IP地址并且使用Nginx进行负载均衡采用Nginx主要为日志分析。 介绍与使用方法https://kubernetes.io/docs/concepts/services-networking/service/#nodeport。持续部署过程Jenkins构建时需要传入程序版本号构建类型发布还是删除程序类型测试还是正式。CD的全过程由位于Jenkins上的脚本执行开发部将对应版本的ROOT.war传入Jenkins指定目录下拉配置包含confighostsdockerfilek8syaml等等由Dockerfile生成Docker容器并将root.warhosts与配置文件内置入容器中将Docker容器打包并推送入Registry通过kubectl通过k8syaml更新/生成新的服务各组件业务配置Kubernetes业务配置命名空间在业务上Kubernetes默认配置两套Namespace分别为Master存放正式环境Develop配置测试环境。对外端口正式环境Web端口以32001开始测试环境以31001开始且一一对应。Master数据目录/data└── k8s-cd-config└── test.gyyx.cn ├── develop │ └── v1.2.0-92-3fdd00f.yaml ├─develop.yaml - /data/k8s-cd-config/test.gyyx.cn/develop/v1.2.0-92-3fdd00f.yaml ├── master │ └── v1.2.0-91-746284e.yaml └──master.yaml-/data/k8s-cd-config/test.gyyx.cn/master/v1.2.0-91-746284e.yamlK8s-Master下的data目录下为k8s-cd-config k8s-cd-config目录存放各业务的yaml配置二级目录为域名三级目录划分Master正式Develop测试目录下以 版本号-构建ID-GITID.yaml 命名文件时间最后一个即为当前线上的使用配置文件为了运维方便在二级目录同级内生成一个软链连接到最新的正式与测试配置文件。注意k8s-cd-config仅在其中一台Master中存在。Node数据目录/data├── filebeat├── dockerlibs└── nodelogs ├── develop │ ├── accesslogs │ │ └── test.gyyx.cn │ │ └── test-gyyx-cn-76d9d8d5b5-hdnql │ │ └── localhost_access_log.2018-12-24.txt │ ├── devlogs │ │ └── test.gyyx.cn │ │ └── test-gyyx-cn-76d9d8d5b5-hdnql │ │ └── interface.datareport.wyx.cn │ │ ├── error.log │ │ ├── info.log │ │ └── trace.log │ └── tomcatlogs │ └── test.gyyx.cn │ └── test-gyyx-cn-76d9d8d5b5-hdnql │ ├── catalina.2018-12-24.log │ ├── host-manager.2018-12-24.log │ ├── localhost.2018-12-24.log │ └── manager.2018-12-24.log └── master ├── accesslogs │ └── test.gyyx.cn │ └── test-gyyx-cn-895cc5994-sx7gk │ └── localhost_access_log.2018-12-24.txt ├── devlogs │ └── test.gyyx.cn │ └── test-gyyx-cn-895cc5994-sx7gk └── tomcatlogs └── test.gyyx.cn └── test-gyyx-cn-895cc5994-sx7gk ├── catalina.2018-12-24.log ├── host-manager.2018-12-24.log ├── localhost.2018-12-24.log └── 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 存放基础进项各域名分组存放业务镜像。 镜像命名分组下镜像以站点域名:版本号-类型-CDGITLAB为名称并基于版本号确定不同的站点版本。 数据目录Harbor数据目录统一存放在/data下。备份策略Harbor默认不设置备份对于业务镜像无需进行备份每次进行构建即可对于模板类镜像在Jenkins机器上均可以找到若Harbor出现问题则直接重建并将Jenkins上的模板镜像进行重新push。注意为了业务的稳定性Harbor由独立的服务运行基于Docker并不运行在Kubernetes内。Jenkins业务配置数据目录.├── dockerlibs├── thinbackups└── gitlab-files│ └── gyyx.cn│ └── test.gyyx.cn└── jks-cd-config └── test.gyyx.cn └── v1.2.0 ├── develop │ └── 101_138a37a │ ├── … │ └── v1.2.0-101-138a37a.yaml ├── master │ └── 102_4f228a7 │ ├── … │ └── v1.2.0-102-4f228a7.yaml └── ROOT.warJenkins下的data目录分为dockerlibs、thinbackups、gitlab-files 、jks-cd-config。Dockerlibs存放Docker相关文件thinbackups存放每日的Jenkins备份gitlab-files存放构建GitLab的文件运维可以在此操作pullpushjks-cd-config为jks构建目录。Jenkins机使用/data/jks-cd-config目录存放构建内容二级目录为域名三级目录为版本号以开发部版本号为准三级目录下存放ROOT.war四级目录为构建ID_GITID目录下存放构建的原始数据。节点每天进行images清理工作。业务分组Jenkins的分组分为template与各domaintemplate存放模板domain以域名的形式存放正式项目 新项目由运维手工创建后续的秩序构建过程由开发部调用API完成。构建参数Jenkins构建时需要传递三参数1程序版本号2类型apply与delete3正式环境还是测试环境正式环境为Master测试环境为Develop对应Kubernetes的Namespace。 此部分功能后期将通过开发部的构建凭条调用JenkinsAPI实现。JenkinsAPIcurl -X POST http://jenkinsapi.com/job/域名/build \–user admin:11b80a61d260aa41eb4a43ef0115bcbb26 \–data-urlencode json’{“parameter”: [{“name”:”VERSION”, “value”:”v1.2.0”}, {“name”:”TYPE”, “value”:”apply”}, {“name”:”BRANCH”, “value”:”develop”}]}’APIDochttps://wiki.jenkins.io/display/JENKINS/RemoteaccessAPITokenhttps://jingyan.baidu.com/article/0eb457e5dbad8003f0a9056c.html备份策略Jenins安装ThinBackup插件配置每小时进行一次全局备份且最多保留10份备份后数据传至异地。 注意为了业务的稳定性Jenkins由独立的服务运行并不运行在Kubernetes内。GitLab业务配置业务分组CD GitLab项目下分两个组template与各domaintemplate存放模板文件。例如 Git分支default下以域名划分项目每个项目划分Master与Develop两个分支分别存放正式环境与测试环境CD文件。 CD文件树├── catalina.sh #tomcat配置文件├── config #程序配置文件此文件夹会替换掉容器内的/data/conf│ └── hello.conf├── deployment.yaml #k8s deploymen配置├── dockerfile #docker镜像生成文件├── hosts #docker镜像的hosts此文件将合并到deployment.yaml├── service.yaml #k8s service配置└── tomcat #tomcat配置文件 ├── Catalina │ └── localhost ├── catalina.policy ├── catalina.properties ├── context.xml ├── logging.properties ├── server.xml ├── tomcat-users.xml └── web.xml备份策略GitLab使用gitlab-rake gitlab:backup:create进行每日定期备份并传送至异地。EFK与日志管理ElasticsearchES数据通过索引仅保留近10天的数据每日通过脚本方式进行数据删除。ES的数据保存在/data/elasticsearch目录下。Filebeat在每个Node节点启动一个Filebeat进程用于日志的采集工作filebeat分别监控/data/nodelogs//accesslogs////data/nodelogs//devlogs////data/nodelogs//tomcatlogs///其中tomcatlogs日志需要进行特殊处理进行多行合并数据写入ES时使用processors. Dissect进行目录名称截取并使用域名作为ES的索引使用。processors:- dissect: tokenizer: %{?key1}/%{?key2}/%{?key3}/%{wtype}/%{ltype}/%{domain}/%{?key7}/%{?key8} field: sourcetarget_prefix: gy截取gy. wtype ( master或develop) , ltype(accesslogs 、tomcatlogs、devlogs),domain(xxx.gyyx.cn)。KibanaKibana目前我们仅使用其discover节点用于日志数据的查询在配置方面。Kibana配置使用“域名-*”方式进行配置每次新增域名需要在此进行手工配置。 Kibana使用discover查看时默认展示一个域名下所有的日志可以通过gy.wtype筛选选择查看测试环境还是正式环境或者通过gy.ltype哪种日志类型。 容器资源监控容器资源使用WeaveScope进行资源消耗监控。 福利扫描添加小编微信备注“姓名公司职位”加入【云计算学习交流群】和志同道合的朋友们共同打卡学习推荐阅读全面剖析企业私有云30 秒Chrome 插件带你速成编程学习 | 程序员硬核评测为什么程序员下班后只关显示器从不关电脑算法警告该图片涉嫌违规不予显示交易机器人春天已来先看完这篇再说吧2019年中国IT市场趋势热点2019年最值得关注的五大微服务发展趋势喜欢就点击“好看”吧