广告
返回顶部
首页 > 资讯 > 数据库 >K8s该快速入门
  • 810
分享到

K8s该快速入门

2024-04-02 19:04:59 810人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关k8s该快速入门,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过一个业务发展的故事,分享 K8s 出现的原因以及它的运作方式。

这篇文章将为大家详细讲解有关k8s该快速入门,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

通过一个业务发展的故事,分享 K8s 出现的原因以及它的运作方式。适合所有技术开发人员,尤其是前端开发者。

0 序

去年下半年,我做了一次转岗,开始接触到 kubernetes,虽然对 K8s  的认识还非常的不全面,但是非常想分享一下自己的一些收获,希望通过本文能够帮助大家对 K8s  有一个入门的了解。文中有不对的地方,还请各位老司机们帮助指点纠正。

其实介绍 K8s 的文章,网上一搜一大把,而且 kubernetes 官方文档也写的非常友好,所以直接上来讲  K8s,我觉得我是远远不如网上的一些文章讲的好的,所以我想换一个角度,通过一个业务发展的故事,来讲一下 K8s 是怎么出现的,它又是如何运作的。

这里适合所有搞技术的同学,特别是前端的同学,因为前端工程化近几年发展的非常迅猛,K8s  目前解决的问题和发展的形式,我相信假以时日也会出现在前端领域,毕竟不同领域的工程化发展其实是殊途同归的。

1 故事开始

随着中国老百姓生活水平的不断提高,家家户户都有了小汽车,小王预计 5 年后,汽车报废业务将会迅速发展,而且国家在 19  年也出台了新政策《报废机动车回收管理办法》,取消了汽车报废回收的“特种行业”属性,将开放市场化的竞争。

小王觉得这是一个创业的好机会,于是找到了我和几个志同道合的小伙伴开始了创业,决定做一个叫“淘车网”的平台。

2 故事发展

淘车网一开始是一个 all in one 的 Java  应用,部署在一台物理机上(小王同学,现在都啥时候了,你需要了解一下阿里云),随着业务的发展,发现机器已经快扛不住了,就赶紧对服务器的规格做了升级,从  64C256G 一路升到了 160C1920G,虽然成本高了点,但是系统至少没出问题。

业务发展了一年后,160C1920G 也扛不住了,不得不进行服务化拆分、分布式改造了。为了解决分布式改造过程中的各种问题,引入了一系列的中间件,类似  hsf、tddl、tair、diamond、metaq 这些,在艰难的业务架构改造后,我们成功的把 all in one 的 Java  应用拆分成了多个小应用,重走了一遍阿里当年中间件发展和去 ioE 的道路。

分布式改完了后,我们管理的服务器又多起来了,不同批次的服务器,硬件规格、操作系统版本等等都不尽相同,于是应用运行和运维的各种问题就出来了。

还好有虚拟机技术,把底层各种硬件和软件的差异,通过虚拟化技术都给屏蔽掉啦,虽然硬件不同,但是对于应用来说,看到的都是一样的啦,但是虚拟化又产生了很大的性能开销。

恩,不如我们使用 Docker 吧,因为 docker 基于 cgroup 等 linux  的原生技术,在屏蔽底层差异的同时,也没有明显的性能影响,真是一个好东西。而且基于 docker 镜像的业务交付,使得我们 CI/CD  的运作也非常的容易啦。

不过随着 docker 容器数量的增长,我们又不得不面对新的难题,就是大量的 docker  如何调度、通信呢?毕竟随着业务发展,淘车网已经不是一个小公司了,我们运行着几千个 docker 容器,并且按照现在的业务发展趋势,马上就要破万了。

不行,我们一定要做一个系统,这个系统能够自动的管理服务器(比如是不是健康啊,剩下多少内存和 CPU 可以使用啊等等)、然后根据容器声明所需的 CPU 和  memory 选择最优的服务器进行容器的创建,并且还要能够控制容器和容器之间的通信(比如说某个部门的内部服务,当然不希望其他部门的容器也能够访问)。

我们给这个系统取一个名字,就叫做容器编排系统吧。

3 容器编排系统

那么问题来了,面对一堆的服务器,我们要怎么实现一个容器编排系统呢?

先假设我们已经实现了这个编排系统,那么我们的服务器就会有一部分会用来运行这个编排系统,剩下的服务器用来运行我们的业务容器,我们把运行编排系统的服务器叫做  master 节点,把运行业务容器的服务器叫做 worker 节点。

既然 master 节点负责管理服务器集群,那它就必须要提供出相关的管理接口,一个是方便运维管理员对集群进行相关的操作,另一个就是负责和 worker  节点进行交互,比如进行资源的分配、网络的管理等。

我们把 master 上提供管理接口的组件称为 kube apiserver,对应的还需要两个用于和 api server  交互的客户端,一个是提供给集群的运维管理员使用的,我们称为 kubectl;一个是提供给 worker 节点使用的,我们称为 kubelet。

