kubernetes(K8S)笔记

news2024/11/25 10:38:18

文章目录

    • 大佬博客
    • 简介
    • K8S+Docker VS Docker
      • Docker+K8S简介
      • K8S配合docker相比较单纯使用docker

大佬博客

在这里插入图片描述
Kubernetes(通常缩写为K8s)是一个用于自动化容器化应用程序部署、管理和扩展的开源容器编排平台。它的构造非常复杂,由多个核心组件和附加组件组成,共同协作以实现容器集群的高可用性和可伸缩性。以下是Kubernetes的主要组件和其构造:

  1. Master节点(控制平面)

    • kube-apiserver:API服务器是Kubernetes的控制平面组件之一,充当所有控制平面组件和用户命令的入口点。它公开了Kubernetes API,允许外部和内部组件与集群交互。
    • etcd:etcd是一个高度可用的键值存储,用于保存集群的所有配置数据,包括应用程序配置、节点信息、服务发现等。
    • kube-scheduler:调度器负责决定在哪个节点上运行新创建的Pod。它考虑了节点资源、亲和性、反亲和性、争用和其他策略来选择合适的节点。
    • kube-controller-manager:控制器管理器运行一组控制器,这些控制器负责监控集群的状态,并确保期望的状态与实际状态保持一致。常见的控制器包括ReplicaSet Controller、Node Controller、Service Controller等。
    • cloud-controller-manager(可选):云控制器管理器是与云提供商相关的控制器,用于处理云资源,如负载均衡器、持久卷、虚拟机等。
  2. Node节点(工作节点)

    • kubelet:kubelet是运行在每个Node节点上的代理服务,负责与Master节点通信,管理节点上的Pod生命周期,确保Pod按照预期的方式运行。
    • kube-proxy:kube-proxy是用于服务发现和负载均衡的网络代理,它维护网络规则,将请求路由到正确的Pod。
    • Container Runtime:Kubernetes支持多种容器运行时,包括Docker、Containerd、CRI-O等。容器运行时负责在节点上创建和运行容器。

在Kubernetes中,一个宿主机通常只会被视为一个Node节点。Node节点代表物理或虚拟机器,它是Kubernetes集群中的一个工作节点,用于运行容器化的应用程序。
一台宿主机对应一个Node节点,不同宿主机上的Node节点是独立的,并且它们之间不会共享资源、容器、网络等。

Node节点的数量由Kubernetes集群的规模和配置决定。
您可以根据需要增加或减少Node节点来扩展或缩小集群的计算资源。每个Node节点上可以运行一个或多个容器,具体取决于Node的资源配置和负载需求。

在一些特殊情况下,您可以配置多个Node节点在同一台物理宿主机上,这被称为多Node容器化,但这通常是不常见的,而且需要高度的配置和管理,因为它涉及到共享宿主机上的资源和网络。

总之,一个宿主机通常对应一个Node节点,Kubernetes集群中的Node节点数量取决于您的集群规模和需求。要增加或减少Node节点,您可以根据需要添加或移除宿主机,并在Kubernetes中进行相应的配置。

  1. Pod:Pod是Kubernetes的最小部署单元,通常包含一个或多个容器,它们在同一网络命名空间、存储卷和节点上运行。Pod代表应用程序的一个实例。

  2. Service:Service定义了一组Pod的网络访问方式,提供了负载均衡、服务发现和DNS解析等功能,使应用程序能够稳定地运行。

  3. Volume:Volume是用于在Pod中持久化存储数据的抽象。它可以与Pod一起创建和销毁,并且可以挂载到Pod的一个或多个容器中。

  4. Namespace:Namespace用于将集群划分为多个虚拟集群,每个Namespace中可以有自己的Pod、Service和其他资源,以实现多租户和隔离。

  5. ConfigMap和Secret:ConfigMap用于存储配置数据,而Secret用于存储敏感数据,它们可以在Pod中以卷的形式挂载。

  6. Ingress:Ingress定义了HTTP和HTTPS流量的规则,允许外部流量访问集群内的服务。

  7. 其他附加组件:Kubernetes生态系统中还有许多其他附加组件,如监控工具、日志记录工具、自动伸缩控制器、认证和授权插件等,用于增强和扩展Kubernetes的功能。

