华为云云原生王者之路集训营(黄金-第一章和第二章)
十年云计算浪潮下,DevOps、容器、微服务等技术飞速发展,云原生成为潮流。2020年华为云在业界率先提出了云原生2 .0的理念。云原生2.0是企业智能升级新阶段,企业云化从“ON Cloud”走向“IN Cloud”,成为“新云原生企业”,新生能力与既有能力立而不破、有机协同,实现资源高效、应用敏捷、业务智能、安全可信。
第一章 云原生开学"第一课"
1.1云原生技术发展历程
云原生其实不是一个太新的概念,更多是在云计算的发展历程对于理念的更新和延伸。上图看到的更多是云计算发展的一个历程
从用户的角度,是越来越灵活的发展
kubernetes 凭借着先进的架构理念和活跃的社区生态去持续引领业界的发展热度,kubernetes是近三十年来增长最快速的开源项目之一
从底层有非常多的容器,云原生存储,云原生网络,以及硬件加速方案进行选择,如果面向用户,面向业务,kubernetes的北向可以运行和对接业界各种主流的数据库、中间件、CI/CD工具链等等
容器技术采用情况(2018-2020年) 容器持续迅猛增长:68%的机构在生产环境中使用容器
Kubernetes采用情况(2018-2020年) Kubernetes 无处不在:Kubernetes 的生产使用比例已从去年的72%增长到了82%。
2.云原生核心理念
云原生核心理念
1.解耦软件开发,提高灵活性和可维护性
基于容器镜像的软件分层,清晰的依赖管理 剥离程序、配置和微服务,让开发者聚焦业务开发
通过拆分应用程序为微服务和明确的依赖描述
2.多云支持,避免产商锁定
厂商基于标准接口提供服务,互操作性强 开源为主,丰富的标准软件生态-用户选择多
支持在所有公有云、私有云或混合云部署
3.避免侵入式定制
基于k8s的松耦合平台架构,易扩展 k8s已被公认是platform for platform
4.提高工作效率和资源利用率
通过中心编排过程 动态管理和调度应用/微服务
声明式API在这种大型的分布式系统非常有利于收敛的趋向于稳定的状态,kubernetes 在API采用的是对象互补组合的模式,区别于继承模式,好处是业务运行和资源调度的核心单元,实际上就是容器中运行的核心代码,围绕着向针对着的不同的视角,比如说是定义部署这个业务,kubernetes提供了这种Workload多种类型的抽象,让用户有直观的感受,结合业务的相关特点去定义Workload的类型,针对向应用,业务对外提供服务有像Service和Ingress这样的API帮你去定义这个服务,数据交互层面的特征。
声明式:指只需要提交一个定义好的API对象来声明期望的状态是什么样子的 声明式API才算Kubernetes项目编排能力赖以生存的核心所在
服务网格-剥离业务代码和分布式框架
服务网格控制面
1.非侵入式接管应用服务通信
对于传统分布式软件中的开发最大的区别式业务开发已单机的模式进行,通过接管通信的网络来做分布式、负载均衡、灰度发布等,使你的平台团队在网格框架的层面聚焦框架层的开发和相关的调优
2.细粒度流量治理:灰度发布、故障注入、观测性支持
3.业务团队聚焦业务本身的开发,带来了工作效率的提升
3.云原生技术体系及CNCF核心项目
开源社区的云原生技术的推动者,同时是相关技术标准的制定者
SANDBOX:帮助创新的开源项目去解决厂商中立,产权和license授权宽松(方便用户在自己的环境中做商业化的实用)等
第二章 容器技术基础介绍
背景:
开发运维问题:
1.应用与运行环境分开交付,无法保证环境的一致性
2.资源、环境的隔离问题
3.之前已有大量的探索,例如虚拟层面的隔离,应用层面的隔离等,探索追求更好的隔离性、更高的资源利用率以及启动时间
概念:
在Linux中,容器技术是- -种进程隔离的技术,应用可以运行在一个个相互隔离的容器中,与虚拟机相同的是,可以为这些容器设置计算资源限制,挂载存储,连接网络,而与虚拟机不同的是,这些应用运行时共用着一个Kernel。这些技术的基础就是Linux的LXC (Linux Container),通过将Cgoups的资源管理能力和Linux Namespace的隔离能力组合在一起
Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。
Cgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 — 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup。
概念- Namespace
Linux Namespace提供了一种内核级别隔离系统资源的方法, 通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。
Namespace 隔离内容
UTS 主机名与域名
IPC 信息量、消息队列和共享内存
PID 进程编号
Network 网络设备、网络栈、端口等等
Mount 挂载点(文件系统)
User 用户和用户组
2.Docker容器和容器镜像技术介绍
Docker
Docker是一个用于开发,交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。
借助Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用Docker的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1.docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
2.docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。
3.docker更轻量,docker的架构可以共用一个内核与共享应用程序库,所占内存极小。Hypervisor就是需要重新虚拟一个内核。
4.高可用和可恢复性: docker对业务的高可用支持是通过快速重新部署实现的。
5.快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
6.交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化; Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署;
使用流程
1.首先开发者在开发环境机器上开发应用并制作镜像。Docker执行命令,构建镜像并存储在机器上。
2.开发者发送上传镜像命令。Docker收到命令后,将本地镜像上传到镜像仓库。
3.开发者向生产环境机器发送运行镜像命令。生产环境机器收到命令后,Docker会从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。
Docker常用命令
选项 说明
build 根据Dockerfile 文件构建镜像
exec 在已运行的容器中执行命令
images 列出本地所有镜像
load 导入镜像压缩包
login 登录第三方仓库
logout 退出第三方仓库
logs 打印容器的控制台输出内容
pause 暂停容器
ps 列出正在运行的容器,-f选项可强制删除正在运行的容器
pull 从镜像仓库拉取镜像
push 将镜像推送到镜像仓库
restart 重启容器
rm 删除已停止的容器,-f选项可强制删除正在运行的容器
rmi 删除镜像(必须先删除该镜像构建的所有容器)
run 根据镜像生成并进入一个新的容器
save 打包本地镜像,使用压缩包来完成迁移
search 查找镜像
tag 修改镜像tag
Docker镜像
一种新型的应用打包、分发和运行机制。容器镜像将应用运行环境,包括代码、依赖库、工具、资源文件和元信息等,打包成一种操作系统发行版无关的不可变更软件包。容器镜像打包了整个容器运行依赖的环境,以避免依赖运行容器的服务器的操作系统,从而实现“build once,run anywhere”.
容器镜像一旦构建完成,就变成read only,成为不可变基础设施的一份子。
操作系统发行版无关,核心解决的是容器进程对操作系统包含的库、工具、配置的依赖。
Docker镜像的分层结构
只有容器层是可写的,容器层下面的,所有的镜像层都是只读的
叠加文件系统:从上往下依次在各镜像层中查找文件
Copy-on-Write:只有当需要修改时才复制一份数据
3.镜像仓库介绍
容器镜像服务(Software Repository for Container,简称SWR)是一种支持镜像全生命周期管理的服务,提供简单易用、安全可靠的镜像管理功能,帮助您快速部署容器化服务。您可以通过界面、社区CLl和原生API上传、下载和管理容器镜像。
核心功能:1.镜像全生命周期管理 2.私有镜像仓库 3.镜像源加速 4.镜像仓库触发器 5.镜像安全扫描
4.如何使用Dockerfile进行镜像构建
Demo 内容:Weather Forecast 是一款查询城市的天气信息的应用示例
1.构建镜像
#docker build -t forecast:v1
2.推送镜像到swr保存,用于下次实验
# docker tag frontend:v2 仓库地址/jarvis/forecast:v2
# docker push 仓库地址/jarvis/forecast:v2
新兴的镜像构建工具
Docker镜像构建存在的问题:
1.线性构建,所有步骤顺序执行
2.无法在普通用户下执行
3.无法清理敏感数据,构建的镜像中能查看到历史执行中的命令,如果Dockerfile中有敏感信息,将一直保存在镜像中
实验:应用容器化构建
本课实验:应用容器化构建
实验目标: forecast代码和Dockerfile制作容器镜像,推送至容器镜像仓库
实验前置条件:安装有Docker的Linux机器,实验使用的代码
实验关键步骤:
1.使用docker命令构建forecast镜像
⒉.推送镜像至容器镜像仓库
3.查看镜像推送完成
课程总结:
LXC Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源
Cgroup 其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。
Namespace Linux Namespaces机制提供一种资源隔离方案。
Docker Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
- 点赞
- 收藏
- 关注作者
评论(0)