当前位置: 首页 > news >正文

【云原生】Kubernetes 概述

Kubernetes 概述

1.Kubernetes 简介

Kubernetes 是一个可移植的、可扩展的、用于管理容器化工作负载和服务的开源平台,它简化(促进)了声明式配置和自动化。它有一个庞大的、快速增长的生态系统。Kubernetes 的服务、支持和工具随处可见。

Kubernetes 一词源于希腊语,意为舵手或飞行员。 2014 2014 2014 年,谷歌开放了 Kubernetes 项目的源代码。Kubernetes 基于谷歌在大规模运行生产工作负载方面的 15 15 15 年经验,以及来自社区的最佳想法和实践。

在这里插入图片描述
使用 Kubernetes, 我们可以快速高效地响应客户需求:

  • 快速、可预测地部署你的应用程序。
  • 拥有即时扩展应用程序的能力。
  • 不影响现有业务的情况下,无缝地发布新功能。
  • 优化硬件资源,降低成本。

Kubernetes 的目标是构建一个软件和工具的生态系统,以减轻你在公共云或私有云运行应用程序的负担。

1.1 回顾

让我们把时间回溯到从前,看看为什么 Kubernetes 是如此有用。

在这里插入图片描述
传统部署时代:在早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这导致了资源分配问题。例如,如果一个物理服务器上运行多个应用程序,那么在某些情况下,一个应用程序将占用大部分资源,从而导致其他应用程序性能下降。对此的解决方案是在不同的物理服务器上运行每个应用程序。但是,由于资源没有得到充分利用,而且维护许多物理服务器的成本很高,所以无法进行扩展。

虚拟化部署时代:作为一种解决方案,引入了虚拟化。它允许你在单个物理服务器的 CPU 上运行多个虚拟机 VM。虚拟化允许在 VM 之间隔离应用程序,并提供一定程度的安全性,因为一个应用程序的信息不能被另一个应用程序自由访问。

虚拟化可以更好地利用物理服务器中的资源,并提供更好的可伸缩性,因为可以方便地添加或更新应用程序,从而降低硬件成本,等等。通过虚拟化,你可以将一组物理资源表示为一次性虚拟机集群。

每个 VM 是一个完整的机器,运行所有组件,包括它自己的操作系统,运行在虚拟硬件之上。

容器部署时代:容器类似于 VM,但是它们具有宽松的隔离属性,以便在应用程序之间共享操作系统 OS。因此,容器被认为是轻量级的。与 VM 类似,容器有自己的文件系统、CPU、内存、进程空间等等。由于它们与底层基础设施解耦,因此可以跨云和 OS 发行版移植。

容器已经变得很流行,因为它们提供了额外的好处,比如:

  • 敏捷应用程序创建和部署:与使用 VM 镜像相比,增加了容器镜像创建的方便性和效率。
  • 持续开发、集成和部署:提供可靠且频繁的容器镜像构建和部署,具有快速且轻松的回滚。
  • 开发和运维关注点分离:在构建 / 发布时而不是部署时创建应用程序容器镜像,从而将应用程序与基础设施分离。
  • 可观察性:不仅能显示操作系统级的信息和指标,还能显示应用程序的健康状况和其他信号。
  • 跨开发、测试和生产的环境一致性:在笔记本电脑上运行与在云上运行完全相同。
  • 云和操作系统发布的可移植性:运行在 Ubuntu、RHEL、CoreOS、on-prem、谷歌 Kubernetes 引擎,和其他任何地方。
  • 以应用程序为中心的管理:将抽象级别从在虚拟硬件上运行操作系统提高到使用逻辑资源在操作系统上运行应用程序。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成更小的独立部分,可以动态地部署和管理 —— 而不是运行在一台大型单用途机器上的单片堆栈。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:效率高,密度大 。

1.2. 为什么需要 Kubernetes?它能做什么?

容器是捆绑和运行应用程序的好方法。在生产环境中,你需要管理运行应用程序的容器,并确保没有停机时间。例如,如果一个容器发生故障,则需要启动另一个容器。如果这个行为由一个系统来处理不是更容易吗?

Kubernetes 为你提供了一个能够弹性地运行分布式系统的框架。它负责处理应用程序的扩展和故障转移,提供部署模式,等等。

