【云原生】初识 Kubernetes — pod 的前世今生

在这里插入图片描述

目录标题

  • 前言
  • 🐳 Kubernetes到底是什么?
    • 🐬 K8s 的由来
    • 🐬K8s 的工作方式
    • 🐬 K8s 主要组件
        • 🐋Master 组件
        • 🐋Node 组件
  • 🐳 pod 是什么?
    • 🐬pod 的概念
    • 🐬控制管理器
        • 🐟 控制管理--ReplicationController
        • 🐟 控制管理--HPA(Horizontal Pod Autoscaling)
        • 🐟 StatefulSet
        • 🐟 DaemonSet
        • 🐟 Job
    • 🐬客户端(Client)— pod
  • 总结

前言

跟着博主从0到1学习K8s! 我行,你也行!

该文章是我的系列专栏的第一篇文,首先一下 Kubernetes ,然后进行pob 的详细讲解。

🐳 Kubernetes到底是什么?

下列介绍部分来自网络,如有侵权,告知删除!谢谢

🐬 K8s 的由来

大家或许听过 K8s,其实他就是 Kubernetes 的简称。那么这个简称是如何得来的呢?他的前世到底是什么?

其实这个简称的由来非常简单,我这种专职摸鱼户非常喜欢这种偷懒的方式,K 就是 Kubernetes 的首字母,s 是 Kubernetes 的末尾字母,数字8则是表明在 K 和 s 之间的字符 ‘ubernete’ 个数为8。所以我们简称其为K8s

🐬K8s 的工作方式

那么K8s为什么会被创造出来呢?

在他诞生之前,传统的应用部署方式是通过插件或脚本来安装应用。但是这种做法不利于应用的升级更新/回滚等操作,虽然我们可以通过虚拟机进行实现某些功能,但是移植性不强。

至此,我们的K8s应运而生!

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

(1) K8s 通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

(2) 容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

🐬 K8s 主要组件

在K8s的整体框架中,包含Master 组件、Node 组件,Master组件是提供集群的管理控制中心。节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

🐋Master 组件

Master 组件里面都有什么呢?
  1. kube-apiserver (统一的服务访问入口)
  2. ETCD (写入集群信息)
  3. kube-controller-manager
  4. cloud-controller-manager
  5. kube-scheduler
  6. 插件 addons
    6.1 DNS (创建域名对应解析)
    6.2用户界面
    6.3容器资源监测
    6.4Cluster-level Logging

🐋Node 组件

Node 组件里面都有什么呢?
  1. kubelet (直接与容器引擎交互 实现生命周期管理)
  2. kube-proxy (写入规则 、实现服务映射访问)
  3. docker
  4. RKT
  5. supervisord
  6. fluentd

至此对于 Kubernetes 的初步认识就告一段落了,接下来我们详细讲解一下 “ pod ”

🐳 pod 是什么?

🐬pod 的概念

博主比较倾向的pod的分类是自主式 pod 和控制器管理的 pod

自主式 pod 字面意思就是自由的pod,可以将不受控制器管理的pod称为自由式 pod,这里的自由就是存在与否不会被在意,消失后也不会被控制器增加,多了也不会被消除。

pod是有生命周期的,如过时间过长是会死亡的!具体后续会讲到

那么控制器管理的pod的意思就呼之欲出了!即为受控制器管理的pod。被控制器拿捏的妥妥的 (ง •_•)ง

🐬控制管理器

接下来我们介绍一下pod内各个容器与pause的关系。

在这里插入图片描述

从上图中我们可以看出,pod中的 container可以有很多个( n>=1 ),但是有一点,他们共用 pause 的地址段,即为地址资源共享。

在一个pod里面,既共享地址段又共享存储卷。

那么接下来我们介绍一下受控制器管理的 pod。首先我们需要了解这个控制管理。

🐟 控制管理–ReplicationController

ReplicationController是一种Kubernetes资源,可确保它的pod始终保持运行状态。他是用来确保容器应用副本的数量始终保持在用户定义的副本数。如果pod异常退出或者因任何原因消失(例如节点从集群中消失或由于该pod被从节点中逐出),则ReplicationController会注意到缺少了pod并创建替代pod。

我用接下来的两幅图来解释一下这个过程。

在这里插入图片描述

假设上述为正常运行的节点1和节点2,我们节点1中的pod 2是受控制器控制的,而pod 1没有。


在这里插入图片描述

此时,节点 1出现问题了,那么属于自由式pod 的pod 1只能仍其消失,但是pod 2就不同了,他是被控制器控制的,当节点 1连带着pod 2消失后,ReplicationController 会自动在节点2生成pod 2’ 的替代,使得用户设定的副本数保持不变。


在新版本Kubernetes 中,建议使用ReplicaSet来代替ReplicationController

