Kubernetes基本概念简介

news2024/11/19 17:19:22

零 引入

在传统的应用程序部署中,需要手动配置和管理服务器、网络和存储等基础设施,并且随着应用程序规模的增长,管理复杂性也会大大增加。Kubernetes通过自动化和抽象化的方式,解决了这些挑战,使得应用程序可以以一种更加灵活和可靠的方式进行部署和管理。Kubernetes是一个开源的容器编排和管理平台,它为应用程序容器提供了一种高度可靠且可伸缩的部署、扩展和管理方式。随着容器技术的快速发展,Kubernetes成为了广泛使用的容器编排工具,为企业提供了构建强大、高效和可移植的应用程序环境的解决方案。

在介绍Kubernetes之前,我们有必要先了解一下容器编排技术。

一 容器编排概述

容器映像允许我们以预定义的格式限制应用程序代码、运行时及其所有依赖项。像runC、containerd或cri-o这样的容器运行时可以使用预打包的映像作为源来创建和运行一个或多个容器。这些运行时能够在单个主机上运行容器,但是,在实践中,我们希望有一个容错和可扩展的解决方案,通过构建单个控制器/管理单元(多个主机连接在一起的集合)来实现。该控制器/管理单元通常被称为容器协调器。

探讨为什么要使用容器编排器,容器编排器的不同实现,以及在哪里部署它们。

  • 定义容器编排的概念。
  • 解释使用容器编排的好处。
  • 讨论不同的容器编排选项。
  • 讨论不同的容器编排部署选项。

什么是容器?

容器是一种以应用程序为中心的方法,可在您选择的任何基础架构上提供高性能、可扩展的应用程序。容器最适合提供微服务,它为应用程序提供可移植的、隔离的虚拟环境,使其在不受其他运行应用程序干扰的情况下运行。

微服务是用各种现代编程语言编写的轻量级应用程序,具有特定的依赖项、库和环境要求。为了确保应用程序拥有成功运行所需的一切,它与依赖项打包在一起。

容器封装微服务及其依赖关系,但不直接运行它们。容器运行容器映像。

容器映像将应用程序及其运行时、库和依赖项捆绑在一起,它表示为应用程序提供隔离的可执行环境而部署的容器的源。容器可以从特定映像部署在许多平台上,如工作站、虚拟机、公共云等。

什么是容器编排?

在开发环境中,在单个主机上运行容器以开发和测试应用程序可能是一个合适的选择。但是,当迁移到质量保证(QA)和生产(Prod)环境时,这不再是一个可行的选择,因为应用程序和服务需要满足特定的要求:

  • 容错
  • 按需扩展
  • 最佳资源使用
  • 自动发现以自动发现并相互通信
  • 来自外部世界的可达性
  • 无缝更新/回滚,无需任何停机时间

容器编排器是将系统组合在一起以形成集群的工具,在集群中,容器的部署和管理可以大规模自动化,同时满足上述要求。

常见容器编排器

  • Amazon Elastic Container Service :由亚马逊网络服务(AWS)提供的托管服务,用于在其基础设施上大规模运行容器。
  • Azure Container Instances :Microsoft Azure提供的基本容器编排服务。
  • Azure Service Fabric :Microsoft Azure提供的一个开源容器编排器。
  • Kubernetes :是一个开源编排工具,最初由谷歌启动,现在是云原生计算基金会(CNCF)项目的一部分。
  • Marathon :在ApacheMesos和DC/OS上大规模运行容器的框架。
  • Nomad :HashiCorp提供的容器和工作负载协调器。
  • Docker Swarm :Docker引擎的一部分。

为什么使用容器编排器?

尽管我们可以手动维护几个容器或编写脚本来管理几十个容器的生命周期,但协调器让用户的工作变得更容易,尤其是在管理在全球基础设施上运行的成百上千个容器时。

容器编排器可以做什么?

  • 在创建群集时将主机分组在一起。
  • 根据资源可用性安排容器在群集中的主机上运行。
  • 使群集中的容器能够相互通信,而不管它们部署到群集中的哪个主机。
  • 绑定容器和存储资源。
  • 将类似容器的集合分组,并将它们绑定到负载平衡结构,以通过创建接口(容器和客户端之间的抽象级别)来简化对容器化应用程序的访问。
  • 管理和优化资源使用情况。
  • 允许实施策略以确保对容器内运行的应用程序的访问安全。

下面我们将探讨Kubernetes,它是目前最受欢迎的容器编排工具之一。

二 Kubernetes 简介