现在集群的运维管理员、master 节点、worker 节点已经可以彼此间进行交互了,比如说运维管理员通过 kubectl 向 master  下发一个命令,“用淘车网用户中心 2.0 版本的镜像创建 1000个 容器”,master 收到了这个请求之后,就要根据集群里面 worker  节点的资源信息进行一个计算调度,算出来这 1000 个容器应该在哪些 worker 上进行创建,然后把创建指令下发到相应的 worker  上。我们把这个负责调度的组件称为 kube scheduler。

那 master 又是怎么知道各个 worker 上的资源消耗和容器的运行情况的呢?这个简单,我们可以通过 worker 上的 kubelet  周期性的主动上报节点资源和容器运行的情况,然后 master 把这个数据存储下来,后面就可以用来做调度和容器的管理使用了。至于数据怎么存储,我们可以写文件、写  db 等等,不过有一个开源的存储系统叫 etcd,满足我们对于数据一致性和高可用的要求,同时安装简单、性能又好,我们就选 etcd 吧。

现在我们已经有了所有 worker 节点和容器运行的数据,我们可以做的事情就非常多了。比如前面所说的,我们使用淘车网用户中心 2.0 版本的镜像创建了  1000 个容器,其中有5个容器都是运行在 A 这个 worker 节点上,那如果 A 这个节点突然出现了硬件故障,导致节点不可用了,这个时候 master  就要把 A 从可用 worker 节点中摘除掉,并且还需要把原先运行在这个节点上的 5 个用户中心 2.0 的容器重新调度到其他可用的 worker  节点上,使得我们用户中心 2.0 的容器数量能够重新恢复到 1000  个,并且还需要对相关的容器进行网络通信配置的调整,使得容器间的通信还是正常的。我们把这一系列的组件称为控制器,比如节点控制器、副本控制器、端点控制器等等,并且为这些控制器提供一个统一的运行组件,称为控制器管理器(kube-controller-manager)。

那 master 又该如何实现和管理容器间的网络通信呢?首先每个容器肯定需要有一个唯一的 ip 地址,通过这个 ip  地址就可以互相通信了,但是彼此通信的容器有可能运行在不同的 worker 节点上,这就涉及到 worker 节点间的网络通信,因此每个 worker  节点还需要有一个唯一的 ip 地址,但是容器间通信都是通过容器 ip 进行的,容器并不感知 worker 节点的 ip 地址,因此在 worker  节点上需要有容器 ip 的路由转发信息,我们可以通过 iptables、ipvs 等技术来实现。那如果容器 ip 变化了,或者容器数量变化了,这个时候相关的  iptables、ipvs 的配置就需要跟着进行调整,所以在 worker 节点上我们需要一个专门负责监听并调整路由转发配置的组件,我们把这个组件称为 kube  proxy(此处为了便于理解,就不展开引入 Service 的内容了)。

我们已经解决了容器间的网络通信,但是在我们编码的时候,我们希望的是通过域名或者 vip 等方式来调用一个服务,而不是通过一个可能随时会变化的容器  ip。因此我们需要在容器 ip 之上在封装出一个 Service 的概念,这个 Service 可以是一个集群的  vip,也可以是一个集群的域名,为此我们还需要一个集群内部的 DNS 域名解析服务。

另外虽然我们已经有了 kubectl,可以很愉快的和 master 进行交互了,但是如果有一个 WEB  的管理界面,这肯定是一个更好的事情。此处之外,我们可能还希望看到容器的资源信息、整个集群相关组件的运行日志等等。

像 DNS、web 管理界面、容器资源信息、集群日志,这些可以改善我们使用体验的组件,我们统称为插件

至此,我们已经成功构建了一个容器编排系统,我们来简单总结下上面提到的各个组成部分:

  • Master 组件:kube-apiserver、kube-scheduler、etcd、kube-controller-manager

  • node 组件:kubelet、kube-proxy

  • 插件:DNS、用户界面 Web UI、容器资源监控、集群日志


K8s该快速入门

这些也正是 K8s 中的重要组成部分。当然 K8s  作为一个生产级别的容器编排系统,这里提到的每一个组件都可以拿出来单独讲上很多内容,本文只是一个简单入门,不再展开讲解。

4 Serverless 的容器编排系统

虽然我们已经成功实现了一个容器编排系统,并且也用的很舒服,但是淘车网的王总裁(已经不是当年的小王了)觉得公司花在这个编排系统上的研发和运维成本实在是太高了,想要缩减这方面的成本。王总想着有没有一个编排系统,能够让员工专注到业务开发上,而不需要关注到集群的运维管理上,王总和技术圈的同学了解了一下,发现  serverless 的理念和他的想法不谋而合,于是就在想啥时候出一个 Serverless 的容器编排系统就好啦。

关于K8s该快速入门就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: K8s该快速入门

