基于Kubernetes(K8s)构建企业容器云基础运行环境

图片


cncfstack 新 文章上线:

  • 书名:《云原生解决方案》

  • 地址:https://zhaowenyu.com/cncf-solution

  • 访问:文章底部“阅读原文”或访问域名


云原生计算是云计算发展新的里程碑阶段,是当今与未来很长一段时间中 IT 发展的技术基础。但当我们初次接触到云原生技术栈时,特别是云原生全景图(Cloud Native Landscape),会看到大量的开源技术与云原生生态,会感叹他的宏大与复杂,也会困惑于该从哪里开始。

当我们在了解和学习云原生技术时,特别是当我们要进行云原生实践时,该如何把握重点逐步的深入实践呢?与其摸着石头过河自行实践探索,倒不如以开放的心态先来了解下其他团队的实践经验,交流、学习、总结、优化改进一套符合自身业务发展的云原生实践之路。

根据多年的经验与项目实践,我认为云原生的实践大致分为七个主要里程碑阶段,由浅入深分别是:容器云、可观测性、研发效能、分布式与微服务、有状态服务、安全、生态,为便于后文介绍,该七个阶段定义为“云原生最佳七步实践”。本文主要描述容器云阶段,其他阶段会在后续的文章中逐步介绍。

云原生实践的第一步是要建设企业的云原生容器云平台,它是整个云原生实践的基础也是是核心。上图描述了容器云平台的核心能力与推荐的技术选型。

一、基础设施

在进行容器云平台建设时,需要根据企业实际现状来评估基础设施,更多的是合理的复用和管理当前已有的基础设施,并对后续发展演进进行合理的规划。基础设施在评估时一般会考虑计算、存储、网络以及安全的问题,可能会涉及到公有云、私有云、混合云等云平台资源,以及未加入到云的物理机器资源、网络设备资源、终端设备等资源。

在基础设施中最常见的是机器资源,它是所有软件服务运行的核心载体。企业在进行云原生实践前可能已经在云计算阶段发展了很长一段时间,无论是公有云还是自建的私有云,那必不可少的一种机器资源是“虚拟化”的虚拟机;但是在云原生场景下,由于隔离、调度的最小单位是容器,使用物理机器能够带来更好的性能和资源利用率,虚拟机带来的隔离收益已经越来越低;因此建议是直接使用物理服务器来运行容器,而不是再分配的虚拟机中运行。当然,企业的现状(资源、流程、规范、利益等)并不一定能立马基于物理服务器进行实践,但应该将它作为一个长期演进的目标。

基础网络涉及到物理环境且同样被云原生场景作为基础依赖,一般不需要对其进行特殊改造,即使有网络层的需求也是通过软件方式实现。安全层面面临新的挑战,由于云原生的实践产生了新的安全问题,云原生生态也同样提供的应对之法,这在“云原生最佳七步实践”的安全阶段会进行详细的介绍。其他如计算、存储等都可以在云原生的实践中进行拓展和增强。

容器云在大多数企业中也是定位 IaaS 基础设施,并不需要在概念上严格的将容器云与基础设施区分。

二、容器编排调度

容器是一种和虚拟机类似,但又不一样的一种管理单位。容器是由镜像运行起来的服务,镜像将应用程序运行的环境依赖进行打包,以便容器能够在不同的节点上运行产生相同的预期结果,这种特性使其成为了最小可调度管理单元。在 Kuberentes 中容器的运行和管理工具是容器运行时,容器运行时提供了容器镜像的传输(镜像的上传和下载)、镜像存储(将镜像解压后按照 OCI 的标准在文件系统上管理相关文件)、容器运行、容器状态监视以及基础的存储管理和网络管理能力。

Docker 是容器标准化产物,基本成为了容器代名词,在 Kuberentes 的容器运行时选择中仍然是主导地位。基于 Docker 的 Libcontainer 剥离出来的 Containerd 项目在 Kuberentes 中能够提供比 Docker 更短的管理路径,以及轻量化带来的更加安全等特性,使其逐渐成为 Kuberentes 推荐的容器运行时。由于历史的发展与商业的竞争,很多优秀的容器运行时被开发和开放开源出来,这其中 Cri-O 就是其中的娇娇者,也是推荐的选择之一。

