WHAT - 容器化系列(三)- Kubernetes - k8s

目录

  • 一、前言
  • 二、Kubernetes 架构图
  • 三、Kubernetes
      • Kubernetes和Docker的关系
      • 最小调度单元Pod
  • 四、基本概念
    • 容器生态和标准化
    • 资源
    • Workload资源:控制器对象
    • 服务担保
    • Service&Ingress
      • 1. 两者的介绍以及与 OSI 七层模型关系
      • 2. 常见的 Service 类型
      • 3. Ingress 和 Ingress Controller
      • 4. 如何选择 service 和 Ingress
    • 探针Probe
  • 五、高阶概念
    • 存储
    • 认证授权
    • 安全
    • 调度和驱逐

一、前言

在 WHAT - 容器化系列(一) 我们简单介绍过 Kubernetes 的产生过程以及它解决了大规模容器集群管理的难题,推动了容器技术在生产环境中的应用。

因此Kubernetes在容器化发展进程具备非常重要的意义,我们今天主要来介绍Kubernetes。

二、Kubernetes 架构图

请添加图片描述

三、Kubernetes

Kubernetes(常简称为K8s)是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它提供了一个容器编排的基础架构,使得管理和运行大规模容器化应用(或者说大规模容器集群管理)变得更加简单和高效。

Kubernetes和Docker的关系

Docker是一种容器化技术,用于打包、交付和运行应用程序。而Kubernetes则是一个容器编排平台,用于管理和调度这些Docker容器。

简而言之,Docker负责将应用程序打包为容器,而Kubernetes则负责在集群中运行、管理和调度这些容器。

最小调度单元Pod

Pod是Kubernetes中最小的部署和调度单元。

它是一个由一个或多个容器组成的逻辑单元,这些容器共享网络命名空间、IP地址和存储卷等资源。

Pod提供了一种封装、管理和调度容器的机制,使得它们可以作为一个整体来管理。

示例:创建一个独立的pod

kubectl run nginx --image=nginx

四、基本概念

容器生态和标准化

在 WHAT - 容器化系列(一) 中我们介绍过:CRI-O则是针对Kubernetes设计的轻量级容器运行时。

Kubernetes支持多种容器运行时,包括containerd等。它提供了一套标准化的API和规范,使得不同的容器运行时可以无缝集成和交互。

还有哪些运行时?

  1. KataContainer:一个基于轻量化vm实现的容器运行时,兼容OCI(by Intel);
  2. gvisor:一个基于用户态模拟kernel实现的容器运行时,兼容OCI(by google);
  3. rkt(rocket):coreos公司基于runc开发的容器运行时,不兼容OCI
  4. NablaContainers 类似gvisor的竞相产品(by IBM)

资源

Kubernetes允许你为容器分配CPU、内存等资源,并且提供了资源配额和限制的机制,以确保各个容器在资源利用上的平衡和稳定性。

CPU和内容资源单位:

  • 1cpu指的是1vcore/hyperthread。0.1cpu表示方法为"100m",读作"100 millicpu"
  • 内存单位K、M、G是10进制单位,Ki、Mi、Gi是二进制单位。1M=1000K,1Mi=1024Ki,注意两者在数量上略有差异。

Pod通过Request和Limit向k8s申请资源,理解为:

  • Request。k8s为pod提供的最小担保资源。
  • Limit。pod能够使用的最大资源上线。

注意,k8s将按照request指定数量为pod分配node资源。request不是pod实际的最小消耗值,但limit 是pod资源消耗的最大值。

Workload资源:控制器对象

Kubernetes支持多种工作负载类型,包括Deployment、StatefulSet、DaemonSet等,每种工作负载类型都有不同的用途和特点,可以满足不同的应用场景需求。

有哪些Workload资源?

  1. deployment&replicasets
  2. statefulset
  3. daemonset
  4. job
  5. cronjobs

示例:创建一个deployment

kubectl create deployment  nginx-deployment --image=nginx

服务担保

Kubernetes通过Pod和Service等抽象层,提供了服务的高可用性和容错能力。它可以自动进行故障检测和恢复,确保应用程序在面临硬件或软件故障时仍然能够正常运行。

