如何保证软件交付过程的标准化 | 学习笔记

简介: 快速学习如何保证软件交付过程的标准化

开发者学堂课程【ALPD 云架构师系列:云原生 DevOps 36计-阿里云云效出品工具篇:如何保证软件交付过程的标准化】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/772/detail/13497


如何保证软件交付过程的标准化


主要内容

一、“集装箱”应该是什么

二、容器镜像是什么,怎样组成

三、几个容器镜像的常见问题

四、容器镜像的实践建议

标准化、基于统一标准的产业链,上世纪五六十年代整体货运成本降低95%,码头工人面临其它职业,只是做铁盒子装起来却让整个经济全球化带来很大变化。存在两个主要因素

不可变

  • 消除不一致带来的不确定性
  • 减少不一致的风险
  • 减少维护成本

标准化

  • 简化部署
  • 降低环境维护成本
  • 降低工具链开发和学习成本


一.“集装箱”应该是什么?

image.png

1.容器是一个通过 namespace 和 cgroup 来实现资源隔离和资源限制的沙箱进程。

2.容器镜像是容器的一种分发形式,里面包含了运行容器所需的组件和资源。

3.Dockerfile 是描述容器的一份文档。

4.相对于早先的 LXC,docker 提供了 Dockerfile 这样的容器定义方式,提供了镜像继承和复用的能力。

十几年的时间软件交付发生很大变化,一开始买机器是物理机到虚拟机现在开始用容器。

发生变化原因是谁有动力促进变化的发生,最早容器技术本身底层 namespace 和 cgroup 很早就出现。最早利用是云厂商,对资源利用率和隔离有明确诉求的厂商。例如阿里云,不希望跑到机器上不同用户的东西互相串,最好限制每个资源,CPU 内存是多少,资源是隔离、可限制的。因此产生诉求,基于此场景可用 LXC 隔离限制资源但还没产生容器。只是在云厂商内部用,不能分发。docker 的伟大不在于在底层做了多大的技术创新,而是提供容器镜像概念,容器镜像是分发的形式,可以将容器镜像分发或继承给别人,形成了市场。同时提供 Dockerfile 可通过文件的形式描述镜像,一旦可定义就可以写作,有了此能力整个容器被接受。容器接受看起来是技术问题,随着云原生、云市场起来所必然带来的结果。现在认为的集装箱就是容器而容器认为是 docker 容器。事实上K8s 支持很多容器应用使用,但大部分是 docker 容器。docker 容器相对以往的优势是镜像、Dockerfile。docker 像集装箱做很好的分发,本身容器提供很多资源隔离的东西,在很小的力度上做相应的隔离。虚拟机也会做相应的机械隔离比如数组机上做隔离,相对力度大。

容器提供了弹性的资源管理方式比虚拟机和物理机做了比较大的改善。本质上是物理机上的进程,与虚拟机有本质上的差别。


二.容器镜像是什么,怎样组成

image.png

上图是多个容器镜像内部的结构,构建 Dockerfile 的镜像为一层一层的,每一层都有特定的东西。最下边 Kernel 层运营在数组机上,通过 Container 技术或其它技术将容器进程构建,通过 namespace 和 cgroup 做资源隔离和限制。容器镜像 Base Image,运行镜像有环境要求,随便在虚拟机或物理机部署随着机器环境的不同而有不同可能导致风险,容器将东西放在基本构建。向上有 add emacs add Apoche 两层在 Dockerfile 写,安装软件或将镜像拷入,在里面加东西。最上面 writable 在 Container 在运行时真正写的一部分东西。

1.容器镜像的特点

镜像是分层的,每一层都可复用。机器上有很多容器 Container,如果 Base Image 是一样的,只要差一个就可以。

基本镜像和所有的层堆起来,堆起来的东西越少,镜像越小。容器镜像最小最原始的镜像 scratch,几乎什么都没有。如果想构建非常小容器对象,scratch 几兆的大小。

One process per container 容器生命周期就是进程生命周期。容器是 K8s 的进程,把 K8s 比作操作系统,container 就是 process,进程的生命周期可以被管理,可以知道进程的生命周期怎样的。

是否以物理机、虚拟机的方式用容器,容器有很多特点,在使用容器时遇到很多问题。


三.几个容器镜像的常见问题

1.为了完成业务诉求镜像加入了 chromium、elasticsearch、jdk...,大小超过了2个G

很多镜像增加各种诉求,容积非常大,启动非常慢,当作机器使用。

2.把镜像的 ENTRYPOINT 设置为 systemd,再添加服务有什么问题?

