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

news2024/11/16 19:28:20

图片


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.coloradmin.cn/o/1411247.html

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

相关文章

《从零开始制作消除游戏:基于Web技术的简单教程》

在撰写《从零开始制作消除游戏:基于Web技术的简单教程》这篇博客时,主要的目标是提供一个清晰、逐步的指南,帮助读者从零开始创建自己的消除游戏。 游戏逻辑实现 游戏板设计与初始化:描述如何创建游戏板的数据结构,以…

Linux/Luanne

Enumeration nmap 首先扫描目标端口对外开放情况,第一轮扫描发现对外开放了22,80,9001三个端口,端口详细信息如下 TCP/9001 9001端口挺神奇,nmap给出的结果是在9001端口运行着Medusa Supervisor,访问站点发现了一个登录框 在谷…

Google LUMIERE 一种用于生成逼真视频的时空扩散模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录 爆炸燃烧烟雾效果资产手榴弹丢手雷烟雾弹、燃烧弹实现手雷每次撞墙弹发出音效(补充)完结 爆炸燃烧烟雾效果资产 https://assetstore.unity.com/packages/vfx/particles/war-fx-5669 手榴弹 手榴弹配置好刚体,碰撞体 新增脚本Th…

金融OCR领域实习日志(二)——四种OCR模型效果测试(附图)

文章目录 四种模型ocr效果简单测试模型场景1.paddle框架下PP-OCRv31.1.效果如下:1.2.总结 2.paddle框架下ppocr_server_v22.1.效果如下2.2.总结 3.CnOCR3.1.效果如下3.2.总结 4.TesseractOCR4.1.效果如下4.2.总结 5.后续想法 四种模型ocr效果简单测试 模型 PP-OCR…

Optional lab: Linear Regression using Scikit-LearnⅠ

scikit-learn是一个开源的、可用于商业的机器学习工具包,此工具包包含本课程中需要使用的许多算法的实现 Goals In this lab you will utilize scikit-learn to implement linear regression using Gradient Descent Tools You will utilize functions from sci…

用大模型训练实体机器人,谷歌推出机器人代理模型

谷歌DeepMind的研究人员推出了一款,通过视觉语言模型进行场景理解,并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性,并扩大实体机器人学习的数据收集规模。在实验中,AutoRT指导超过…

架构篇25:高可用存储架构-双机架构

文章目录 主备复制主从复制双机切换主主复制小结存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考…

python:socket基础操作(4)-《tcp客户端基础》

tcp就和udp不一样了,tcp是客户端和服务器端,如果想通过tcp发送数据,要先让tcp进行连接服务器端 tcp客户端 先让服务器端进行启动 import socketdef main():# 创建套接字tcp_client_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM…

flink1.13环境搭建

1、本地启动非集群模式 最简单的启动方式,其实是不搭建集群,直接本地启动。本地部署非常简单,直接解压安装包就可以使用,不用进行任何配置;一般用来做一些简单的测试。 具体安装步骤如下: 1.1 下载安装包…

【AIGC】Diffusers:训练扩散模型

前言 无条件图像生成是扩散模型的一种流行应用,它生成的图像看起来像用于训练的数据集中的图像。通常,通过在特定数据集上微调预训练模型来获得最佳结果。你可以在HUB找到很多这样的模型,但如果你找不到你喜欢的模型,你可以随时训…

【渗透测试】借助PDF进行XSS漏洞攻击

简介 在平时工作渗透测试一个系统时,常常会遇到文件上传功能点,其中大部分会有白名单或者黑名单机制,很难一句话木马上传成功,而PDF则是被忽略的一个点,可以让测试报告更丰富一些。 含有XSS的PDF制作步骤 1. 编辑器…

VUE引入DataV报错记录

DataV官网(不支持Vue3):Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

【第一天】蓝桥杯备战

题 1、 门牌号2、卡片3、分数 1、 门牌号 https://www.lanqiao.cn/problems/592/learning/ 解法一:暴力遍历 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sca…

MyBatis中一级缓存是什么?SqlSession一级缓存失效的原因?如何理解一级缓存?

一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就 会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1) 不同的SqlSession对应不同的一级缓存 2) 同一…

爬虫(一)

1. HTTP协议与WEB开发 1. 什么是请求头请求体,响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(…

带【科技感】的Echarts 图表

Echarts脚本在线地址 https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js 引入Echarts 脚本后粘贴代码 vue2 代码&#xff1a; <template><div><div ref"col-2-row-2" class"col-2-row-2"></div></div> <…

【RabbitMQ】死信(延迟队列)的使用

目录 一、介绍 1、什么是死信队列(延迟队列) 2、应用场景 3、死信队列(延迟队列)的使用 4、死信消息来源 二、案例实践 1、案例一 2、案例二&#xff08;消息接收确认 &#xff09; 3、总结 一、介绍 1、什么是死信队列(延迟队列) 死信&#xff0c;在官网中对应的单词…

脉脉爆料,鹅厂IEG,T11大佬,年终奖94w。。。

今年行情确实是非常艰难&#xff0c;很多朋友表示年终奖减半或者没了 &#xff0c;不过来看看互联网大厂&#xff0c;互联网大厂年终奖确实比较给力&#xff0c;这是我个人亲身感受&#xff0c;运气好的时候年终奖让人吃惊。 比如&#xff0c;一个来自鹅厂IEG T11大佬再脉脉爆n…

【深度优先搜索】【C++算法】834 树中距离之和

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 深度优先搜索 树 图论 LeetCode834 树中距离之和 给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges &#xff0c; edges[i] [ai, bi]表…