Kubernets提供3种QoS,分别是:

  1. Guaranteed, 即Request==Limit,Kubernetes为POD提供有担保的Qos。
  2. Burstable, 即Request <Limit,Kubernetes为POD提供最小request资源担保,POD可以burst到最大Limit的数量,但是 Request–>limist之间是不能担保的。
  3. BestEffort, 即不设置Request也不设置Limit,Kubernetes不为POD提供任何的担保。当资源不足的时候,此类POD将最先被限制或者踢出。

资源不足踢出优先级:BestEffort --> Burstable --> Guaranteed

Service&Ingress

1. 两者的介绍以及与 OSI 七层模型关系

Service是Kubernetes中用于暴露应用程序的服务,它可以将外部流量负载均衡到一组后端Pod。而Ingress则是一种管理外部访问到集群内服务的方式,通过定义Ingress规则,可以将外部流量路由到集群内部的Service。

Service 和 Ingress 是 Kubernetes 中用于管理网络访问的关键组件,它们与 OSI 模型的七层网络模型之间存在着一定的关系。

请添加图片描述

下面是它们与 OSI 模型的关系:

Service(服务)

在 OSI 模型中,Service 可以与第四层(传输层)和第七层(应用层)对应。

  • 第四层:Service 提供了一种在网络传输层面上实现服务发现和负载均衡的机制。它通过 Cluster IP、Node Port 或者 LoadBalancer 类型来暴露服务,并且可以在相同的服务后面负载均衡流量到多个 Pod。

  • 第七层:在某种程度上,Service 也可以与应用层相关联,因为它可以基于应用程序的名称、端口号等信息进行服务发现和路由。此外,Kubernetes 还支持通过 Headless Service 来直接暴露 Pod 的 IP 地址,这种模式更贴近应用层的服务发现。

  1. Ingress(入口)

Ingress 主要与 OSI 模型的第七层(应用层)相关。

  • 第七层:Ingress 允许在应用层面上对流量进行路由和访问控制。它基于 HTTP/HTTPS 协议对流量进行路由,并支持基于域名、路径等条件进行流量分发。因此,Ingress 可以看作是一种高级的服务暴露机制,能够根据应用层的信息对流量进行更细粒度的控制。

2. 常见的 Service 类型

  1. Cluster:在集群内部暴露服务端口
  2. NodePort:在集群外部通过nodeport的形式暴露服务端口
  3. Loadbalancer:通过云供应商的LB服务暴露端口,需要云供应商controller的支持

流量示意图:
请添加图片描述

3. Ingress 和 Ingress Controller

我们可以先做一个类比,以 ingress-nginx-controller 举例:

  • ingress-nginx-controller 理解为 nginx 服务器
  • ingress 对象理解为 nginx 的 virtual-server 配置文件,只是 ingress 是 k8s 的标准对象

具体来说,在 Kubernetes 中,Ingress 是一种 API 资源,用于定义从集群外部到集群内部服务的 HTTP 和 HTTPS 路由规则。简单来说,Ingress 允许你将外部流量路由到集群内的 Service。但是,Ingress 本身并不处理流量,它只是定义了一组规则。而 Ingress Controller 则是负责实际处理 Ingress 规则并路由流量的组件。它监听 Kubernetes API,检测到 Ingress 资源的变化后,会根据定义的规则配置底层的负载均衡器(如 Nginx、HAProxy、Traefik 等),以确保流量按照 Ingress 规则进行正确的路由。

简单来说,Ingress 是规则,Ingress Controller 是实现这些规则的组件。在 Kubernetes 中,通常会配合使用 Ingress 资源和 Ingress Controller 来实现对外服务的访问控制和流量路由。

流量示意图:

请添加图片描述

4. 如何选择 service 和 Ingress

4层tcp流量场景

业务为4层流量,只能使用service方式暴露,比如车联网mqtt协议、dns udp 协议等。

7层http流量场景:

一般的http和https为单向认证流量,即可以使用service 4层方式暴露,也可以使用ingress 7层方式暴露。

http流量细分场景:

  • 后端服务需要验证client端证书的https双向流量,因为密钥交换需要在4层完成,必须用service方式暴露

  • 后端服务唯一,http/https(单向)流量不需要路由的,既可以用service方式,也可以用ingress方案暴露

  • 后端服务多个,http/https(单向)流量需要配置转发路由的情况,必须用ingress方式暴露

探针Probe

