k8s-简介

Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统,K8s 作为缩写的结果来自计算”K”和”s”之间的八个字母。主要功能是生产环境中的容器编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。

1.1 使用Kubernetes会收获哪些好处

  • 可以”轻装上阵”地开发复杂系统
    以前需要很多人(其中不乏技术达人)一起分工协作才能设计、实现和运维的分布式系统,在采用Kubernetes解决方案之后,只需一个精悍的小团队就能轻松应对。在 这个团队里,只需一名架构师负责系统中服务组件的架构设计,几名开 发工程师负责业务代码的开发,一名系统兼运维工程师负责Kubernetes 的部署和运维,因为Kubernetes已经帮我们做了很多。
  • 可以全面拥抱微服务架构
    微服务架构的核心是将一个巨大 的单体应用分解为很多小的互相连接的微服务,一个微服务可能由多个 实例副本支撑,副本的数量可以随着系统的负荷变化进行调整。微服务 架构使得每个服务都可以独立开发、升级和扩展,因此系统具备很高的 稳定性和快速迭代能力,开发者也可以自由选择开发技术。
  • 可以随时随地将系统整体”搬迁”到公有云上
    Kubernetes最 初的设计目标就是让用户的应用运行在谷歌自家的公有云GCE中,华为 云(CCE)、阿里云(ACK)和腾讯云(TKE)先后宣布支持 Kubernetes集群,未来会有更多的公有云及私有云支持Kubernetes。同 时,在Kubernetes的架构方案中完全屏蔽了底层网络的细节,基于 Service的虚拟IP地址(Cluster IP)的设计思路让架构与底层的硬件拓扑 无关,我们无须改变运行期的配置文件,就能将系统从现有的物理机环 境无缝迁移到公有云上。
  • Kubernetes内在的服务弹性扩容机制可以让我们轻松应对突发流量
    在服务高峰期,我们可以选择在公有云中快速扩容某些Service 的实例副本以提升系统的吞吐量,这样不仅节省了公司的硬件投入,还 大大改善了用户体验。
  • Kubernetes系统架构超强的横向扩容能力可以让我们的竞争 力大大提升
    我们利用Kubernetes 提供的工具,不用修改代码,就能将一个Kubernetes集群从只包含几个 Node的小集群平滑扩展到拥有上百个Node的大集群,甚至可以在线完成集群扩容。

2.1K8s的部分核心概念

Kubernetes权威指南:从Docker到Kubernetes实践全接触/龚正等编 著.—4版.—北京:电子工业出版社

Kubernetes里的Master指的是集群控制节点,在每个Kubernetes集群 里都需要有一个Master来负责整个集群的管理和控制,基本上 Kubernetes的所有控制命令都发给它,它负责具体的执行过程,我们后 面执行的所有命令基本都是在Master上运行的。 Master通常会占据一个 独立的服务器(高可用部署建议用3台服务器),主要原因是它太重要 了,是整个集群的”首脑”, 如果它宕机或者不可用,那么对集群内容器 应用的管理都将失效

master组件通常运行以下关键进程:

  • Kubernetes API Server(kube-apiserver):提供了 HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作 的唯一入口,也是集群控制的入口进程。
  • Kubernetes Controller Manager(kube-controller-manager): Kubernetes里所有资源对象的自动化控制中心,可以将其理解为资源对象的”大总管”。
  • Kubernetes Scheduler(kube-scheduler):负责 资源调度(Pod 调度)的进程,相当于公交公司的”调度室”。

另外,在Master上通常还需要部署etcd服务,因为Kubernetes里的所有资源对象的数据都被保存在etcd中。也可以搭建单独的etcd集群用以储存这些关键数据。

除了Master,Kubernetes集群中的其他机器被称为Node,在较早的 版本中也被称为Minion。与Master一样,Node可以是一台物理主机,也 可以是一台虚拟机。Node是Kubernetes集群中的工作负载节点,每个 Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机 时,其上的工作负载会被Master自动转移到其他节点上。

node组件通常运行以下关键进程:

  • kubelet:负责Pod对应的容器的创建、启停等任务,同时与 Master密切协作,实现集群管理的基本功能。
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的 重要组件。
  • Docker Engine(docker):容器引擎,负责本机的容器创建 和管理工作。