Kubernetes的这些组件共同协作,以实现容器化应用程序的高度可扩展性、可用性和自动化管理。不同版本的Kubernetes可能会有一些变化和新增组件,但这些基本组件构成了Kubernetes的核心架构。

简介

yml文件---->前台处理---->API Server---->Controller Manager------>Kubelet(Pod创建,修改,监控等全周期管理)
API Server是资源对象的唯一操作入口,所有执行,操作解析后都是调用API然后触发Controller Manager实现功能。

Pods:

  • 一个可以被创建、销毁、调度、管理的最小的部署单元,例如一个或一组容器
  • 每个Pod有一个独立的IP
  • 同一个Pod的容器共享网络,共享存储资源:localhost相互通信

Pods的使用

  • 具有密切连接关系(相互访问、共享数据) 的容器放在同一个Pod中

在这里插入图片描述

K8S+Docker VS Docker

Docker+K8S简介

Kubernetes(通常缩写为K8s)和Docker是两个不同但密切相关的容器技术。它们在容器化应用程序方面发挥不同的角色,通常一起使用以实现更好的容器化应用程序管理和部署。

  1. Docker(容器引擎):

    • Docker是一种容器化技术,它允许开发人员将应用程序和其依赖项打包到一个可移植的容器中。这个容器包含了应用程序的所有必要组件,包括代码、运行时环境、库和配置。
    • Docker容器具有以下优点:可移植性、隔离性、轻量级、快速启动和关闭、易于扩展等。
  2. Kubernetes(容器编排平台):

    • Kubernetes是一个开源的容器编排平台,用于自动化和管理容器化应用程序的部署、扩展、更新和运维。Kubernetes提供了一种容器编排的框架,以确保容器在集群中按照期望的方式运行。
    • Kubernetes的功能包括自动负载均衡、自动扩展、容器自愈、滚动升级、服务发现等。它还提供了用于定义应用程序架构的声明式配置(例如Pods、Services、Deployments等)。

联系:

  • Docker通常用于创建和管理单个容器,而Kubernetes用于协调和管理多个容器的集群。Kubernetes可以管理数百甚至数千个容器实例,确保它们在各种节点上正确运行,具备高可用性和容错性。
  • Kubernetes可以使用Docker作为容器运行时(Container Runtime),这意味着它可以直接与Docker引擎一起使用。但是,Kubernetes也支持其他容器运行时,如Containerd和CRI-O。
  • Kubernetes提供了对Docker容器的高级编排、自动化和管理功能,例如水平扩展、自动恢复、滚动升级等,使得容器化应用程序在生产环境中更容易管理和扩展。

总之,Docker是容器技术的核心,而Kubernetes是一个容器编排平台,用于自动化和管理大规模的Docker容器集群。它们一起使用,可以实现高度可伸缩、高可用性的容器化应用程序部署和管理。

K8S配合docker相比较单纯使用docker

K8S配合docker优势(单独使用docker劣势)

  • 调度:灵活资源分配(Pod的label+Scheduler)
  • 修复:容器跑出问题了,换个主机再跑跑(controller manager)
  • 自动扩缩容:超过人为设定的监控指标自动扩缩容(controller manager)