Kubernetes通过探针(Probe)来检查容器的健康状态,包括存活性探针(Liveness Probe)和就绪性探针(Readiness Probe)。这些探针可以帮助Kubernetes确定何时启动、停止或重新启动容器,以确保应用程序的稳定性和可用性。

k8s提供3类probe探针,分别是:

  • Readiness Probe 探测通过表示pod状态正常,pod接入service接收请求。
  • Liveness Probe 探测通过表示pod状态存活,不通过表示pod僵死自动重启pod
  • Startup Probe POD重启初始化节点探测pod存活状态,一旦通过则有Livenss接管
    存活状态探测(主要用于定义初始化时长)。

以上探针支持http、tcp、grpc、command 等方式。

五、高阶概念

k8s 还包括如下一些高级概念,可以按需自行学习。

存储

  • persistent volumes(pv)
  • Persistent Volume Claim (pvc)
  • Storage Class (sc)

认证授权

  • authenticating
  • RBAC

安全

  • PodSecurityPolicy
  • NetworkPolicy

调度和驱逐

  • Nodeseletor/Affinity
  • priority和preempt
  • Taints和Tolerations
  • api 扩展
  • CustomResourceDefinitions
  • API server aggregation

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

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

相关文章

自然资源-农村土地流转知识全解

自然资源-农村土地流转知识全解 随着农村经济的发展和城市化进程的加快&#xff0c;农村土地面临着多方面的压力&#xff0c;如人口增长、城市扩张、环境恶化等。这些压力导致了农村土地利用率低、经济效益差、农民收入水平低、农村社会经济不发达等问题。因此&#xff0c;改变…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中&#xff0c;难免会有一些工具方法&#xff0c;多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理&#xff0c; 比如工具函数如果需要修改&#xff0c;多个项目可能每个都需要改代码&#xff0c; 抽离到单独的包中只需要…

AI办公自动化:用kimi批量提取音频中的标题并重命名

很多音频文件&#xff0c;文件名很乱&#xff0c;需要根据音频信息中的标题聪明吗 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步步的思考&#xff0c;完成以下脚本的撰写&#xff1a; 打开文件夹&#xff1a;E:\有声\a16z播客 读取里面所有的mp3格…

关于vlookup的第一个参数的个人理解

VLOOKUP&#xff08;查阅值&#xff0c;包含查阅值和返回值的查找区域&#xff0c;查找区域中返回值的列号&#xff0c;精确查找或近似查找&#xff09; 我个人理解&#xff0c;第一个参数应该叫线索值&#xff0c;因为我们要通过它去找与其对应的&#xff08;也就是与其同行的…

Soulmask灵魂面甲服务器一键开服联机教程

1、购买后登录服务器&#xff08;百度莱卡云&#xff09; 进入控制面板后会出现正在安装的界面&#xff0c;安装大约5分钟&#xff08;如长时间处于安装中请联系我们的客服人员&#xff09; 2、创建端口 点击网络➡创建新的网络设置 需要创建两个端口&#xff0c;一个 查询端口…

SAP_SD模块-销售交货并开票后发现物料没维护价格的完整处理方法(含POD功能)

销售流程完结后&#xff0c;发现物料价格没维护时&#xff0c;如何处理 一、业务背景&#xff1a; 1、问题发现时间&#xff1a;2024年6月2日&#xff1b; 2、问题描述&#xff1a; 2024年5月份的单据业务存在交货成本和开票成本为0的单据&#x…

【Hive SQL 每日一题】统计指定范围内的有效下单用户

文章目录 测试数据需求说明需求实现 前言&#xff1a;本题制作参考牛客网进阶题目 —— SQL128 未完成试卷数大于1的有效用户 测试数据 -- 创建用户表 DROP TABLE IF EXISTS users; CREATE TABLE users (user_id INT,name STRING,age INT,gender STRING,register_date STRING…

cocos入门5:编辑器界面介绍

Cocos Creator是一款功能强大的跨平台游戏开发工具&#xff0c;其编辑器界面设计直观易用&#xff0c;提供了从资源管理、场景编辑到脚本编写等一站式解决方案。下面是对Cocos Creator编辑器界面的详细介绍&#xff1a; 一、界面布局 Cocos Creator编辑器界面通常包含以下几个…

【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的医院管理系统&#xff0c;以提高医院管理效率&#xff0c;优化医疗服务流程&#xff0c;提升患者就诊体验…