Node可以在 运行期间动态增加到Kubernetes集群中,前提是在这个 节点上已经正确安装、配置和启动了上述关键进程,在默认情况下 kubelet会向Master注册自己,这也是Kubernetes推荐的Node管理方式。 一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身 的情报,例如操作系统、Docker版本、机器的CPU和内存情况,以及当 前有哪些Pod在运行等,这样Master就可以获知每个Node的资源使用情 况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上 报信息时,会被Master判定为”失联”,Node的状态被标记为不可用 (Not Ready),随后Master会触发”工作负载大转移”的自动流程。

kubectl get nodes可以查看集群中有多少node节点

kubectl describe node可以查看集群中节点的详细信息

Pod是Kubernetes最重要的基本概念,如图所示是Pod的组成示意 图,我们看到每个Pod都有一个特殊的被称为”根容器”的Pause容器。 Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器, 每个Pod还包含一个或多个紧密相关的用户业务容器。

为什么Kubernetes会设计出一个全新的Pod的概念并且Pod有这样特 殊的组成结构?

原因之一:在一组容器作为一个单元的情况下,我们难以简单地 对”整体”进行判断及有效地行动。比如,一个容器死亡了,此时算是整体死亡么?是N/M的死亡率么?引入业务无关并且不易死亡的Pause容器作为Pod的根容器,以它的状态代表整个容器组的状态,就简单巧 妙地解决了这个难题。

原因之二:Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问 题,也很好地解决了它们之间的文件共享问题。 Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP,一个 Pod里的多个容器共享Pod IP地址。 Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟 二层网络技术来 实现,例如Flannel、Open vSwitch等,因此我们需要牢记一点: 在 Kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。

Label(标签)是Kubernetes系统中另外一个核心概念。一个Label是 一个key=value的键值对,其中key与value由用户自己指定。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等, 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的 资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后 动态添加或者删除

RC是Kubernetes系统中的核心概念之一,简单来说,它其实定义了 一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预 期值,所以RC的定义包括如下几个部分。

  • Pod期待的副本数量。
  • 用于筛选目标Pod的Label Selector。
  • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板 (template)

Service服务也是Kubernetes里的核心资源对象之一,Kubernetes里的 每个Service其实就是我们经常提起的微服务架构中的一个微服务,之前 讲解Pod、RC等资源对象其实都是为讲解Kubernetes Service做铺垫的。

下图显示了Pod、RC与Service的逻辑关系。

Kubernetes的Service定义了一个服务的访问 入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由 Pod副本组成的集群实例,Service与其后端Pod副本集群之间则是通过 Label Selector来实现无缝对接的。RC 的作用实际上是保证Service的服务能力和服务质量始终符合预期标准。

3.创建POD流程

1.用户通过 kubectl发起创建pod请求

  1. apiserver收到请求,先创建一个包含pod信息的yaml文件,将该文件信息写入到etcd中(如果直接使用yaml文件创建则无该步骤)

  2. controller manager 获取到创建pod的yaml信息,并根据配置信息将要创建的资源对象(pod)放在等待队列中。

4.当 scheduler通过死循环查看api-server,如果获取到新的pod请求,根据etcd中的集群状态信息,计算node节点资源,并根据预选调度和优选调度,选择最佳的node节点。

5.api-server与选出的最佳 node节点的kubelet进行通信,该node节点上的kublet通过与容器引擎交互,根据资源清单,由容器引擎创建对应pod。

6.在通过 kube-proxy生成对应的网络策略,生成用户访问入口。