ENTRYPOINT 默认在 systemd(demo进程管理器) 起容器镜像,当systemd 作为容器镜像 ENTRYPOINT 是可添加很多服务,可以当虚拟机用,ip 地址、防火墙。此容器就是虚拟机,虽然不是用虚拟机运行,当虚拟机用,因为起点是 systemd。systemd 里的进程运行的状态与容器状态不一致,可能进程已经“死掉”了但 systemd 还活着,在外部看起来容器是好的。希望容器与提供的服务是绑牢的,状态与服务状态一致。

3.私有化部署的时候带一推导出的镜像 tar 包,U盘快满了

带包出去做私有化部署在客户现场做部署,容器是分层的,每一层都能复用。如果一堆镜像 tar 包,tar 包不分层,不知道一分多层,带出信息量特别大。到客户现场安装麻烦,每盘进行分发,整个过程非常不好。容器是分层复用的概念但被用成重复的概念。一层一层,上面一层永远可以基于下面一层的底座,下面一层可以复用。

4.每次把基础镜像下发到整个集群,都会让网络变得特别拥堵

更新所有的 Dockerfile 下发到整个集群,业务在高峰期,内部网络非常拥堵。每个容器镜像有几百兆,数以千计的集群过来占用大量带宽,带宽占领大量业务属性。因为运维的操作导致了网络拥堵,进而导致服务出现问题。本身让服务更稳定运行,反而带来风险,将服务的可用性降低。

公司做了安卓的 ck,ck 有自动更新功能,网上查是否有新版本,有新版本下载更新。但有几百万终端,万一同一时间都查,都拉包,服务会被打死。服务前面有网关,网关扛不住如此大的量,像攻击一样。更新问题要下发包,带来了很大的挑战,写了一个 bug 导致不能更新。

四.容器镜像的实践建议

尽量采用轻量级的基础镜像和确定的镜像版本

通过分层来复用镜像内容,避免重复拉取

避免采用如systemd supervisord这样的进程作为ENTRYPOINT

采用本地dockerregistry的方式来离线拷贝多个镜像

避免同时大量的docker pull,可采用P2P的方式提升镜像分发效率(如 dragonfly蜻蜓)。如果做不好,遇到错误非常难修复。

确定不可变、标准化,docker 镜像相应做标准化的事情。标准化是手段不是目的,标准化帮助更高效、复用更快的技术或生态的其它东西。

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
开发工具 git
vscode 查看git提交日志
vscode 查看git提交日志
1641 0
|
前端开发 C++ iOS开发
几款主流好用的markdown编辑器介绍
几款主流好用的markdown编辑器介绍
1118 1
|
域名解析 网络协议 测试技术
IP、掩码、网关、DNS1、DNS2到底是什么东西,ping telnet测试
理解IP地址、子网掩码、默认网关和DNS服务器的概念是有效管理和配置网络的基础。通过使用ping和telnet命令,可以测试网络连通性和服务状态,快速诊断和解决网络问题。这些工具和概念是网络管理员和IT专业人员日常工作中不可或缺的部分。希望本文提供的详细解释和示例能够帮助您更好地理解和应用这些网络配置和测试工具。
7454 2
|
Linux
深入理解Linux虚拟内存管理(七)(上)
深入理解Linux虚拟内存管理(七)
363 1
|
消息中间件 SQL 分布式计算
大数据-62 Kafka 高级特性 主题 kafka-topics相关操作参数 KafkaAdminClient 偏移量管理
大数据-62 Kafka 高级特性 主题 kafka-topics相关操作参数 KafkaAdminClient 偏移量管理
252 6
|
缓存 资源调度 Rust
前端效率提升实践之路
在一个B端前端项目中,开发团队面临开发效率低、交付质量和可维护性差的问题。为了解决这些问题,他们以“提效”为主题,展开了项目治理。首先,他们优化了发布和编译过程,通过更换包管理工具、减少不必要的包、使用缓存策略等方法,显著缩短了发布和编译时间。其次,团队致力于沉淀可复用物料,创建了高度配置化的组件,通过VSCode插件助手自动化配置,提高了代码复用性和开发效率。此外,他们还改进了研发流程,制定了前端、后端和产品的规范,以减少沟通成本和提高接口质量。通过这些措施,团队成功提升了开发效率,并降低了代码维护成本。
624 3
前端效率提升实践之路
|
设计模式 开发框架 Java
java设计模式面试题大全含答案
java设计模式面试题大全含答案
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
324 0
|
自然语言处理 算法
ransformers从入门到精通:常用的subword tokenizer算法
- WordPiece、BPE/BBPE最小字词进行合并最终字词,BPE/BBPE直接采用词频判断合并规则而WordPiece采用最大似然的方式 - unigram采用从最大的字词集合里移除那些对语料库整体概率贡献最小的子词【6月更文挑战第7天】
490 3
|
分布式计算 关系型数据库 MySQL
实战:在Linux上部署各类软件
实战:在Linux上部署各类软件