基于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 的方式进行云原生应用的标准化管理,也可以快速复用开源社区的优秀应用。

五、业务层

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录 Leetcode111. 二叉树的最小深度

题目&#xff1a; 代码(首刷自解 2024年1月24日&#xff09;&#xff1a; class Solution { public:int minDepth(TreeNode* root) {if(root nullptr) return 0;queue<TreeNode*> que;TreeNode* cur root;que.push(cur);int size 0;int depth 0;while (!que.empty()…

Tomcat session复制及session共享技术

目录 1、环境 2、配置测试页面 3、配置session共享 前言&#xff1a; 为什么要做session复制或共享 实现Session复制或Session共享的目的是为了在多个Tomcat实例之间实现Session的无缝转移和共享&#xff0c;以提供更高的可伸缩性、负载均衡和容错性。以下是一些原因&#x…

C语言基本概念

目录 2.1 编写一个简单的C程序 2.1.1 编译和链接 2.1.2 集成开发环境 2.2 简单程序的一般形式 2.2.1 指令 2.2.2 函数 2.2.3 语句 2.3 注释 2.4 变量和赋值 2.4.1 类型 2.4.2 声明 2.4.3 赋值 2.4.4 显示变量的值 2.4.5 初始化 2.4.6 显示表达式的值 2.5 读入…

7款值得去尝试的前端动画特效(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 橙汁粒子特效 一款基于canvas实现的粒子动画特效 点击杯子 杯子上方会有橙子掉落至杯中并变为橙…

如何做标准化?| 京东云技术团队

在现代信息化的市场环境和社会中&#xff0c;标准化已经成为了各种行业的一个重要的标志。标准化不仅可以提升生产效率&#xff0c;减轻质量问题&#xff0c;还可以增加产品的可靠性和互通性。在这篇文章中&#xff0c;我们将探讨如何做标准化&#xff0c;为您提供详细的指导和…

深入理解Java类和对象的关系

如果要说清楚对象和类的关系&#xff0c;不可避免的要提到C&#xff0c;因为Java从时间线上来说&#xff0c;是C和C之后的一门语言&#xff0c;很多Java Coder 也是因为厌烦了C的一些特性&#xff0c;进而从事于Java开发的&#xff0c;所以以下内容会利用C的一部分知识来对比&a…

Mac+Android Studio配置 Flutter环境

Fluttrer中文下载官网 Flutter下载官网 1、环境变量 .zshrc #Flutter export PUB_HOSTED_URL"https://pub.flutter-io.cn" export FLUTTER_STORAGE_BASE_URL"https://storage.flutter-io.cn" export FLUTTER_HOME/Users/leon/Flutter/flutter_3_10_4/f…

【C/C++】C/C++编程——第一个 C++ 程序:HelloWorld

第一个 C 程序&#xff1a;HelloWorld 大家好&#xff0c;我是 shopeeai&#xff0c;也可以叫我虾皮&#xff0c;中科大菜鸟研究生。昨天我们成功搭建好了 C 的开发环境&#xff0c;今天我们来介绍一下第一个 C 程序,打印一个"hello world"。首先我们先贴一下示例代…

Linux(linux版本 centos 7) 下安装 oracle 19c详细教程(新手小白易上手)

一、安装前准备 1、下载预安装包 wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm预安装包下载成功 2、下载oracle安装包 下载地址如下 https://www.oracle.com/cn/database/technologies…

Python 正则分割字符串并提取匹配的记号和关键词

需求是&#xff1a;原字符串内含有特殊记号&#xff0c;比如"V_{CC} V_{DD}"&#xff0c;其中_{CC} 是latex 的下标语法&#xff0c;实际显示出来是下面这样&#xff1a; V C C V D D V_{CC} V_{DD} VCC​VDD​ 现在要把下标部分提取出来&#xff0c;并把原字符串…

Python之数据可视化基础

目录 一 JSON数据格式转换 二 pyecharts模块 三 Pyecharts入门 四 数据可视化之疫情折线图 一 JSON数据格式转换 什么是JSON? JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。它以易于阅读和编写的方式来表示结构化数据。JSO…

构建未来学堂:在线教育系统开发技术实践

在当今数字化时代&#xff0c;在线教育系统的开发越发显得至关重要。本文将带你深入了解在线教育系统的开发&#xff0c;涉及到关键的技术实践和代码示例。我们将采用现代化技术栈&#xff0c;为未来学堂的搭建提供实用的指南。 技术栈选择 在开始实际的开发之前&#xff0c…

在IDEA中创建SpringBoot项目

概述 SpringBoot是由Pivotal团队提供的全新的框架&#xff0c;其设计的目的是用来简化Spring应用的初始搭建以及开发过程。 传统方式构建Spring应用程序 导入依赖繁琐 依赖冲突 项目配置繁琐 SpringBoot特性 1、起步依赖 本质上就行一个Maven坐标&#xff0c;整合了完成一…

虚幻UE 插件-像素流送实现和优化

本笔记记录了像素流送插件的实现和优化过程。 UE version&#xff1a;5.3 文章目录 一、像素流送二、实现步骤1、开启像素流送插件2、设置参数3、打包程序4、打包后的程序进行像素流参数设置5、下载NodeJS6、下载信令服务器7、对信令服务器进行设置8、启动像素流送 三、优化1、…

机电制造ERP软件有哪些品牌?哪家的机电制造ERP系统比较好

机电制造过程比较复杂&#xff0c;涵盖零配件、采购、图纸设计、工艺派工、生产计划、物料需求计划、委外加工等诸多环节。而供应链涉及供应商的选择、材料采购价格波动分析、材料交货、品质检验等过程&#xff0c;其中某个环节出现问题都可能会影响产品交期和经营效益。 近些…

设计模式_组合模式_Composite

案例引入 学校院系展示 编写程序展示一个学校院系结构: 需求是这样&#xff0c;要在一个页面中展示出学校的院系组成&#xff0c;一个学校有多个学院&#xff0c;一个学院有多个系 【传统方式】 将学院看做是学校的子类&#xff0c;系是学院的子类&#xff0c;小的组织继承大…

第2章 信息技术发展——2.1 信息技术及其发展

文章目录 2.1 信息技术及其发展2.1.1 计算机软硬件2.1.2 计算机网络1.网络标准协议1)OSI2)IEEE802协议族3)TCP/IP 2.软件定义网络3.第五代移动通信技术 2.1.3 存储和数据库1.存储技术2.数据结构模型1)层次模型2)网状模型3)关系模型 3.常用数据库类型1)关系型数据库2)非关系型数…

Docker镜像的创建

基于现有镜像创建 先用现有镜像创建启动容器 docker run 再进入容器进行内容更新 docker exec -it 最后提交成新的镜像 docker commit 然后将修改后的容器提交为新的镜像&#xff0c;需要使用该容器的 ID 号创建新镜像 进入容器可查看相关性能 基于本地模板创…

【软考上岸-备考系统集成项目管理工程师1】

文章目录 今日座右铭&#xff1a;最好的偷懒方式&#xff0c;就是一次做好。 文章目录 文章目录前言一、系统集成项目管理工程师作用二、系统集成项目管理工程师报名要求三、软考报名流程四、教材参考说明总结 前言 计算机信息系统集成项目管理师对应资格考试名称&#xff1a;…

FPGA高端项目:Xilinx Zynq7020系列FPGA多路视频拼接 工程解决方案 提供6套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我已有的FPGA视频拼接叠加融合方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在Xilinx Artix7 系列FPGA上的应用 3、设计思路框架视频源选择ov5640 i2c配置及采集动态彩条多路视频…