随着近几年云原生生态的不断壮大,众多企业纷纷开展了用云上云的工作,学习和了解云原生及容器技术对于现代工程师是必不可少的,本文主要为大家介绍云原生及其在容器方面的应用。
1.1 什么是云原生
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
1.2 云原生的设计哲学
云原生系统的设计理念如下:
- 面向分布式设计(Distribution):容器、微服务、API 驱动的开发。
- 面向配置设计(Configuration):一个镜像,多个环境配置。
- 面向韧性设计(Resistancy):故障容忍和自愈。
- 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应。
- 面向交付设计(Delivery):自动拉起,缩短交付时间。
- 面向性能设计(Performance):响应式,并发和资源高效利用。
- 面向自动化设计(Automation):自动化的 DevOps。
- 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪。
- 面向安全性设计(Security):安全端点、API Gateway、端到端加密。
1.3 云原生应用程序
- 微服务
作为单个实体进行管理和部署的应用程序通常称为单体应用。最初开发应用程序时,单体有很多好处。它们更易于理解,并允许您在不影响其他服务的情况下更改主要功能。
随着应用程序复杂性的增长,单体应用的益处逐渐减少。它们变得更难理解,而且失去了敏捷性,因为工程师很难推断和修改代码。
对付复杂性的最好方法之一是将明确定义的功能分成更小的服务,并让每个服务独立迭代。
- 安全及扩展
遥测和度量标准用于解决以下问题:
- 应用程序每分钟收到多少请求?
- 有没有错误?
- 什么是应用程序延迟?
- 订购需要多长时间?
- 弹性扩展
弹性是基础设施的责任,但云原生应用程序也需要承担部分工作,应用横纵向扩展。
- 声明式
因为云原生应用程序被设计为在云环境中运行,所以它们与基础设施以及相关依赖应用程序的交互方式不同于传统应用程序。在云原生应用程序中,与任何事物的通信都需要通过网络来进行。很多时候,网络通信是通过 RESTful HTTP 调用完成的,简化应用程序并使其更健壮。
2、云原生应用程序
2.1 Kubernetes 与云原生的关系
2.2 Kubernetes 架构
Kubernetes 主要由以下几个核心组件组成:
- etcd 保存了整个集群的状态。
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。
- controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。
- scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上。
- kubelet 负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理。
- Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI)。
- kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。
2.3 容器设计模式
统信容器云管理平台-有雀(统信容器云平台解决方案)
以 CRI-O、Kubernetes、OKD 为基础,以应用为中心的企业级容器云 PaaS 平台,提供自动伸缩、配置管理、资源管理、自动运维等功能,实现对容器化应用的全生命周期管理。
3、应用领域
3.1 云原生 OS、运维管理、CI/CD、安全策略
运维管理问题主要包括如下几个方面:
监控:包括 kubernetes 本身组件和 Pod、应用的监控,普罗米修斯 grafana altermanager。
日志收集:包括 kubernetes 本身组件的日志,应用的日志 , fluentd logstash or filebeat 日志收集,elastic 弹性搜索引擎,kibana界面展示。
审计:用户对集群操作的审计。
安全:用户权限的管理和镜像漏洞扫描,oauth存储管理:glusterfs、glusterd、ceph、rook、nfs、openebs 等。
分布式追踪:OpenTracing 是 CNCF 提出的分布式追踪的标准,它提供用厂商中立的 API,并提供常用的 GO、java、js、python 等九种语言的库 jaeger。
3.2 微服务应用、serverless
在单体架构时,因为服务不会经常和动态迁移,所有服务地址可以直接在配置文件中配置,所以也不会有服务发现的问题。但是对于微服务来说,应用的拆分,服务之间的解耦,和服务动态扩展带来的服务迁移,服务发现就成了微服务中的一个关键问题。
Serverless 不如 IaaS 和 PaaS 那么好理解,因为它通常包含了两个领域 BaaS(Backend as a Service)和 FaaS(Function as a Service)。
- BaaS
BaaS(Backend as a Service)后端即服务,一般是一个个的 API 调用后端或别人已经实现好的程序逻辑,比如身份验证服务 Auth0,这些 BaaS 通常会用来管理数据,还有很多公有云上提供的我们常用的开源软件的商用服务,比如亚马逊的 RDS 可以替代我们自己部署的 MySQL,还有各种其它数据库和存储服务。
- FaaS
FaaS(Functions as a Service)函数即服务,FaaS 是无服务器计算的一种形式,当前使用最广泛的是 AWS 的 Lambada。
3.3 大数据、人工智能、边缘计算
边缘计算与云计算是相辅相成的,是在云计算发展到一定阶段的产物。它有以下优点:低延迟、低带宽运行、隐私保护。
大数据的 5V 特点(IBM 提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
Kubeflow 项目致力于使机器学习(ML)工作流在 Kubernetes 上的部署简单,可移植且可扩展。