FL Studio Producer Edition 21.2.2.3914 所有插件版安装教程指南

FL Studio Producer Edition 21.2.2.3914 所有插件版是一款功能强大的软件音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;。FL Studio 中文学习版可以帮助你制作出色的音乐&#xff0c;为您提供了一个集成的开发环境&#xff0c;使用起来非常简单有效&#xff0c;您…

2.4 操作系统死锁(死锁的概念、产生、防止、预防、避免)

文章目录 一、死锁的概念1.1 死锁、饥饿、死循环对比1.1.1 死锁&#xff08;Deadlock&#xff09;1.1.2 饥饿&#xff08;Starvation&#xff09;1.1.3 死循环&#xff08;Infinite Loop&#xff09; 1.2 死锁产生的条件 二、预防死锁三、避免死锁四、死锁的检测和解除4.1 资源…

Arduino 按钮及弹跳

所需元件 可插入面包板的按钮1个 220Ω电阻1个 10kΩ电阻1个 3mm或5mm LED 1个 面包板1块 Arduino Uno开发板1块 面包板连接线数条 使用外接电阻 将5V接到按钮&#xff0c;按钮的另一端串联1个10kΩ电阻再接地&#xff0c;这样的接法被称为下拉电阻(pull-down resistor)。若测…

Vue01-vue的简介

一、Vue是什么&#xff1f; 一套用于构建用户界面的渐进式javaScript框架。 构建用户界面&#xff1a; 渐进式&#xff1a; 目前Vue的地位&#xff1a;生态完善&#xff0c;国内前端工程师必备技能。 二、Vue的特点 一个XXX.vue就是一个组件&#xff0c;封装的概念&#xff0c…

智慧校园有哪些特征

随着科技的飞速进步&#xff0c;教育领域正经历着一场深刻的变革。智慧校园&#xff0c;作为这场变革的前沿代表&#xff0c;正在逐步重塑我们的教育理念和实践方式。它不仅仅是一个概念&#xff0c;而是一个集成了物联网、大数据、人工智能等先进技术的综合生态系统&#xff0…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件&#xff08;QLineEdit&#xff09;、一个标签控件&#xff08;QLabel&#xff09;和一个文本浏览控件&#xff08;QTextBrowser&#xff09;&#xff0c;在单行文 本编辑控件里的文本被编辑时&#xff0c;标签控件和文本浏览控件都会同步显示…

codefun的蓝桥杯国赛之旅

前言 好久没有刷算法了&#xff0c;今天完成了我的蓝桥杯国赛之旅&#xff01; 总的来说&#xff0c;比赛的过程不是很顺利&#xff0c;只能ac两道题目&#xff0c;好多题都是有思路&#xff0c;但是要么是写不出来&#xff0c;要么是debug不出来&#xff0c;多重背包&#xf…

C++——输入输出、基本变量类型

目录 一、输入输出 1、标准输出流&#xff08;cout&#xff09; 2、标准输入流&#xff08;cin&#xff09; 3、标准错误流&#xff08;cerr&#xff09;和标准日志流&#xff08;clog&#xff09; 4、示例代码 二、基本数据类型 1、宽字符的用法 2、如何使用 3、示例…

能离线翻译的软件有哪些?随时随地,翻译随行

语言不通&#xff0c;旅途怎敢说走就走&#xff1f; 掌握一门或多门外语似乎成了外出旅游的必备技能&#xff0c;然而这是很有难度的一个事情。好在&#xff0c;越来越多的翻译软件浮出水面&#xff0c;给我们带来极大帮助。但谁说非得在线才能沟通无阻&#xff1f; 今天我们…

[数据结构]字典树

概念&#xff1a; 字典树是一种数据结构&#xff0c;常用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;。主要思想是利用字符串的公共前缀来节约存储空间。 实现原理&#xff1a; 在开发的过程中如果需要使用字典树&#xff0c;不必自己…

c++异常处理exception

// c中的异常处理 // 1.throw &#xff1a; 专门用于抛出异常&#xff0c;做出提示 // 2.try &#xff1a; 尝试运行可能会异常的代码 // 3.catch &#xff1a; 用于接收前面跑出来的异常并进行解决// 执行循序为: // try // { // throw ...; // 执行的代码中必须直接或者…