Kubernetes为你提供:

  • 服务发现和负载平衡:Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器。如果到容器的通信量很高,Kubernetes 能够实现负载平衡并分配网络通信量,从而使部署保持稳定。
  • 存储编排:Kubernetes 允许你自动挂载自己选择的存储系统,比如本地存储、公有云提供商等等。
  • 自动滚动更新和回滚:可以使用 Kubernetes 描述所部署容器的期望状态,并且可以以受控的速率将实际状态更改为期望状态。
  • 自动包装:你只需为 Kubernetes 提供一组节点,它便可以使用这些节点来运行容器化的任务。告诉 Kubernetes 每个容器需要多少 CPU 和内存(RAM)。Kubernetes 可以在你的节点上放置容器,以充分利用你的资源。
  • 自动重启:Kubernetes 会重新启动失败的容器,替换容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将他们暴露给客户端。
  • 秘密和配置管理:Kubernetes 允许你存储和管理敏感信息,比如密码、OAuth 令牌和 ssh 密钥。你可以部署和更新秘密和应用程序配置,而无需重新构建容器映像,也无需在堆栈配置中公开秘密。

1.3. Kubernetes 不是什么

Kubernetes 不是一个传统的、包罗万象的 PaaS 系统。由于 Kubernetes 是在容器级别而不是在硬件级别操作的,所以它提供了一些 PaaS 产品常见的通用特性,例如部署、扩展、负载平衡、日志记录和监视。但是,Kubernetes 不是单片的,这些默认的解决方案是可选的和可插拔的。Kubernetes 为构建开发人员平台提供了构建块,但是在重要的地方保留了用户的选择和灵活性。

  • 不限制所支持的应用程序类型。Kubernetes 的目标是支持非常多样化的工作负载,包括无状态、有状态和数据处理工作负载。如果一个应用程序可以在容器中运行,那么它应该可以 在Kubernetes 上运行。
  • 不部署源代码,也不构建应用程序。持续集成、交付和部署(CI/CD)工作流由组织文化和偏好以及技术需求决定。
  • 不提供应用级服务,如中间件(例如,消息总线)、数据处理框架(例如,Spark)、数据库(例如,MySQL)、缓存,也不提供集群存储系统(例如,Ceph)作为内置服务。这些组件可以运行在 Kubernetes 上,并且可以由运行在 Kubernetes 上的应用程序通过可移植的机制(例如,Open Service Broker)访问。
  • Kubernetes 允许用户选择其他的日志记录,监控和告警系统
  • 不提供也不强制要求配置语言/系统(例如,jsonnet)。它提供了一个声明性 API,可以被任意形式的声明性规范作为目标。
  • 不提供也不采用任何全面的机器配置、维护、管理或自修复系统
  • 此外,Kubernetes 不仅仅是一个编排系统。事实上,它消除了对编排的需要。编排的技术定义是执行一个已定义的工作流:首先执行 A,然后执行 B,然后执行 C。相反,Kubernetes 包括一套独立、可组合的控制过程,通过声明式语法使其连续地朝着期望状态驱动当前状态。你怎么从 A 点到 C 点都不重要,只要告诉到 C 的状态即可。

2.Kubernetes 组件

当你部署 Kubernetes 的时候,你会得到一个集群。

一个集群是一组机器,称为节点(nodes),它们运行由 Kubernetes 管理的容器化应用程序。一个集群至少有一个工作节点(worker node)和一个主节点(master node)。

工作节点承载应用程序的组件。主节点管理集群中的工作节点和 pods。多个主节点用于提供具有故障转移和高可用性的集群。

下面是 Kubernetes 集群的关系图:

在这里插入图片描述

2.1 Master 组件