虽然ReplicaSet可以独立使用,但是一般还是使用Deployment来自动管理ReplicaSet,因为这样不需要关系兼容问题。(比如ReplicaSet不支持滚动更新,但是Deployment支持)

在此介绍一个概念:滚动更新(rolling-update)

当我们想要更新一个 pod 时,我们可以先建立一个新的 pod,因为需要保持副本数一定,所以我们需要删除一个 pod ,这时我们将旧的 pod 删除,即可实现更新。

接下来博主用下列图像讲解Deployment是如何实现自动管理

在这里插入图片描述

此时我们有版本1的两个pod(此时ReplicaSet为旧版本) ,我们想要将其滚动更新为版本2,更新过程如下


在这里插入图片描述

首先根据滚动更新概念,我们先创建一个新的ReplicaSet 2,然后新建一个V2版本的 pod,然后删除旧版本。


在这里插入图片描述

和上述步骤一致,将另一个 pod 新建后,删除旧的 pod

其实因为存在回滚机制,pod 并不是删除消失,更贴切的说法是停用


🐟 控制管理–HPA(Horizontal Pod Autoscaling)

Horizontal Pod Autoscaling仅适用于Deployment 和 ReplicaSet 。在V1中支持 pod 的 cpu 利用率进行扩缩容,在vlalpha中支持根据内存以及用户定义的 metric 进行扩缩容。

接下来,依旧是通过图解来介绍这个控制过程 🐼

在这里插入图片描述

上述我们看到HPA控制了RS( ReplicaSet ),他的控制过程是什么呢?

我们在HPA中设定CPU利用率的一个阈值XX,以及最大pod数MAX(X)和最小pod数MIN(X)

这里的XX表示任意数,是人为设定的

那么这个CPU利用率的阈值是如何影响HPA的控制呢,当我们的CPU利用率太高时,超过设定的XX阈值,那么说明计算机忙不过来了,我们需要新建pod来分担压力。所以此时HPA会控制RS新建pod,当然如果CPU利用率第于阈值,RS会回收pod

这个MAX和MIN是如何控制呢?

当CPU利用率高于阈值,我们需要新建pod,但是不能无限制新建,所以这个MAX就是最大pod数,同理我们回收也不可以小于MIN最小值。

综上所述,我们可以利用HPA实现自动水平扩缩!


🐟 StatefulSet

StatefulSet是为了解决有状态服务的问题,因为在此之前Deployments和ReplicaSets是为无状态服务而设计,他的应用场景如下:

  • 稳定的持久化存储,就是 Pod在重新调度后还是能访问到相同的持久化数据
  • 稳定的网络标志,就是 Pod 重新调度后其 PodName和 HostName 不变,基于Headless Service来实现
  • 稳定的持久化存储,就是Pod重新调度后还是能访问到相同的持久化数据
  • 稳定的网络标志,就是Pod 重新调度后其PodName和主机名不变

🐟 DaemonSet

DaemonSet是为了确保节点上运行一个 Pod 的副本。当有节点加入集群时,会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除DaemonSet 将会删除它创建的所有Pod。就相当于DS(DaemonSet)是一个管理员,负责节点上不能没有pod,当然如果DS这个管理员被删除的话,他的小弟pod也会被回收。
使用DaemonSet 的一些典型用法:


🐟 Job

Job有点像是批量化管理pod,我们可以设定pod正常执行次数,只有当pod正常执行次数达标后才允许Job结束。

Cron Job 是其中基于时间管理的,基于时间去管理pod。


🐬客户端(Client)— pod

Client是通过访问service的IP加端口,然后由service连接pod。(利用好service我们可以进行pod-pod的交流)

一般来讲都是 负载+缓存+程序+数据库

总结

此篇只是进行入门介绍,等后续文章进行后续讲解,期待关注阿酱,收藏专刊喔!超级干货等你来看!

在这里插入图片描述

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

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

相关文章

Kafka在Mac下的安装与使用

mac 安装kafka安装kafka的原因安装kafka启动Zookeeper启动Kafka创建topic查看topic生产数据消费数据关闭zookeeper关闭kafka测试安装kafka的原因 用户微服务登录后需要向广告微服务中发送用户登录的信息以获取用户画像(这个过程是异步的),故…

雷电4模拟器安装xposed框架(2022年)

别问我都2202年了为什么还在用雷电4安卓7。我特么哪知道Xposed的相关资料这么难找啊,只能搜到一些老旧的资料,尝试在老旧的平台上实现了。 最初的Xposed框架现在已经停止更新了,只支持到安卓8。如果要在更高版本的安卓系统上使用Xposed得看看…

mac程序员必备的20款软件

今天给大家分享一下我作为一名后端程序员工作中常用的软件,相信下面我要介绍的很多软件对大家来说并不陌生,mac程序员必备的20款软件能够在不同岗位上提升大家的效率和体验。 1、Chrome 我们首先来介绍一些开发常用工具,先是浏览器&#xff…