Original: https://www.cnblogs.com/Canyun-blogs/p/16477914.html
Author: 残-云
Title: k8s-简介

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684290/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Docker 部署 Kibana

    Docker 部署 Kibana 本篇主要介绍 使用 Docker 部署 kibana 用于操作 Elasticsearch 使用. 1. 前置准备 1.1 Elasticsear…

    技术杂谈 2023年7月10日
    061
  • Kubernetes 升级至 1.24 并将 container runtime 切换至 containerd

    Kubernetes 1.24 于 2022 年 5 月 3 日正式发布(详见 Kubernetes 1.24: Stargazer),1.24 版本的一个重大变化是从 kubel…

    技术杂谈 2023年5月30日
    072
  • 解决eclipse中的Java文件,使用idea打开的乱码问题

    转码前: 转码后: 核心方法: new String(content, "GBK").getBytes("utf-8")); 吐槽: 在克隆…

    技术杂谈 2023年7月23日
    089
  • 教你搞懂Jenkins安装部署!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作…

    技术杂谈 2023年7月11日
    096
  • UiAutomator源代码分析之UiAutomatorBridge框架

    上一篇文章《UIAutomator源代码分析之启动和执行》我们描写叙述了uitautomator从命令行执行到载入測试用例执行測试的整个流程。过程中我们也描写叙述了UiAutoma…

    技术杂谈 2023年5月31日
    091
  • 查看某个服务的连接数

    4012为服务端口netstat -an |grep ‘ESTABLISHED’ |grep -i ‘4012’ | wc -l 万水千山总是情, 领个红包行不行? 觉得还可以的话…

    技术杂谈 2023年5月31日
    082
  • 千古前端图文教程-HTML002-浏览器的介绍

    浏览器的介绍 浏览器的介绍 常见的浏览器 浏览器的市场占有份额 浏览器的组成 + 1、渲染引擎(浏览器内核) 2、JS 引擎 浏览器工作原理 常见的浏览器 浏览器是网页运行的平台,…

    技术杂谈 2023年7月11日
    087
  • Pycharm k火秘诀插件

    Pycharm2020最新永久激活码插件(支持Windows),100%永久激活 用到pycharm工具发现没用多久时间又过期了,在网上有看到很多朋友都遇到同样的情况,于是找到了一…

    技术杂谈 2023年6月21日
    0142
  • 分布式ID算法uuid,snowflake,leaf

    分布式ID算法uuid,snowflake,leaf SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 lon…

    技术杂谈 2023年5月31日
    088
  • Prometheus监控系统(4)pushgateway及自定义脚本

    一、pushgateway的作用 传统监控软件如Zabbix通常都建议使用push的方式来由客户端推送数据给服务端,这样可以减轻服务端压力。但是这样也有个弊端就是配置更为复杂,需要…

    技术杂谈 2023年6月1日
    083
  • 从 jQuery 到 Vue3 的快捷通道

    当初使用 jQuery 做了几个简单的项目,算是有一点点了解,现在学习Vue3,发现了一个可以快速转换思维的通道 —— 使用CDN的方式模拟 Vite 建立的项目! CDN方式 j…

    技术杂谈 2023年5月31日
    096
  • Ubuntu百度飞桨和CUDA的安装

    Ubuntu 百度飞桨 和 CUDA 的安装 1、简介 本文主要是 Ubuntu 百度飞桨 和 CUDA 的安装系统:Ubuntu 20.04百度飞桨:2.2 为例 2、百度飞桨安…

    技术杂谈 2023年7月24日
    073
  • 在边缘计算场景中使用Dapr

    Dapr 是分布式应用程序可移植、事件驱动的运行时, 这里有几个关键字,我们拆开来看一下: 分布式: 代表共享或是分散,在云原生应用上体现为微服务,在边缘计算场景中代表分散的模块,…

    技术杂谈 2023年5月31日
    091
  • JAVA设计模式-桥接模式

    JAVA设计模式-桥接模式 一、介绍 桥接模式是一种结构型模式,它主要是将抽象部分和实现部分进行分离,可以独立变化,降低类与类之间的耦合度。举例:我们现在需要实现不同形状,每个形状…

    技术杂谈 2023年6月21日
    0111
  • 正式环境排查记录

    上周查出的生产环境安全环保请求慢的问题你看怎么配合技术组处理一下吧, 上周是与管云中老师沟通的。他说是可以直接调用内网地址。 嗯嗯,我在生产环境用curl返回是超时 这两个接口有什…

    技术杂谈 2023年5月31日
    089
  • GNU C字节对齐__attribute__((aligned(n))) #pragma pack(n)

    在阅读gnu软件c源代码时,经常会遇到字节对齐相关操作,比如uboot命令相关的代码中,会遇到 __attribute__((aligned(n)))扩展关键字, #pragma …

    技术杂谈 2023年7月11日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球