什么是 Kubernetes?

According to the Kubernetes website,

"Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications".

Kubernetes comes from the Greek word κυβερνήτης, which means helmsman or ship pilot. With this analogy in mind, we can think of Kubernetes as the pilot on a ship of containers.

Kubernetes is also referred to as k8s (pronounced Kate's), as there are 8 characters between k and s.

Kubernetes is highly inspired by the Google Borg system, a container and workload orchestrator for its global operations for more than a decade. It is an open source project written in the Go language and licensed under the Apache License, Version 2.0.

Kubernetes was started by Google and, with its v1.0 release in July 2015, Google donated it to the Cloud Native Computing Foundation (CNCF), one of the largest sub-foundations of the Linux Foundation.

New Kubernetes versions are released in 4 month cycles. The current stable version is 1.26 (as of December 2022).

Kubernetes容器编排的完全支持功能?

  • Automatic bin packing :自动装箱
  • Designed for extensibility :弹性扩展
  • Self-healing :自愈
  • Horizontal scaling :水平缩放
  • Service discovery and load balancing :服务发现和负载均衡

Kubernetes容器编排的未来展望?

  • Automated rollouts and rollbacks :自动推出和回滚
  • Secret and configuration management :机密和配置管理
  • Storage orchestration :存储编排
  • Batch execution :批量执行
  • IPv4/IPv6 dual-stack :IPv4/IPv6双堆栈

为什么使用 Kubernetes?

随着业务规模逐渐扩大,容器越来越多。一系列新问题仅靠Docker是无法解决的,例如:

  • 如何协调和调度这些容器?
  • 如何在升级应用程序时不会中断服务?
  • 如何监视应用程序的运行状况?
  • 如何批量重新启动容器里的程序?
  • 如何进行扩容和缩容?

Kubernetes正是为解决这些问题而生的。Kubernetes将众多机器有序的管理起来,形成集群,而Kubernetes就相当于是集群的操作系统。

在Kubernetes下,开发者就可以按照如下的方式部署应用。开发者把一个应用列表提交到主节点,Kubernetes会将它们部署到集群的工作节点。组件被部署在哪个节点对于开发者和系统管理员来说都不用关心。这样的部署方式非常的简单。

  • 可移植性强
    • 它可以部署在许多环境中,如本地或远程虚拟机、裸机,或公共/私有/混合/多云设置中。
  • 可扩展性优
    • 能够支持并得到许多第三方开源工具的支持,这些工具增强了Kubernete的功能,并为其用户提供了丰富的功能体验。Kubernetes的功能可以通过编写自定义资源、运算符、自定义API、调度规则或插件来扩展。

Kubernetes 用户

  • BlaBlaCar
  • BlackRock
  • Booking.com
  • Box
  • CapitalOne
  • Haufe Group
  • Huawei
  • IBM
  • ING
  • Nokia
  • Pearson
  • Wikimedia 等等

三 Kubernetes 基础架构组件介绍

Components of Kubernetes Architecture

Master节点

Master是集群的控制节点,可以说是k8s集群的大脑。每个k8s集群中至少需要一个Master节点来维护整个集群的管理和控制,几乎所有的控制命令都是发给它,它负责执行具体的动作。它很重要,如果它不可用,那么我们所有的控制命令都会失效。

Master节点上运行一组关键进程:

  • API Server :提供HTTP Rest接口的关键服务,是k8s的接口和通讯总线,用户通过命令行工具或kubectl,dashboard,sdks等方式操作k8s,所有的操作(scheduler,controller manager)都是通过调用apiserver来实现的,apiserver组件可以认为是etcd的代理。是唯一能够操纵etcd的组件。其他外围的组件都只能通过apiserver间接的去操作etcd 。 apiserver也是整个集群的事件总线,其他事件可以订阅到apiserver上,提供认证、授权、访问控制、API注册和发现等机制。当有新的事件发生时,apiserver会将事件通知到外围的组件。

  • Controller Manager:k8s里所有资源对象的自动化控制中心,可以理解为资源对象的 “大总管。是保证集群状态最终一致的组件。通过apiserver 监控集群的状态,确保实际状态与预期状态最终一致。比如故障检测、自动扩展、滚动更新等(最终一致调度策略)。

  • Scheduler:负责调度决策的组件,掌握当前集群资源的使用情况,相当于 “调度室”。按照预定的调度策略将Pod调度到相应的机器上。例如:当有新的应用发布请求提交到的k8s集群,scheduler负责决策相应的pod应该分配到那些空闲的节点上去。其调度决策算法是可以根据需要进行扩展的。

  • 分布式数据库etcd:集群的数据存储,他存储着集群中所有的资源对象。数据存储采用的是键值对存储。保存了整个集群的状态。可以独立部署,也可以和master驻在一起,高可用部署的话,至少需要部署3个节点。

Worker/Node节点

Worker节点是k8s集群资源的提供者,运行具体的Pod,当某个Node宕机时,其工作负载会被Master自动转移到其他Node节点上。默认情况下kubelet会向Master注册自己。一旦Node被纳入集群管理,kubelet进程就会定时向Master节点汇报自身的情况,比如操作系统等信息,这样Master就可以获取每个Node节点的资源使用情况合理的进行调度。如果Node节点在指定时间不上报,那么Master就会认为它〝失联”,标记成"Not Ready” 状态。

Worker节点上运行一组关键进程:

  • kubelet:是worker节点资源的管理者(agent),监听apiserver的一些事件,根据master的指示执行相关的动作,比如:启动或关闭pod等,同时也将本节点的一些状态汇报给APIserver等,是worker节点的小脑。

  • kube-proxy:管理k8s中的服务网络的(servernetwork)的组件,是k8s服务网络的机制。它负责节点的网络,在主机上维护网络规则并执行连接转发。它还负责对正在服务的pods进行负载平衡。比如一个服务可能会运行多个副本(Pod ),由他来控制具体由哪个Pod提供服务。为Service提供cluster内部的服务发现和负载均衡。

  • Docker Engine ( docker):docker引擎,负责本机的容器创建和管理工作。

  • Docker Engine/Container Runtime:
    • 结点容器资源的管理者,负责本机的容器创建和管理工作。kubelet不直接管理节点上的容器资源,而是委推给Container Runtime进行管理(启动或关闭容器,收集容器状态等等)。
    • Container Runtime启动容器时,如果本地没有镜像缓存,会到docker hub去拉取对应的镜像缓存到本地。

发布流程样例

下面我们通过一个发布流程样例展示一下k8s集群各个组件是如何配合工作的。

发布流程:

1、Kubectl命令行工具向Api server发送创建一个新的name为newReplicaSet 的pod的请求。Api server 将该资源请求存储到etcd中。

2、Controller Manager监听ReplicaSet修改或创建相关的事件(收到创建通知)。

3、Controller Manager会比较当前的集群状态和预期的集群状态,发现不一致,所以需要创建新的pod。于是根据第一步中kubectl提交的发布模板,在apiserver中创建预期的pod资源。

4、Scheduler会监听到创建pod的请求,于是运行调度算法,将pod分配到空闲的worker节点,然后通过apiserver更新pod的定义,把这些pod指派到具体要发布到那些worker节点上去。

至此,应用还未真正发布,Controller Manager和Scheduler 只是通过apiserver更新了希望的集群状态。

5、pod被分配到预期的某一个worker节点之后,apiserver就会通知相应节点的kubelet。

6、kubelet接收到通知后,指示节点上面的Container Runtime去运行对应的容器。Container Runtime就会开始下载镜像,启动容器。

7、kubelet开始监控容器的运行。

小结

组件

节点

作用

Etcd

Master or 独立集群

集群状态集中存储

API Server

Master

集群接口和通讯总线

Scheduler

Master

调度决策组任(发布到哪些空闲节点)

Controller Manager

Master

协调发布状态最终一致组件

Kubelet

Worker

worker节点资源管理

Container Runtime

Worker

容器资源管理

Kube-Proxy

Worker

实现服务(Service)抽象组件,屏蔽PodIP的变化和负载均衡

Pod

Worker

K8s云平台中提供的虛拟机,K8s基本调度单位

Container

Worker

应用跑在容器中,资源隔离单位

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

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

相关文章

sdk下载慢的解决办法

Android studio版本:为Android Studio 4.1.1, 先完成Android Studio软件安装,打开Android Studio,点击File -> settings->Android SDK,按照开发需要安装sdk platform、SDK Tools工具。 sdk下载慢解决办法 1、…

Nuxt 菜鸟入门学习笔记六:路由

文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址: https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目:Event Extraction as Question Generation and Answering 论文来源:ACL2023 论文链接:Event Extraction as Question Generation and Answering - ACL Anthology 代码链接:GitHub - dataminr-ai/Event-Extraction-as-…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具,反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1:Could not Initialize JavaVM 问题2:Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

枚举enum

使用enum关键字定义提供枚举类的对象,多个对象用逗号分开,结尾用分号结束提供构造方法,给属性赋值使用public statiac final来修饰是属性提供get方法提供toString方法 public enum Season {SPRING("春天", "春暖花开"),…

都用HTTPS了,还能被查出浏览记录?

最近,群里一个刚入职的小伙因为用公司电脑访问奇怪的网站,被约谈了。他很困惑 —— 访问的都是HTTPS的网站,公司咋知道他访问了啥? 实际上,由于网络通信有很多层,即使加密通信,仍有很多途径暴露…

达梦数据库使用杂记

1、DM管理工具打开后一片白 这是因为上一次把对象导航窗口手动关闭了,后面再重新打开时默认就不显示了; 只需要到窗口-视图-对象导航 打开即可 2、 查询语句需要带表空间名,如:select * from "表空间名"."表名&…

混合IT基础设施的安全挑战与缓解策略

自从“身份是新的边界”这句格言问世以来,公司已经开始扩展他们的能力和运营,超越了基于本地、办公室基础设施的范围。采用云原生技术意味着组织正在寻求扩大传统工作流程,而无需投入时间和资源来建立物理数据中心和其他硬件基础设施。 身份…

2023版 STM32实战4 滴答定时器精准延时

SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写(已经验证&a…

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中,苹果公司的高管Ron Huang和Eric Treski透露,他们在开发AirPods Pro自适应音频功能时,曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知,让我们对苹果的创新思维有了更深的…

十三,打印辐照度图

上节HDR环境贴图进行卷积后,得到的就是辐照度图,表示的是周围环境间接漫反射光的积分。 现在也进行下打印,和前面打印HDR环境贴图一样,只是由于辐照度图做了平均,失去了大量高频部分,因此,可以…

unity 限制 相机移动 区域(无需碰撞检测)

限制功能原著地址:unity限制相机可移动区域(box collider)_unity限制相机移动区域_manson-liao的博客-CSDN博客 一、创建限制区域 创建一个Cube,Scale大小1,添加组件:BoxCollder,调整BoxColld…

花式打印0~100中3的倍数

列表解析3的倍数负步长切片倒序,iter、zip函数配合实现分行格式打印。 (本笔记适合熟悉python列表解析式的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程…

【开发篇】九、SpringBoot整合ES(ElasticSearch)

文章目录 1、整合2、简单示例3、一点补充4、增删改查索引与文档 1、整合 整合思路都一样&#xff0c;先起步依赖或普通依赖&#xff0c;再配置&#xff0c;再封装的操作对象。先引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</grou…

电子签章软件怎么安装?选本地私有还是SaaS云?

出于高效便捷、安全防伪&#xff0c;以及跟上数字化转型趋势的考虑&#xff0c;越来越多的企业开始考虑使用电子签章软件。 但是每当企业考虑购买电子签章软件时&#xff0c;往往都会面对本地私有部署和SaaS公有云两种不同的电子签章软件安装部署方式&#xff0c;而不知道到底应…

使用c++实现输出爱心(软件:visual Studio)

#include <iostream> using namespace std;int main() {//爱心曲线方程(x^2y^2-a)^3-x^2*y30double a 0.5;//定义绘图边界double bound 1.3 * sqrt(a);//x,y坐标变化步长double step 0.05;//二维扫描所有点,外层逐层扫描for (double y bound; y > -bound; y - ste…

DeepSpeed4Science:利用先进的AI系统优化技术实现科学发现

本文转载自微软 DeepSpeed 团队官方知乎账号&#xff1a;zhihu.com/people/deepspeed&#xff0c;由微软 DeepSpeed 团队翻译自官方英文博客&#xff1a;Announcing the DeepSpeed4Science Initiative: Enabling large-scale scientific discovery through sophisticated AI sy…

机器学习,深度学习

一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件&#xff08;用于显示目录&#xff09; 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…

26069-2022 硅单晶退火片 思维导图

声明 本文是学习GB-T 26069-2022 硅单晶退火片. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了硅单晶退火片(以下简称退火片)的分类、技术要求、试验方法、检验规则、包装、标志、 运输、贮存、随行文件及订货单内容。 本文件…

如何去开展软件测试工作

1. 软件测试 在一般的项目中&#xff0c;一开始均为手动测试&#xff0c;由于自动化测试前期投入较大&#xff0c;一般要软件项目达到一定的规模&#xff0c;更新频次和质量均有一定要求时才会上自动化测试或软件测试。 1.1. 项目中每个成员的测试职责 软件测试从来不是某一…