Master 组件提供集群的 控制面板。Master 组件对集群做出全局决策(例如,调度),Master 组件检测并响应集群事件(例如,当部署的 replicas 字段不满足时启动一个新的 pod

Master 组件可以在集群中的任何机器上运行。但是,为了简单起见,设置脚本通常在同一台机器上启动所有 Master 组件,并且不在这台机器上运行用户容器。

(1)kube-apiserver

API 服务器是一个 Kubernetes 面板控制组件,用于公开 Kubernetes API。它是 Kubernetes 控制面板的前端。

Kubernetes API 服务器的主要实现是 kube-apiserverkube-apiserver 被设计成水平伸缩 —— 也就是说,它通过部署更多实例来伸缩。你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。

(2)etcd

一致性和高可用的键值存储用作 Kubernetes 的所有集群数据备份存储。

如果你的 Kubernetes 集群使用 etcd 作为其备份存储,请确保对这些数据有备份计划。

(3)kube-scheduler

监视没有分配节点的新创建的 pod,并为它们选择要运行的节点。

(4)kube-controller-manager

运行控制器的组件,从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译成一个单一的二进制文件,并在一个进程中运行。

这些控制器包括:

  • Node Controller:节点控制器,负责发现和响应节点故障。
  • Replication Controller:副本控制器,负责为系统中的每个副本控制器对象维护正确的 pod 数量。
  • Endpoints Controller:端点控制器,填充端点对象(即,连接服务和 pod)。
  • Service Account & Token Controllers:为新的名称空间创建默认帐户和 API 访问令牌。

(5)cloud-controller-manager

云控制器-管理器,运行与底层云提供商交互的控制器

2.2 Node 组件

Node 组件在每个节点上运行,维护运行的 pods 并提供 Kubernetes 运行时环境。

(1)kubelet

kubelet 是一个代理,它运行在集群中的每个节点上,它确保容器在一个 pod 中运行。kubelet 只管理由 Kubernetes 创建的容器。

(2)kube-proxy

kube-proxy 是运行在集群中每个节点上的网络代理,是实现 Kubernetes 服务概念的一部分。

kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内外的网络会话与 pod 进行网络通信。

如果有可用的操作系统包过滤层,kube-proxy 将使用它。否则,kube-proxy 将转发流量本身。

(3)Container Runtime

容器运行时是负责运行容器的软件。

Kubernetes 支持多个容器运行时:DockercontainerdcriorktletKubernetes CRI(容器运行时接口)的任何实现。

2.3 Addons(插件)

(1)DNS

虽然其他插件不是严格要求的,但所有 Kubernetes 集群都应该有集群 DNS,因为许多示例都依赖于它。

(2)Web UI(Dashboard)

Dashboard 是一个通用的、基于 Web 的 Kubernetes 集群用户界面。它允许用户管理和排除集群中运行的应用程序和集群本身的故障。

(3)Container Resource Monitoring

容器资源监控记录中央数据库中容器的一般时间序列指标,并提供用于浏览该数据的 UI。

(4)Cluster-level Logging

集群级别的日志记录机制负责将容器日志保存到具有搜索/浏览界面的中央日志存储中。

3.总结

Kubernetes 特点总结:

  • 可移植:无论公有云、私有云、混合云还是多云架构都全面支持。
  • 可扩展:它是模块化、可插拔、可挂载、可组合的,支持各种形式的扩展。
  • 自修复:它可以自保持应用状态、可自重启、自复制、自缩放的,通过声明式语法提供了强大的自修复能力。

Kubernetes 建立在 Google 公司 15 15 15 年的运维经验基础之上,Google 所有的应用都运行在容器上。


https://kubernetes.io/docs/concepts/overview/
https://kubernetes.io/docs/concepts/overview/components/

相关文章:

【云原生】Kubernetes 概述

Kubernetes 概述 1.Kubernetes 简介 Kubernetes 是一个可移植的、可扩展的、用于管理容器化工作负载和服务的开源平台,它简化(促进)了声明式配置和自动化。它有一个庞大的、快速增长的生态系统。Kubernetes 的服务、支持和工具随处可见。 K…...

9.2.2Socket(TCP)

一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…...

“解锁IDEA的潜力:高级Java Maven项目配置指南”

目录 前言:流程目录:1.确保Java和Maven已安装检查Java是否已正确安装并配置环境变量 2.创建一个新的Maven项目导航到要创建项目的目录配置Maven运行以下命令创建一个新的Maven项目 3.配置项目的pom.xml文件打开项目根目录下的pom.xml文件配置Web.xml 4.配…...

[足式机器人]Part5 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】

本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…...

机器学习:隐马尔可夫模型(HMM)

后续会回来补充代码 1 隐马尔可夫模型 隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程。 1.1 数学定义 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成…...

使用插件实现pdf,word预览功能

效果 代码&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…...

yolov5模型构建源码详细解读(yaml、parse_model等内容)

文章目录 前言一、yolov5文件说明二、yolov5调用模型构建位置三、模型yaml文件解析1、 yaml的backbone解读Conv模块参数解读C3模块参数解读 2、yaml的head解读Concat模块参数解读Detect模块参数解读 四、模型构建整体解读五、构建模型parse_model源码解读 前言 本文章记录yolo…...

Monodepth2和Lite-Mono准备数据集

以KITTI为例下载解压后放在/home/lwd/tmp/2011_09_26 cd /home/lwd/tmp/2011_09_26 ls输出 2011_09_26_drive_0001_sync 2011_09_26_drive_0002_sync 2011_09_26_drive_0005_sync python txt.py txt.py import os, sysalos.listdir(.) al.sort() fopen(train.txt, w) for a in…...

ML-fairness-gym入门教学

1、ML-fairness-gym简介 ML-fairness-gym是一个探索机器学习系统长期影响的工具。可以用于评估机器学习系统的公平性和评估静态数据集上针对各种输入的误差度量的差异。开源网站&#xff1a;GitHub - google/ml-fairness-gym 2、安装ML-fairness-gym&#xff08;Windows&…...

结构体指针变量的使用

1、结构体指针的引用 #include<iostream> using namespace std;struct Student {int num;char name[32]; }; int main() {struct Student stu {1,"张三"};struct Student* p &stu;system("pause"); return 0; } 2、通过结构体指针访问结构体…...

解决oracle的em访问提示“使用不受支持的协议。”的bug

1. 设置oracle唯一名称 执行emctl时需要设置一个唯一的名称 否则提示 “Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name. ”中文意思为“未定义环境变量ORACLE_UNQNAME。 请将ORACLE_UNQNAME设置为数据库唯一名称/服务…...

编译工具:CMake(三)| 最简单的实例升级

编译工具&#xff1a;CMake&#xff08;三&#xff09;| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装&#xff1a;非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…...

20天学会rust(四)常见系统库的使用

前面已经学习了rust的基础知识&#xff0c;今天我们来学习rust强大的系统库&#xff0c;从此coding事半功倍。 集合 数组&可变长数组 在 Rust 中&#xff0c;有两种主要的数组类型&#xff1a;固定长度数组&#xff08;Fixed-size Arrays&#xff09;和可变长度数组&…...

drawio----输出pdf为图片大小无空白(图片插入论文)

自己在写论文插入图片时为了让论文图片放大不模糊&#xff0c;啥方法都试了&#xff0c;最后摸索出来这个。 自己手动画图的时候导出pdf总会出现自己的图片很小&#xff0c;pdf的白边很大如下如所示&#xff0c;插入论文的时候后虽然放大不会模糊&#xff0c;但是白边很大会显…...

2021年09月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;字符统计 给定一个由a-z这26个字符组成的字符串&#xff0c;统计其中哪个字符出现的次数最多。 输入 输入包含一行&#xff0c;一个字符串&#xff0c;长度不超过1000。 输出 输出一行&#xff0c;包括出现次数最多的字符和该字符出现的次数&#xff0c;中间以…...

HCIP VRRP技术

一、VRRP概述 VRRP&#xff08;Virtual Router Pedundancy Protocol&#xff09;虚拟路由器冗余协议&#xff0c;既能够实现网关的备份&#xff0c;又能够解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 局域网中的用户的终端通常采用配置一个默认网关的形…...

JAVA AES ECB/CBC 加解密

JAVA AES ECB/CBC 加解密 1. AES ECB2. AES CBC 1. AES ECB package org.apache.jmeter.functions;/*** author yuyang*/import org.apache.commons.lang3.StringUtils; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;/*** a…...

Android FrameWork 层 Handler源码解析

Handler生产者-消费者模型 在android开发中&#xff0c;经常会在子线程中进行一些耗时操作&#xff0c;当操作完毕后会通过handler发送一些数据给主线程&#xff0c;通知主线程做相应的操作。 其中&#xff1a;子线程、handler、主线程&#xff0c;其实构成了线程模型中经典的…...

list

目录 迭代器 介绍 种类 本质 介绍 模拟实现 注意点 代码 迭代器 介绍 在C中&#xff0c;迭代器&#xff08;Iterators&#xff09;是一种用于遍历容器&#xff08;如数组、vector、list等&#xff09;中元素的工具 无论容器的具体实现细节如何,访问容器中的元素的方…...

ABeam×Startup丨德硕管理咨询(深圳)创新研究团队前往灵境至维·既明科技进行拜访交流

近日&#xff0c;德硕管理咨询&#xff08;深圳&#xff09;&#xff08;以下简称“ABeam-SZ”&#xff09;创新研究团队一行前往灵境至维既明科技有限公司&#xff08;以下简称“灵境至维”&#xff09;进行拜访交流&#xff0c;探讨线上虚拟空间的商业模式。 现场合影 &…...

PasteMD助力程序员提效:代码片段/日志/报错信息一键转高亮Markdown

PasteMD助力程序员提效&#xff1a;代码片段/日志/报错信息一键转高亮Markdown 1. 引言&#xff1a;从杂乱文本到优雅文档的烦恼 你有没有过这样的经历&#xff1f;在技术讨论群里&#xff0c;同事发来一段报错日志&#xff0c;密密麻麻的堆栈信息挤在一起&#xff0c;看得人…...

Jailer命令行大师课:自动化数据库子集化的10个技巧

Jailer命令行大师课&#xff1a;自动化数据库子集化的10个技巧 【免费下载链接】Jailer Database Subsetting and Relational Data Browsing Tool. 项目地址: https://gitcode.com/gh_mirrors/ja/Jailer Jailer是一款强大的开源数据库子集化工具&#xff0c;专注于从生产…...

G-Helper实战:华硕笔记本硬件控制与性能调优解决方案

G-Helper实战&#xff1a;华硕笔记本硬件控制与性能调优解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…...

如何让2015年前的MacBook Pro焕发新生?OpenCore Legacy Patcher完全指南

如何让2015年前的MacBook Pro焕发新生&#xff1f;OpenCore Legacy Patcher完全指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为手中的老款Mac无法升级到…...

AI系统-20AI芯片ISP视觉系统介绍

人有五感&#xff1a;眼睛、耳朵、鼻子、舌头和皮肤。 这些器官中的专门细胞和组织会接收原始刺激&#xff0c;并将其转化为神经系统可以使用的信号。 神经将信号传递到大脑&#xff0c;大脑将其解释为影像&#xff08;视觉&#xff09;、声音&#xff08;听觉&#xff09;、气…...

深入RealReachability FSM引擎:有限状态机在iOS网络检测中的终极应用指南

深入RealReachability FSM引擎&#xff1a;有限状态机在iOS网络检测中的终极应用指南 【免费下载链接】RealReachability We need to observe the REAL reachability of network. Thats what RealReachability do. 项目地址: https://gitcode.com/gh_mirrors/re/RealReachabi…...

Vue与原生HTML页面无缝通信的iframe实现方案

1. 为什么需要Vue与原生HTML页面通信&#xff1f; 在实际开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个Vue项目需要集成第三方提供的HTML页面&#xff0c;比如支付网关、地图服务、视频播放器等。这些页面通常都是独立开发的&#xff0c;使用原生HTML/JavaScrip…...

DanKoe 视频笔记:一人企业构建指南:从零到百万美元的教育业务(每日工作2-4小时)

在本课程中&#xff0c;我们将学习如何构建一个单人教育业务&#xff0c;实现从零到年收入百万美元的目标&#xff0c;同时将每日工作时间控制在2-4小时。我们将探讨其核心理念、实施步骤以及背后的进化逻辑。 概述 传统的创业路径往往伴随着高风险、高投入和漫长的工作时间。…...

Windows下Java网络嗅探实战:jNetPcap配置与HTTP报文捕获详解

Windows下Java网络嗅探实战&#xff1a;jNetPcap配置与HTTP报文捕获详解 网络协议分析一直是开发者探索网络通信底层机制的重要途径。对于Java开发者而言&#xff0c;虽然标准库提供了丰富的网络编程接口&#xff0c;但涉及网络层及以下协议的操作却需要借助第三方库。本文将深…...

Linux期末突击:从体系结构到VFS,一张图搞定所有简答题

Linux期末突击&#xff1a;从体系结构到VFS&#xff0c;一张图搞定所有简答题 距离期末考试只剩三天&#xff0c;书桌上堆满的Linux教材和笔记让人头皮发麻。别慌&#xff0c;这份突击指南将用最直观的图解方式&#xff0c;帮你把零散的知识点串联成完整的知识网络。我们不仅会…...