CloudNative时代践行DevOps躲坑指南

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


  2015年,谷歌成立了原生云计算基金会,标志着CloudNative时代的来临。它以容器化封装、自动化管理、面向微服务等特点,向人们展示了应用云化开发的新模式。在业界,DevOps全栈开发运维模式正在继续向前推进,以解决传统单体架构的应用开发、测试、运维无法一体化而导致的上线周期长,开发资源利用率低,无法满足应用快速上线和迭代要求等问题。

  2018年,用友云开发者中心作为CloudNative模式的引领者,作为DevOps模式的践行者,在一次又一次的迭代研发中经历了层层的蜕变:在4.19迭代中,上线了应用流水线功能,大大简化了应用CI、CD时的配置及操作,提升了构建效率;在8.19迭代中,以提升平台稳定性为重心,调整优化了平台底层架构,使平台稳定性得到了大幅度提升;在12.19迭代中,创新性的研发了产品流水线功能,打通了产品下各模块之间,各环境之间的应用部署,再一次提升了产品的部署效率。

  当前,随着开发者中心稳定性及易用性的提升,越来越多的产品和服务正在向开发者中心迁移,需要运维的应用规模成指数级增长。本文立足于当下环境,以一名DevOps(yunwei)工程师的角度,向大家介绍一些在践行DevOps中遇到的常见的、共性的问题,并给出这些问题的排查思路及解决办法,助力应用部署过程保证顺利上云。

  1.通过编写Dockerfile方式,灵活构建应用

  在开发者中心应用流水线中,已经提供了不同类型应用的标准构建模式。同时为提供更加灵活的应用构建方式,开发者中心提供了手动编写Dockerfile的模式来构建应用。通过手动编写Dockerfile,用户拥有极大的自由度来构建镜像,并可解决构建时遇到的一些问题。

640?wx_fmt=png

流水线支持Dockerfile的方式构建应用

  例如,针对原有的Node.js应用构建模式,可能遇到以下问题:

  • 容器启动之后才执行编译代码操作,导致应用启动过程时间变长

  • 默认构建镜像的过程中无法选择npm源,从而导致镜像构建失败

  现在,用户可以通过编写Dockerfile的方式,在构建镜像的过程中指定npm源,并在构建镜像的过程中即对应用进行编译。这样不仅解决了应用编译和构建的问题,而且也加速了应用容器在部署时的启动速度。

  本文给出一个具体的Dockerfile示例,以供参考:

  FROM dockerhub.yonyou.com:5000/node:9

  MAINTAINER 用户名 “user-email@yonyou.com”

  WORKDIR /design/workdir

  ADD ./ /design/workdir

  RUN cnpm install \

  && npm run build:dll \

  && npm run build

  VOLUME /design/workdir/log

  EXPOSE 8080

  CMD [“npm run start”]

  2.快速查看应用运行日志和异常日志

  在应用上云过程中,经常会遇到需要查看应用日志以排查问题的场景。开发者中心提供了快速便捷的查看应用日志和异常日志的方法,具体如下。

  首先通过开发者中心,进入应用管理界面,在“实例”页签中可以看到(容器日志)和(容器控制台)。通过点击容器日志图标,可以在弹出窗口中查看应用输出到控制台的日志;通过点击容器控制台图标,可以在弹出窗口中登录至容器内操作系统中,进而执行Linux Shell命令,以进行查看应用日志文件等操作。

640?wx_fmt=png

通过开发者中心的应用管理查看日志

  具有管理员权限的用户,还可以直接访问应用所在主机,在后台主机中查看应用日志。

  查看普通资源池,即Mesos架构平台下应用日志,可以在浏览器中访问主控机:5050端口,来访问Mesos-Master管控页面;同时也可以访问主控机:8080端口,打开Marathon管理页面。两者均可以搜索到应用的容器,进而查看应用运行日志。

  3.排查应用无法正常启动的几种方法

  在部署应用后,可能会遇到应用无法正常启动,无法通过健康检查的情形,此时可以通过以下几种方法,排查并解决问题。

  1) 确认配置了正确的健康检查配置项

  导致应用无法正常启动并运行的原因有很多。对于Java Web等类型的应用,开发者中心配置了默认的健康检查页面。当应用无法通过健康检查时,可以先在应用管理菜单,应用详情的属性页签下,查看健康检查项。健康检查提供了HTTP、UDP、COMMAND等三种方式,只有配置了正确的健康检查,才能通过健康检查验证。