容器作为可编排和调度的最小单元,需要一种工具或平台来执行编排和调度,来让容器产生规模化的生产价值。早期的三剑客 Kubernetes、Mesos 和 Swarm 都能够提供容器编排调度能力,在历史激烈竞争的洪流中,Mesos 和 Swarm 已退出了历史的舞台,独尊 Kuberentes 。

Kubernetes 是云原生时代的分布式操作系统,是云原生的核心也是容器云的核心。Kubernetes 以 Etcd 为存储提供了对容器的容器管理、调度管理、编排管理、配置管理、资源管理、弹性伸缩、负载均衡、故障自愈、健康检查、密钥管理、滚动更新、自动部署等基础核心功能,也提供可扩展的接口来满足各种不同的业务场景。

三、扩展能力

Kubernetes 提供核心基础的容器管理能力,更多场景功能由运行在 Kuberentes 中的服务提供。在建设容器云平台时,一般情况下建议同时进行网络管理建设、域名解析、流量代理以及 PVC 存储的基础能力建设,其他能力可以在后续持续建设。

Kubernetes 的网络管理主要提供了网段的分配管理、 IP 地址的分配管理、多节点与服务的网络连接以及网络访问策略管理的能力。目前主流推荐的网络方案主要有 Calico、Flannel 和 Cilium 三种,Calico 适合在大规模复杂的网络场景,Flannel 功能相对 Calico 要简单但能提供较好网络性能,Cilium 是目前社区火热的一种网络解决方案。业务方可以根据实际业务场景进行网络方案的选择,但如果不好区分三者的差异时,推荐默认就用 Calico 方案,至少当前不会是个错误的选择。

DNS 是 Kuberentes 集群中比较重要能力之一,提供域名解析、DNS 代理、Kuberentes 资源名称解析以及服务发现的能力,推荐使用 CoreDNS 作为集群的 DNS 服务器。除与传统的 DNS 服务器(如:bind)一致的域名解析和DNS 代理外,CoreDNS 还可以在 Kuberentes 中将 Kubernetes Service 的域名解析成 ClusterIP,还支持 Headless 类型的 Service 将服务名解析成多个后端 PodIP 列表并提供负载均衡的轮询能力,也可以将 Statefulset 类型的工作负载提供实例名称到 PodIP 解析的能力,以及动态检测后端记录变动调整解析结果的能力。基于动态检测的能力,衍生出服务注册发现的场景能力,这给“云原生最佳七步实践”的分布式与微服务阶段提供全新的解决方案。

容器运行程序的目的是让程序产生服务能力,部分容器是提供的是任务执行或计算的能力(如:Job、CronJob),但大部分任然是以工作负载的形式对外提供服务。在 Kuberentes 集群内提供服务一般是通过 Kuberentes 的 Service 类型资源暴露,但是将能力暴露到集群外部时一般需要通过网关代理,Ingress Nginx 是最常用的七层代理网关。Ingress Nginx 能够动态检测集群中 Ingress 类型的资源并生效,同时提供负载均衡和动态后端更新的能力。

给 Kuberentes 集群提供 PVC 存储的能力在容器云平台建设早期不是必须的。我们在前面建设的 Kuberentes 集群和相关能力基本能够满足容器化的实践要求,对于业务系统使用的存储可以通过网络的方式提供,如 MySQL、对象存储等。不建议在一开始就建设 PVC 存储的理由是靠谱的网络存储系统管理可能比建设容器云平台还复杂,而且使用的场景并非必须依赖,即投入与产出不匹配。当然,如果有专业的存储团队提供支持,也是可以同时进行能力建设。

其他扩展能力与容器云基础能力关联不大,不在这里发散性讨论,根据实际业务需求部署的服务就是对容器云能力的扩展。

四、云管层

为了更好的使用和管理 Kuberentes,建设统一的云管平台成为重要的选择。容器云管理平台提供了基于 Web 管理能力,具有多租户的隔离能力,可以实现在企业内统一管理。容器云管理平台还能提供主机管理能力,以及 Kuberentes 集群的安装部署、变更升级、纳管多套 Kuberentes 集群的能力。提供统一的监控告警能力,以及将容器云相关的能力以 OpenAPI 接口暴露给其他系统使用,如“云原生最佳七步实践”的研发效能阶段中持续集成与部署的对接集成。