Kubernetes(K8s)与单纯使用Docker相比,具有一些重要的优势和适用场景。下面是一些比较:

  1. 自动化容器编排

    • Kubernetes允许您自动化地编排、管理和扩展容器化应用程序,而无需手动管理容器的生命周期。这包括自动部署、水平扩展、滚动升级、自动故障恢复等功能,减少了操作负担。
  2. 高可用性

    • Kubernetes提供了内置的高可用性机制,允许您在多个节点上运行应用程序的副本,以确保应用程序的可用性。如果某个节点或容器失败,Kubernetes可以自动迁移工作负载以保持应用程序的正常运行。
  3. 多租户支持

    • Kubernetes支持命名空间(Namespaces),可以将集群划分为多个虚拟集群,每个命名空间都有自己的资源隔离,适用于多租户环境。
  4. 服务发现和负载均衡

    • Kubernetes提供了内置的服务发现和负载均衡功能,允许应用程序组件相互发现并与其他服务通信,而无需硬编码IP地址和端口。
  5. 声明式配置

    • Kubernetes使用声明式配置来定义应用程序的状态和规模,而不是命令式的操作。这样,您只需描述所需的状态,而不必关心如何达到该状态,Kubernetes会负责实现。
  6. 自动伸缩

    • Kubernetes可以根据工作负载的需求自动扩展应用程序,以满足流量的变化。这可以节省资源并确保应用程序的性能。
  7. 滚动升级和回滚

    • Kubernetes支持滚动升级,允许您在不中断服务的情况下逐步更新应用程序。如果升级失败,您可以轻松地回滚到之前的版本。
  8. 资源管理

    • Kubernetes提供了资源管理功能,允许您限制容器的CPU和内存使用,以确保资源公平共享。
  9. 生态系统支持

    • Kubernetes具有丰富的生态系统,包括各种插件、工具和集成,用于监控、日志记录、安全性、认证等方面。

然而,对于一些简单的应用场景,使用Docker本身可能足够了,特别是在开发和测试阶段。Kubernetes在复杂的容器化应用程序中表现出色,但也需要更多的配置和管理工作。因此,选择Kubernetes还是纯粹使用Docker取决于您的应用程序需求和规模。如果应用程序较小且需要简单的容器管理,Docker可能足够;但如果需要高可用性、自动化和扩展性,那么Kubernetes可能更适合。

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

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

相关文章

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌 前言 当一个事物的内部&…

分享日常电脑遇到msvcr110.dll丢失的解决方法

最近,我在尝试运行一款新的软件时,突然遇到了一个错误提示,提示说缺少msvcr110.dll文件,导致软件无法启动。在使用电脑过程中,我们常常会遇到一些系统文件丢失的问题。其中,msvcr110.dll是Windows操作系统中…

10分钟从实现和使用场景聊聊并发包下的阻塞队列

上篇文章12分钟从Executor自顶向下彻底搞懂线程池中我们聊到线程池,而线程池中包含阻塞队列 这篇文章我们主要聊聊并发包下的阻塞队列 阻塞队列 什么是队列? 队列的实现可以是数组、也可以是链表,可以实现先进先出的顺序队列,…

【矩阵分解】PCA - 主成分分析中的数学原理

前言 本文主要对PCA主成分分析中的数学原理进行介绍,将不涉及或很少涉及代码实现或应用,阅读前请确保已了解基本的机器学习相关知识。 文章概述 PCA主成分分析属于矩阵分解算法中的入门算法,通过分解特征矩阵来实现降维。 本文主要内容&a…

【PowerQuery】Excel 一分钟以内刷新PowerQuery数据

当需要进行刷新的周期如果小于一分钟,采用数据自动刷新就无法实现自动刷新的目标。那就没有办法了吗?当然不是,这里就是使用VBA来实现自动刷新。这里实现VBA刷新的第一步就是将当前的Excel 保存为带有宏的Excel 文件,如果不带宏则无法运行带有宏代码的Excel文件,保存过程如…

JAVA中的String类中的一些常用方法

目录 字符串比较方法: boolean equals(Object anObject): int compareTo(String s): int compareToIgnoreCase(String str) 字符串查找方法: char charAt(int index): int indexOf(int ch): int inde…

sqlserver2012性能优化配置:设置性能相关的服务器参数

前言 sqlserver2012 长时间运行的话会将服务器的内存占满 解决办法 通过界面设置 下图中设置最大服务器内存 通过执行脚本设置 需要先开发开启高级选项配置才能设置成功 设置完成之后将高级选择配置关闭,还原成跟之前一样 --可以配置高级选项 EXEC sp_conf…