640?wx_fmt=png


健康检查配置项

  2) 确认配置了正确的应用服务端口

  应用在启动会向系统申请服务端口,这个端口会实际会在应用所在的容器中占用。在相应的配置项中,必须指定了对应的服务端口,才能保证应用的正常访问。

  应用实际申请的服务端口,可以通过进入容器内部查看。此时需确认应用的服务端口,是否和应用详情的属性页签中,容器端口项相一致。若不一致,则将配置修改为相同的容器端口号,点击保存并重启按钮使配置生效。

640?wx_fmt=png

640?wx_fmt=png

容器端口相一致

  3)确认为应用分配了足够的系统资源

  应用在启动和运行时需要向系统申请内存等资源。如果应用出现无法正常启动,或不断重启的现象,可能是由于分配的资源不足导致。

  在开发者中心普通资源池部署的应用,建议内存分配为1024MB~2048MB,CPU可设置为0.2~0.5.在VIP资源池部署的应用,内存最大值建议设置为1024MB~4096MB,CPU最大值建议设置为1~2.

  4)从应用日志入手,分析具体原因

  在确认以上配置正确后,若应用仍无法正常启动,可以通过查看应用日志的方式,寻找导致应用无法启动的原因。限于篇幅原因,此处不再赘述。

  4.应用通过健康检查但无法正常访问的排查方法

  应用通过健康检查后,可能会遇到点击应用的域名,但却不能正常访问应用的情形。此时需从应用访问链路角度入手,排查问题。

640?wx_fmt=png

应用健康示意图

  对于普通资源池部署的应用,本文提供一种排查问题的思路如下:

640?wx_fmt=png

普通资源池应用无法正常访问排查问题思路

  1)进入应用容器中,执行命令如curl -Lv localhost:8080/api,查看应用是否正常启动。若应用未正常启动,可参考第3节内容排查问题;

  2)若应用正常启动,则需排查Marathon-LB负责均衡是否出现问题。通过浏览器或者Postman等工具,请求192.168.0.3:38228/api.其中192.168.0.3为Marathon-LB所在服务器IP地址;38228为应用随机映射端口号,可在应用详情,属性页签下的环境变量中查看。如不能正常返回结果,则说明Marathon-lb负载均衡环节出现问题;

640?wx_fmt=png

查看应用的随机映射端口号

  3)若Marathon-LB负责均衡无异常,可在Redis中查询Ceryx为应用绑定的ip和端口是否存在问题。

  5.应用部署时,手动调试启动问题的方法

  如果应用启动过程中遇到问题,用户可以手动调试自己的应用,具体的方法为:

  1)修改启动命令,以保证应用容器正常启动:touch test && tail -f test

640?wx_fmt=png

修改启动命令

  2)修改健康检项为1s,以使容器绝对通过健康检查:

640?wx_fmt=png

修改健康检查

  3)点击保存并重启按钮,随后即可进入容器,输入应用的启动命令启动应用,或输入其他命令,排查问题。

640?wx_fmt=png

进入容器,执行命令

  6.巧用环境变量,灵活调整应用运行态

  当Java应用启动遇到了PermGen等类似问题时,可以在应用管理菜单,属性页签下,在环境变量里面设置相应的环境变量,来增加应用的性能参数,如图所示。

640?wx_fmt=png

设置环境变量

  7.k8s启用host模式,实现共享宿主机网络

  开发者中心目前已经支持在VIP资源池以HOST模式部署的应用,这可保证一些特殊类型的应用正常运行,如Dubbo框架应用。在HOST模式下部署的Dubbo框架应用,可以保证混布的Consumer也能够消费到部署到Kubernetes集群中的Provider.

  具体的使用方法如图所示,用户需要在应用详情-属性页签下的命令项中,修改启动命令,将容器默认的8080端口替换为系统分配的PORT0变量。

640?wx_fmt=png

应用以HOST模式部署

  应用修改为host之后的启动命令为:

sed 's/8080/'$PORT0'/g' -i conf/server.xml && /usr/local/tomcat/bin/catalina.sh run

  8.URL中特殊字符的解决办法

  开发者中心使用的基础镜像版本均为各对应类型应用环境的标准最新版,因此一些老版本的应用特性可能与之不兼容,如在Tomcat 7的低版本7.0.69中支持URL里包含“{”、“}”等特殊字符,但是Tomcat 7的高版本不支持此类字符。解决办法是在应用详情,属性页签下的命令项中,增加如下命令:

echo ' tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}' >> conf/catalina.properties && /usr/local/tomcat/bin/catalina.sh run

  小结

  本文主要介绍了用户在使用开发者中心部署应用的过程中,可能遇到的常见的、共性的问题,并给出解决办法和问题排查思路。

  当前,用友云开发者中心仍然背负者CloudNative模式引领者的使命,继续践行DevOps理念,向用户提供更加完备的功能,以协助企业优化产品架构,提供弹性、灵活、高可用的运行环境,协助用户应用顺利上云。

  若您在使用开发者中心过程中遇到任何问题,欢迎随时与我们的技术人员反馈,如将问题反馈至我们设立的用户暖心群等,您提出的问题将会得到专业人员的迅速解决!


1.微信群:

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


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。


推荐阅读

  • 下一次 IT 变革:边缘计算(Edge computing)

  • 企业云存储建设之路

  • AI in 美团:吃喝玩乐背后的黑科技

  • 开除“野狗”式程序员,团队的效率提高了

  • Windows 成“弃子”,Linux 终上位?

  • 可替代Android的6大开源移动操作系统

  • 程序员求助:被领导强行要求写Bug该怎么办?网友的回答让我笑翻


程序员抢票的正确姿势 ↓↓交朋友还能抢票?


640?wx_fmt=jpeg


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png喜欢就点击“好看”吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组:三种初始化及内存分析