手撕二叉树--堆的接口实现(附源码+图解)

堆的接口实现(附源码图解) 文章目录堆的接口实现(附源码图解)前言一、定义结构体二、接口实现(附图解源码)1.初始化堆2.销毁堆3.尾插数据(1)向上调整(2)交换函…

Elasticsearch 需要了解的都在这

ES选主过程?其实ES的选主过程其实没有很高深的算法加持,启动过程中对接点的ID进行排序,取ID最大节点作为Master节点,那么如果选出来的主节点中存储的元信息不是最新的怎么办?其实他是分了2个步骤做这件事,先…

es-head插件插入查询以及条件查询(五)

es-head插件插入查询以及条件查询 1.es-head插件页面介绍 页面详细介绍 2.es-head查询语句 2.1.查询索引中的全部数据 curl命令交互,采用GET请求 语法格式: curl -XGET es地址:9200/索引名/_search?pretty [rootelaticsearch ~]# curl -XGET 192…

Mac环境变量配置(Java)

1.打开终端: 2.输入命令:【/usr/libexec/java_home -V】,查看默认的jdk下载地址(绿色下划线的就是jdk默认路径)(注意⚠️:命令行终端是区分大小写的【-v 是不对的,必须是大写 -V】) …

Windows Server 2016远程桌面配置全过程

镜像下载 系统镜像网址 本次下载的是 Windows Server 2016 (Updated Feb 2018) (x64) - DVD (Chinese-Simplified) 远程桌面配置 Step 1 在开始菜单搜索服务,打开服务器管理器,点击右上角的管理按钮 Step 2 添加角色控制,点击下一步 S…

静态路由+DHCP实验(四路由器八PC)

一.200.1.1.0/24子网划分 1.划分八个子网 2.选用前5个,第五个子网再划分4个子网作为骨干 二.规划路由 三.配置(下一跳) 1.先依次实现四个路由器之间全网可通 2.为路由器配置地址池,使用全局模式获取dhcp,指定网关…

Springboot是什么

目录 为什么会要用springboot 1、之前 2、现在 springboot优点 springboot四大核心 自动装配介绍 1、自动装配作用是什么 2、自动装配原理 springboot starter是什么 1、starter作用 2、比如:我们想搭建java web框架 3、starter原理 SpringBootApplica…

Endor Labs:2023年十大开源安全风险

近日,Endor Labs发布了一份新报告,确定了2023年的十大开源安全风险。报告显示,许多软件公司依赖于开源软件代码,但在如何衡量和处理与开源软件相关的风险和漏洞方面缺乏一致性。调查发现,在应用程序中超过80%的代码可能…

Go 结构体

目录 什么是结构体 定义结构体 基本的方式实例化结构体 访问结构体的成员变量 指针类型的方式实例化结构体 取结构体地址的方式实例化 知识扩展:*号 和 &号 构造函数 成员函数(成员方法) 匿名成员变量 方法传入指针类型的结构…

Mac M1通过VMWare Fusion安装Centos7记录(镜像和网络有大坑)

以前用linux系统基本都在我的服务器上或者是在win上进行,从没有在M1上进行创建,因此走了一些坑吧,这里会列出我的详细安装步骤。 下载镜像 镜像的下载网站:https://www.centos.org/download/ 在该网站中,不管是Every…

多级评论单表结构设计

这里的多级,本质上其实也就二级,例如微博的评论, 一级评论: 对微博的评论 二级评论: 对微博下的评论的回复评论 ,这里包括二种 1. 回复的是一级评论, 2, 回复的是二级评论 效果如下 表数据 查…

基于微信小程序的图书馆选座系统源码

开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具 技术说明: springboot mybatis 小程序 代码注释齐全,没有多余代码,适合学习(…

Android Studio模拟器运行无反应

当Android Studio模拟器点击运行无反应 报以下错误: Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT 问题分析 大多是由于默认路径带有中文,所以找不到 解决方法 1,删除镜像 2,配置环境变量 …

Unity强化学习之ML-Agents的使用

Github下载链接:https://github.com/Unity-Technologies/ml-agents ML-Agents是游戏引擎Unity3D中的一个插件,也就是说,这个软件的主业是用来开发游戏的,实际上,它也是市面上用得最多的游戏引擎之一。而在几年前随着人…

Maven配置—idea版

在java开发中,maven是个不可或缺的工具,可以简单理解成maven是个仓库,可以远程下载各种需要的插件,而且对于项目的打包编译等也非常简单;下面来说说如何配置maven 1. 首先下载maven的工具包,解压之后放在D…

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…

测试用例设计指南

作者:京东物流 王玉坤 软件测试设计是测试过程中重要的测试活动,怎么样设计测试用例能提高我们测试的效率和质量,从以下几个方面做了简单的讲解。 1 测试用例设计原则 测试用例设计的基本原则包括:有效性、清晰性、可复用性、可维…