MySQL--数据库基础

数据库分类 数据库大体可以分为 关系型数据库 和 非关系型数据库 常用数据类型 数值类型: 分为整型和浮点型: 字符串类型 日期类型

【SpringMVC】一行代码完成文件上传JRebel的使用

目录 引言 一、JRebel的使用 1.1.安装JReble 1.2.反向代理工具 1.3.离线使用 二、文件上传 2.1.公共文件跳转 2.2.添加依赖 2.3.配置文件上传解析器 2.4.图片路径配置Tomcat 2.5.前端代码 2.6.文件上传实现 三、文件下载 3.1.Controller层 3.2.前端代码 四、多文…

Jetsonnano B01 笔记4:UART 通信配置及编程

今日继续我的Jetsonnano学习之路,今日学习使用Jetson硬件驱动之UART串口通信: 目录 简议串口通信: 硬件连接: 串口配置: 安装串口函数库: 设置权限: Python代码配置: 下载测试…

机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)

11、非线性模型 当得到一个回归方程会,得到一条直线来拟合这个数据的统计规律,但是实际中用这样的简单直线很显然并不能拟合出统计规律,所谓线性回归比如两个变量之间关系就直接用一条直线来拟合,2个变量和一个1个变量的关系就用…

PDF 工具箱

PDF 工具箱 V9.0.0.1 程序:VB.net 运行库:NET Framework 4.5 功能简介: 1、PDF文件多文件合并,可调整顺序。 2、PDF文件拆分,将每页拆分成独立的PDF文件。 3、PDF文件添加水印,文字或图片水印&…

代码随想录 -- day46 --139.单词拆分

139.单词拆分 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词 递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] true。 本题一定是 先遍历 背包,再遍历物品 c…

【LeetCode题目详解】第九章 动态规划part09 198.打家劫舍 213.打家劫舍II 337.打家劫舍III(day48补)

本文章代码以c为例! 一、力扣第198题:打家劫舍 题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻…

【再识C进阶2(中)】详细介绍指针的进阶——函数指针数组、回调函数、qsort函数

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…

开开心心带你学习MySQL数据库之第七篇

MySQL提供的约束 1.not null 2.unique 3.default 4.primary key 5.foreign key 表的设计 找到实体确定实体间的关系 一对一一对多多对多 聚合查询 ~~行之间的运算 ~~聚合函数 ~~分组group by 联合查询 ~~多表查询 ~~笛卡尔积: 把两个表放到一起进行排列组合 班级表 cla…

代码随想录 -- day45 -- 70. 爬楼梯 (进阶)、322. 零钱兑换 、279.完全平方数

70. 爬楼梯 (进阶) 这里要注意,这是一个排列组合的问题,所以要先遍历背包再遍历物品 dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法 递推公式为:dp[i] dp[i - j] class Solution { public:int c…

基于51单片机万年历电压电流检测-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器,液晶1602显示,DS1302时钟检测,电流电压检测、按键设置报警,蜂鸣器报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /lcd1602初始化设置*/ vo…

Java中什么是序列化,哪里有所应用

文章目录 一、简介1.1 本文介绍Java中的序列化技术1.2 阐述序列化的应用场景 二、Java序列化概述2.1 序列化定义2.2 序列化特征2.3 序列化机制 三、Java序列化使用3.1 实现Serializable接口3.2 transient关键字3.3 自定义序列化策略 四、Java序列化应用4.1 对象状态持久化4.2 网…

RCP系列-第一章 环境安装

RCP系列文章 第一章 Matlab安装 Matlab安装 RCP系列文章前言一、Matlab 获取二、安装1.解压2.打开解压后的文件夹中的【R2018b_win64】文件夹3.鼠标右击【setup】选择【以管理员身份运行】4.选择【使用文件安装密钥】,点击【下一步】5.选择【是】,点击【…