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/606660/

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

(0)

大家都在看

  • linux常用命令(持续更新中…)

    查看所有开机启动服务:systemctl list-unit-files # 按Enter翻页 查看所有开机启动服务:systemctl list-unit-files | gre…

    Linux 2023年6月7日
    084
  • 调度器简介

    内核中用来安排进程执行的模块称为调度器(scheduler),它可以切换进程状态(process state)。例如执行、可中断睡眠、不可中断睡眠、退出、暂停等。 调度器是CPU中…

    Linux 2023年6月7日
    078
  • 继上篇-jquery ajax提交 本篇用ajax提交的数据去数据库查询

    上篇讲到如何用jquery ajax提交数据至后台,后台接收并返回给ajax。https://www.cnblogs.com/tiezhuxiong/p/11943328.html…

    Linux 2023年6月13日
    0104
  • SpringBoot-druid

    SpringBoot-druid 9.1 druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一…

    Linux 2023年6月14日
    0106
  • PYTORCH: 60分钟 | 神经网络

    神经网络可以使用 torch.nn包构建。 现在你已经对autograd有所了解, nn依赖 autograd 定义模型并对其求微分。 nn.Module 包括层,和一个返回 ou…

    Linux 2023年6月16日
    0164
  • Linux 用户密码正确但无法登录和无法su问题故障

    一、 故障 描述 在应用登入操作系统时,用户密码正确但显示Permission denied无法登录,通过管理口控制台用root用户登录,也是同样情况,通过进入单用户查找问题。 一…

    Linux 2023年6月13日
    089
  • php微信自定义分享链接,标题,描述,缩略图配置步骤

    微信公众号开发,自定义分享链接,标题,描述,缩略图接口 1、文件目录结构 2、后台代码: wxshare.php 注意:使用此代码,只需要把wxshare.php文件下面的appi…

    Linux 2023年6月7日
    097
  • 记录一次shell脚本环境全局变量在函数内部生效问题

    背景 计划核对内网IP的使用情况,所以写了个小脚本扫描有哪些IP还在使用。执行脚本过程中发现函数中一直获取不到变量的值,排查后将结论记录下来。 问题现象 全局变量已配置,但在函数中…

    Linux 2023年5月27日
    079
  • mysql select语句查询流程是怎么样的

    mysql select查询的数据是查询内存里面,如果没有查询的数据没有在内存,就需要mysql的innodb引擎读取磁盘,将数据加载的内存后在读取。这就体现了,mysql查询大量…

    Linux 2023年6月8日
    096
  • Shell:Shell基础

    Shell基础 一、shell定义 shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指…

    Linux 2023年5月28日
    0101
  • 二进制安装docker

    下载二进制包 压到 /usr/local/bin ,我用的版本比较新 https://download.docker.com/linux/static/stable/x86_64/…

    Linux 2023年6月6日
    0100
  • Vue项目配置CDN

    两篇博客的实现方法不同。 另外:nginx的前端文件路径应该为:/usr/local/nginx/html下。 index.html <head> <meta c…

    Linux 2023年6月7日
    0100
  • Linux 如何设置开机自启动脚本

    https://blog.csdn.net/weixin_40343504/article/details/82457990 Original: https://www.cnblo…

    Linux 2023年6月13日
    0105
  • arch安装桌面环境

    arch可以安装图形用户界面需要的软件包有:xorg-server,xorg-xinit,xfce4 xorg是linux桌面环境下的服务程序,xorg-init是启动xorg的客…

    Linux 2023年6月13日
    088
  • Redisson和spring-integration-redis 分布式锁

    Redisson 引入依赖 配置文件application.properties 配置类 配置文件application.properties(这种方式完全兼容SpringBoot…

    Linux 2023年5月28日
    087
  • 《拉钩课程 — 分布式技术原理与实战》学习笔记

    1、分布式系统是用来解决集中式架构的性能瓶颈问题,其核心是可扩展性,其特点包括:不出现单点故障、无状态等。依照 CAP 理论,分布式系统只能在 CP 和 AP 之间做取舍。 2、B…

    Linux 2023年6月16日
    0135
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球