容器云核心管理的是容器,而容器是基于镜像运行的,因此镜像的管理也是容器云平台的重要能力之一。并非所有的企业网络能够方便的访问互联网上镜像仓库,如 Docker Hub 或 Google 的 Gcr ,因此建设企业私有的镜像仓库成为提效的重要一步。推荐基于 Harbor 或 Dragonfly 来搭建企业私有的镜像仓库,他们能够提供企业私有的集中镜像存储中心,并提供安全的扫描能力。

容器云平台建设应用中心可以帮助企业资产积累沉淀,可以快速交付应用。应用中心提供从应用定义、应用打包、应用发布(应用市场)到应用部署的生命周期管理能力,可以使用 Helm Chart 的方式进行云原生应用的标准化管理,也可以快速复用开源社区的优秀应用。

五、业务层

在企业中业务系统直接面向客户提供服务,是真正能够创建价值或者利润的主体,一切应该以服务好业务为主要目标。在进行云原生实践,建设容器云平台的目的也是为了更好的帮助业务创造价值,技术演进与降本增效反而是次要考虑的问题,切不可本末倒置。

在容器云上运行的服务大致分为两种,其一就是业务系统,其二就是围绕业务系统进行的相关建设,比如本文的容器云平台提供了业务系统运行的基础环境,以及后续阶段会介绍的为监控业务状态建设的可观性平台,为提升业务系统研发效率的研发效能平台,为保证业务系统稳定的分布式与微服务平台,为业务系统提供稳定数据管理的有状态服务管理,以及保证业务系统的安全建设等等,这在后续的文章中会与大家一一分享我的经验与理解。

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

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

相关文章

【学网攻】 第(10)节 -- 路由器单臂路由配置

系列文章目录 目录 系列文章目录 文章目录 前言 一、单臂路由是什么? 二、实验 1.引入 实验拓扑图 PC配置 Sw配置 Router配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交…

【医学图像隐私保护】PLAN方法:解决 GAN 生成医学图像 Latent 空间中的隐私保护

PLAN方法:解决 GAN 生成医学图像 Latent 空间中的隐私保护方法 PLAN 原理StyleGAN 生成视网膜图k-SALSA 生成视网膜图PLAN方法 生成视网膜图 总结 PLAN 原理 论文:https://arxiv.org/abs/2307.02984 代码:https://github.com/perceivelab/P…

电商价格监测准确率如何保证

品牌做电商价格监测的前提是为了找出网络渠道中的破价链接,只有精准到筛选出破价链接,才能进行针对性的治理,比如经销渠道,只有当品牌拿出其破价的证据,才能对授权渠道进行规则管控,非授权渠道也是如此&…

HTML5与App封装技术将网站一键打包成App

HTML5:跨平台的利器HTML5作为一种先进的网页标记语言,其最大的优势在于跨平台性。开发者仅需编写一次代码,即可在各种操作系统和设备上运行,无需为每个平台单独开发App。这种“编写一次,运行处处”的模式,大…

系统架构15 - 软件工程(3)