java内存分析: 1.堆:存放new的对象和数组 2.栈:存放进本变量类型 3.方法区:class、static package com.wuming.struct; public class Demo08 { public static void main(String[] args) { //静态初始化&#xff…

BugkuCTF-MISC题简单套娃

打开题目,是一个图片。 丢进010发现有两个jpg头 把第二个FFD8FFE0后面一起复制下来,另存为一个新的图片。 丢进StegSolve,发现别的图层存在flag。 点击下方的左右箭头变换, 若flag实在看不清,两张图放进Stegsolve的Ima…

资源 | Alibaba Cluster Data 开放下载:270 GB 数据揭秘你不知道的阿里巴巴数据中心...

戳蓝字“CSDN云计算”关注我们哦!CSDN云计算授权转载自阿里系统软件技术作者:临石打开一篇篇 IT 技术文章,你总能够看到“大规模”、“海量请求”这些字眼。如今,这些功能强大的互联网应用,都运行在大规模数据中心上。…

数组下标越界及小结

package com.wuming.struct;public class Demo09 {public static void main(String[] args) {int[] a{1,2,3,4,5,6,7,8};for (int i 0; i <a.length; i) {//去掉&#xff0c;下标越界&#xff0c;数组下标为[0&#xff0c;length-1]System.out.println(a[i]);}} }1 2 3 4 5…

C语言 strcpy 和 strcpy_s 函数区别 - C语言零基础入门教程

目录 一.strcpy_s 函数/strcpy 函数简介 1.strcpy 函数语法2.strcpy_s 函数语法 二.strcpy/strcpy_s 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.strcpy_s 函数/strcpy 函数简介 1.strcpy函数语法 /* *描述&#xff1a;此类函…

BugkuCTF-MISC题可爱的故事

下载文件&#xff0c;打开两张图片 根据评论提示是原神里面的提瓦特字母 题目的提示说flag就藏在图片特殊文字里&#xff0c;还提到谷歌翻译&#xff0c;开始以为要把文字翻译成我们认识的&#xff0c;结果半天提取不出来文字&#xff0c;看了其他暗示&#xff0c;才知道这是类…

漫画:如何实现大整数相乘?(下)

戳蓝字“CSDN云计算”关注我们哦&#xff01;如何用程序实现大整数相乘呢&#xff1f;在上一篇文章 漫画&#xff1a;如何实现大整数相乘&#xff1f;&#xff08;上&#xff09; 当中&#xff0c;我们介绍了两种思路&#xff1a;1.像列竖式一样&#xff0c;把两整数按位依次相…

成员变量(全局变量)和局部变量区别

1.成员变量&#xff08;全局变量&#xff09;在类中&#xff0c;方法外&#xff0c;可用修饰符修饰 2.局部变量在方法中&#xff0c;不可用修饰符修饰

C语言 memcpy 和 strcpy 函数区别 - C语言零基础入门教程

目录 一.memcpy 函数/strcpy 函数简介二.memcpy 函数/strcpy 函数实战 1.strcpy 函数属于字符串拷贝2.memcpy 函数属于内存拷贝 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.memcpy 函数/strcpy 函数简介 C 语言在 string.h 中 strcpy 函…

BugkuCTF-MISC题宽带信息泄露

下载文件conf.zip&#xff0c;解压得出conf.bin 在端输入strings conf.bin没有flag 此题需要路由器配置文件查看工具RouterPassView 下载此工具 在终端输入wine RouterPassView.exe(wine即在linux系统里打开exe程序文件) 查找username 提交flag{053700357621}成功

全世界的程序员们,为什么都不在意“穿衣”这档事?

戳蓝字“CSDN云计算”关注我们哦&#xff01;十月份我去北京出差&#xff0c;来到后厂村走了一圈&#xff0c;想看看现实中的北京程序员是否真的像之前刷屏的《互联网公司时尚穿搭指南》中所述&#xff0c;存在“天然结界”。到的时候正好是午休时间&#xff0c;一下车就在某巨…

C语言 memcpy和memcpy_s区别 - C语言零基础入门教程

目录 一.memcpy 和 memcpy_s 函数区别 1.语法对比 memcpy_s 函数语法memcpy 函数语法 2.memcpy 和 memcpy_s 相同点3.memcpy 和 memcpy_s 不同点 1.memcpy 函数报错&#xff1a;error C49962.memcpy 函数没有方法来保证有效的缓冲区尺寸&#xff0c;使用不安全 三.memcpy 和 …

BugkuCTF-MISC题猫片

python知识点 ^是按位异或操作符 [::-1]能令列表反向 解题流程 题目提示&#xff1a;LSB BGR NTFS 下载之后就是一个叫png的文件&#xff0c;没有后缀&#xff0c;那么加后缀 打开Stegsolve直接就Analyse-----Data Extract&#xff0c;根据提示LSB,BGR,一顿尝试 发现了PN…

等了20年的物联网,这次真的会成功吗?

戳蓝字“CSDN云计算”关注我们哦&#xff01;最近几年&#xff0c;物联网的概念非常火爆&#xff0c;和物联网相关的技术&#xff0c;例如NB-IoT、LoRa、eMTC等&#xff0c;都频繁地出现在我们的眼前&#xff0c;出现在新闻里&#xff0c;出现在展会上。其实&#xff0c;「物联…

手把手教你数组反转

package com.wuming.struct;public class Demo12 {public static void main(String[] args) {int[] arrays{1,2,3,4,5};/* //JDk1.5&#xff0c;没有下标for (int array : arrays) {System.out.println(array);}*/// printArray(arrays);int[] reverse reverse(arrays);pri…

BugkuCTF-MISC题妹子的陌陌

下载图片 通过010editor查找并未发现有价值的信息 通过binwalk -e file.jpg分离出文件夹_file.jpg.extracted 里有91DC.rar&#xff0c;解压发现需要密码&#xff0c;通过爆破找不到密码 在file.jpg图片里有“喜欢我吗.”&#xff0c;将其输入到解压密码里 发现竟成功解压 得到…

深入理解与应用Hadoop中的MapReduce

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;安静的技术控 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/a2011480169/article/details/52924955 版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上博文链接&#xff01;现在大数据…

手把手教你二维数组打印

package com.wuming.struct;public class Demo13 {//多维数组&#xff1a;特殊的以为数组//二维数组&#xff1a;int a[][]new int[a][b],当成一维数组打印public static void main(String[] args) {int[][] array{{1,2},{2,3},{3,4},{4,5}};for (int i 0; i < array.lengt…

BugkuCTF-MISC题蜜雪冰城~

看txt&#xff0c;里面只有(0, 0, 0)和(255, 255, 255)&#xff0c;(0, 0, 0)是黑色&#xff0c;替换成1&#xff0c;(255, 255, 255)是白色&#xff0c;替换成0。 脚本&#xff1a; with open("你爱我呀我爱你.txt",) as f:with open("binary.txt",w) as…

你好,请查收这封元旦祝福,CSDN云计算改版啦!

戳蓝字“CSDN云计算”关注我们哦&#xff01;◆ ◆ ◆ ◆2019新年快乐HAPPY NEW YEAR此时是2019年1月1日站在新一年的起跑线上最暖心的鼓励让2019更精彩祝福中&#xff0c;你步伐坚定&#xff0c;走向远方 ◆ ◆ ◆ ◆元旦快乐CSDN云计算的粉丝们&#xff1a;好消息&#xff01…