本文链接: https://www.lsjlt.com/news/68608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • K8s该快速入门
    这篇文章将为大家详细讲解有关K8s该快速入门,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过一个业务发展的故事,分享 K8s 出现的原因以及它的运作方式。...
    99+
    2022-10-19
  • SpringBoot快速入门
    文章目录 1,SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 `Controller`1.1.1.3 启动服务器...
    99+
    2023-10-27
    spring boot spring java
  • ClickHouse 快速入门
            ClickHouse 是什么ClickHouse 是一个开源的面向联机分析处理(OLAP, On-L...
    99+
    2022-10-18
  • mysqlsla快速入门
    1、什么是mysqlsla? 简单的说就是分析mysql log的工具,我主要是用他来分析下mysql slow log。 2、下载 http://hackmysql.com/mysqlsl...
    99+
    2022-10-18
  • JDBC快速入门
    JDBC快速入门   详解 1.0DriverManager 功能1       功能2 2.0 connection对象   3.0 statement对象     4.0 ResultSet 遍历结果集的一个案例 ...
    99+
    2020-11-18
    JDBC快速入门
  • python 快速入门
         导入 #from dir1 import test #import dir1.test as test 列表推到: b3 =[x for x in xing if x in ming] print(b3)  li ...
    99+
    2023-01-31
    入门 快速 python
  • Python3快速入门
    Python3快速入门Python3快速入门(一)——Python简介https://blog.51cto.com/9291927/2385592Python3快速入门(二)——Python3基础https://blog.51cto.com...
    99+
    2023-01-31
    入门 快速
  • JavaScript快速入门
    目录 1.概述 2.引入方式 3.调试 4.基础语法 4.1.变量 4.2.常量 4.3.运算符 ​编辑 4.4.流程控制 4.4.1.顺序 4.4.2.判断 4.4.3.循环 4.5.对象 4.6.数组 4.7.函数 5.高级特性 1...
    99+
    2023-10-28
    javascript 前端 开发语言 原力计划
  • JDBC | JDBC快速入门
    👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBoo...
    99+
    2023-09-20
    1024程序员节 java mysql
  • FastAPI--快速入门(1)
    FastAPI 是一个高性能 Web 框架,用于构建 API。主要特性:快速:非常高的性能,与 NodeJS 和 Go 相当快速编码:将功能开发速度提高约 200% 至 300%更少的错误:减少约 40% 的人为错误直观:强大的编辑器支持,...
    99+
    2023-01-31
    入门 快速 FastAPI
  • SendPkt快速入门[Python]
    SendPkt快速入门作者:gashero电邮:harry.python@gmail.com原文地址:http://gashero.yeax.com/p=26项目主页:http://sendpkt.googlecode.com日期:2007...
    99+
    2023-01-31
    入门 快速 SendPkt
  • Oracle快速入门_day01
    公司目前项目使用到了Oracle数据库 本人之前接触不多 计划4天 将Oracle数据库 快速入门 并结合开发使用,Oracle与MySql语法相似度很高,要一起学的小伙伴压力不要太大 Oracle数据库简介 Oracle Database...
    99+
    2016-05-18
    Oracle快速入门_day01
  • python3.x 快速入门
    Edit the > 2018/6/15 11:26:53 1认识Python 人生苦短,我用python - 优雅,明确,简单 是python设计哲学 - python的设计目标之一, 是让代码具备高度的可阅读性 ...
    99+
    2023-01-31
    入门 快速
  • Python快速入门体验
    Python快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Conda安装2.1 Conda介绍2.1.1 Conda简介2.1.2 Conda、Anaconda及Mini...
    99+
    2023-09-12
    人工智能 大数据 python 开发语言
  • CodeReview之reviewboard快速入门
    CodeReview是一个用于进行代码评审的工具,而Reviewboard是CodeReview的一个开源实现。下面是Reviewb...
    99+
    2023-10-08
    CodeReview
  • 如何快速入门HTML
    这篇文章主要讲解了“如何快速入门HTML”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速入门HTML”吧!html网页语法结构如下:   <h...
    99+
    2022-10-19
  • Python3快速入门(四)——Pyth
    一、Python包简介 1、包 Python中使用包管理模块,包通常对应一个目录,必须在目录下创建一个init.py模块,init.py模块的模块名称即为包名,Python才会将目录解析为包。init.py文件内可以定义初始化包的内容,导...
    99+
    2023-01-31
    入门 快速 Pyth
  • Python3快速入门(三)——Pyth
    一、Python3标准数据类型 Python3 中有六种标准数据类型:A、Number(数字)B、String(字符串)C、List(列表)D、Tuple(元组)E、Set(集合)F、Dictionary(字典)Python3 的六种标准...
    99+
    2023-01-31
    入门 快速 Pyth
  • Python3快速入门(二)——Pyth
    一、Python3语法基础 1、Python3编码 默认情况下,Python 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串,可以为Python源码文件指定不同的编码,如下:# -*- coding: utf-8 -...
    99+
    2023-01-31
    入门 快速 Pyth
  • Python3快速入门(五)——Pyth
    一、函数定义 1、函数定义 Python 定义函数使用 def 关键字,一般格式如下: def function_name(parameter_list): pass 默认情况下,参数值和参数名称按函数声明中定义的顺序进行匹配。函...
    99+
    2023-01-31
    入门 快速 Pyth
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作