软件过程模型 瀑布模型特点缺点 原型化模型特点两个阶段不同类型注意 螺旋模型V 模型特点 增量模型特点 喷泉模型基于构件的开发模型(CBSD)形式化方法模型敏捷模型特点“适应性” (adaptive) 而非“预设性” (predictive)“面向人的” (People-oriented) 而非“面向过程的” (P…

如何使用 WebRTC 与 Kurento 建立视频会议 App

本文作者 WebRTC Ventures 工程师。在 RTC 2018 实时互联网大会上,WebRTC Ventures 的资深软件工程师,将围绕 WebRTC 开发带来经验分享。欢迎访问RTC 开发者社区,与更多WebRTC开发者交流经验。 了解 WebRTC 如何工作的一种简单方式是通过学习…

golang入门

学习方法 1、在实践中学 2、适当的囫囵吞枣,有可能学到后面,对前面的疑问焕然大悟 3、注重整体,刚开始不要去扣细节 安装 需要配置3个环境变量,如果.msi文件安装时设置好了就不需要了,自己可以检查下 GOROOT&…

VUE--VUEX

一、什么是Vuex Vuex就是一个vue的状态(数据)管理工具,是vue项目实现大范围数据共享的技术方案。能够方便、高效的实现组件之间的数据共享。 Vuex的好处: (1)数据的存储一步到位,不需要层层传递…

权威媒体报道 | 百分点科技谈“数据要素×”

近日,国家数据局等17部门联合印发《“数据要素”三年行动计划(2024—2026年)》,引起广泛关注,作为数据要素技术厂商代表,百分点科技CTO刘译璟接受经济日报、中国高新技术产业导报采访,结合产业现…

<蓝桥杯软件赛>零基础备赛20周--第17周--并查集

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

《微信小程序开发从入门到实战》学习九十三

7.1 视图容器组件 7.1.3 swiper与swiper-item组件 swiper组件的显示效果如下图所示: indicator-dots、indicator-color和indicator-active-color三个属性用于设置swiper组件下方的指示点。设置指示点的颜色时,可以使用HexColor,也可以使用r…

读懂比特币—bitcoin代码分析(五)

今天的代码分析主要是 bitcoin/src/init.cpp 文件中的三个函数:AppInitSanityChecks、AppInitLockDataDirectory、AppInitInterfaces,下面我们来说明这三个函数是用来干什么的,并逐行解读函数代码,先贴出源代码如下: …

C++ 程序使用 OpenCV 库来创建一个图像金字塔,然后将这些图像合并成一张大图

文章目录 源码文件功能解读编译文件 源码文件 #include <iostream> #include <vector> #include <string> #include <opencv2/opencv.hpp>int main() {// 这里应该有代码来生成或加载一系列图像到 imagePyramidstd::vector<cv::Mat> imagePyram…

AWS 专题学习 P10 (Databases、 Data Analytics)

文章目录 专题总览1. Databases1.1 选择合适的数据库1.2 数据库类型1.3 AWS 数据库服务概述Amazon RDSAmazon AuroraAmazon ElastiCacheAmazon DynamoDBAmazon S3DocumentDBAmazon NeptuneAmazon Keyspaces (for Apache Cassandra)Amazon QLDBAmazon Timestream 2. Data & …

8.12用最少数量的箭引爆气球(LC452-M)

452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 算法&#xff1a; 局部最优&#xff1a;当气球出现重叠&#xff0c;一起射&#xff0c;所用弓箭最少。 全局最优&#xff1a;把所有气球射爆所用弓箭最少。 为了让气球尽可能的重叠&#xff0c;需要对…

5JS语句

表达式在JavaScript中是短语&#xff0c;那么语句&#xff08;statement&#xff09;就是JavaScript整句或命令。 表达式计算出一个值&#xff0c;但语句用来执行以使某件事发生。诸如赋值和函数调用这些有副作用的表达式&#xff0c;是可以作为单独的语句的&#xff0c;这种把…

光控自动照明灯电路原理图

原理图&#xff1a; 电路原理&#xff1a; R1和R2构成分压电路&#xff0c;当环境光线较强时&#xff0c;光敏电阻阻值较小&#xff0c;R2上的电压较小&#xff0c;无法使三极管Q1导通&#xff0c;此时三极管的集电极没有电流通过&#xff0c;发光二极管DS不亮。当光线较暗时&…

Spring Boot3整合MyBatis Plus

目录 1.前置条件 2.导坐标 3.配置数据源 4.mybatis-plus基础配置 5.配置mapper扫描路径 6.MyBatis Plus代码生成器整合 1.导坐标 2.编写代码生成逻辑 7.整合Druid连接池 1.前置条件 已经初始化好一个spring boot项目且版本为3X&#xff0c;项目可正常启动 初始化教程…

昂首资本闪耀石家庄交易技术峰会,尽释行业进取之姿

“2024年石家庄交易技术峰会”在中国河北石家庄举办&#xff0c;Anzo Capital昂首资本作为2024年交易峰会的独家赞助商出席本次活动&#xff0c;Anzo Capital 魄力超前&#xff0c;尽显行业进取之姿。 “开门红”——作为2024年的首场交易技术峰会&#xff0c;“石家庄交易技术…

幻兽帕鲁专用服务器设置,与好友畅玩

创建幻兽帕鲁服务器1分钟部署教程&#xff0c;阿里云和腾讯云均推出幻兽帕鲁服务器专属优惠服务器和部署教程&#xff0c;4核16G和4核32G配置可选&#xff0c;阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程&#xff0c;附阿里云和腾讯云专属幻兽帕鲁优惠价格表&a…