K8s基本概念入门

 

序言

    没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念。

 

    k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用?

 

    k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。

 

 

k8s的全生命周期管理

    在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。

 

    1、创建集群:为什么要使用集群?

    有一句古话叫做三个臭皮匠,赛过诸葛亮,这就是创建集群的原因。。。

 

    使用集群,create cluster是为了掩盖底层的无能,在各种环境中,底层的硬件各不相同,有的是各种低廉的服务器,有的各种云环境,有的是各种vm,有的各种host machine,要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。

 

    创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。

 

640?wx_fmt=png

 

    集群看起来很牛,那么创建起来很复杂么?并不会,在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。

 

    在这边可以看到k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能;而node节点,主要是用来运行容器的节点,也就是运行服务的节点。

 

    其实集群都差不多,master用来控制,用来存储各种元数据,node节点是一个工作节点,真正来干活的;node节点定时与master进行通信,通过kubelet进程来汇报信息。

 

    创建了集群,我要怎么看信息?如下:

 

640?wx_fmt=png

 

    2、 部署应用

    使用集群的主要目标是啥?用来提供服务,让开发开发的应用程序能在集群上运行,从而需要让开发能运行一个应用来进行测试。

 

640?wx_fmt=png

    一条指令就能运行一个服务,有了image之后就是这么简单。所以,在开发完成程序之后,需要将程序打包成image,然后放到registry中,然后就能够运行应用了。

 

    在部署完成应用之后,就可以看到应用的名称,期望状态是运行一个pod,当前有一个pod,活动的也是一个,还有启动的时间,那么什么是pod呢?

 

640?wx_fmt=png

 

    在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。

 

640?wx_fmt=png

 

    那么有人会问,为什么要使用pod,为什么不能直接使用容器呢?使用pod,相当与一个逻辑主机,还记得创建一个vm,在vm上运行几个进程么,其实道理是一样的,pod的存在主要是让几个紧密连接的几个容器之间共享资源,例如ip地址,共享存储等信息。如果直接调度容器的话,那么几个容器可能运行在不同的主机上,这样就增加了系统的复杂性。

 

640?wx_fmt=png

    

    3、发布应用

    发布应用主要就是对外提供服务,可能会有人提出疑问,我都运行了服务,为什么还不能提供服务,这是因为在集群当中,创建的ip地址等资源,只有在同一个集群中才能访问,每个pod也有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。

 

640?wx_fmt=png

640?wx_fmt=png

    服务主要是用来提供外界访问的接口,服务可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个复杂均衡的vip,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡,在关联的时候,service和pod之间主要通过label来关联,也就是标签(-l表示为label)。

 

640?wx_fmt=png

    从而外界就可以访问此应用了,如下:

 

640?wx_fmt=png

    4、 扩容缩容

    在业务上线之后,碰到了双十一怎么办?扩容。。。万剑归宗,只要有一个pod,那么就可以产生无数个pod。。。。

 

640?wx_fmt=png

    过了双十一怎么办,缩容。。。

 

640?wx_fmt=png

    横向扩展的能力。。每次扩容缩容的时候,这种会不会觉得很方便,一句话的事儿。。不用创建vm,不用去部署中间件,不用去各种修改配置,这就是自动化。。。

 

    5、 更新

    有新版本了,我要发布。。。那么。。。

 

640?wx_fmt=png

    滚动更新。。。根据新的image创建一个pod,分配各种资源,然后自动负载均衡,删除老的pod,然后继续更新。。。。不会中断服务。。。

    更新错了怎么办,不怂,不会影响生产业务,回滚就好了。。。几秒钟的事儿。。。

 

后话

    k8s的基本入门,其实算是一种用户视角,只是用来演示如何使用k8s,怎么提高了生产力而已。

 

    在给客户演示的时候,为啥要选择k8s?主要就是如何提高了发布的效率,更新版本的效率,更方便更快捷的上线新版本。

 

    但是在运维关注的视角下,这些远远不够。。。master?存储了哪些元数据,存储在etcd中?如何来进行监控?在很多很多系统情况下,怎么来部署k8s,是一个项目一个k8s还是一个k8s多个项目?等等一系列的问题。。。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch、Logstash和Kiabana三个开源工具。

一 方案背景 通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。开源实时日志分析ELK平台能够完美的解决日志收集和日志检索、分析的问题,ELK…

力扣(LeetCode)292. Nim游戏 巴什博奕

你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数…

Spring Cloud应用监控与管理Actuator

由于我们把一个复杂高耦合的单体系统拆分成了多个小型服务,所以部署应用的数量在不断增长,造成维护复杂度大大提升。所以我们需要一套自动化的监控运维机制,这套运维机制可以不间断的获取每个服务应用的各种指标,并根据这些指标信…

第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题

Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。为了方便,点用 1,2,…,n 编号。 设 count(x,y) 表示点 x 到点 y 不同的路径数量(规定 count(x,x)0&#xff…

GC 调优(实战篇) - GC参考手册

说明: Allocation Rate, 翻译为分配速率, 而不是分配率; 因为不是百分比,而是单位时间内分配的量; 同理, Promotion Rate 翻译为 提升速率; 您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册Java中的垃圾收集 - GC参考手册GC 算法(基础篇) - GC参考手册GC 算法(实现篇)…

01 HTML

1.什么是HTML?(Hyper Text Markup Language:超文本标记语言)超文本:功能比普通文本更加强大标记语言:使用一组标签对内容进行描述的一门语言(它不是编程语言)2.语法和规范?HTML文件都是以.html或者.htm结尾的,建议使用…

图的四种最短路径算法

本文总结了图的几种最短路径算法的实现:深度或广度优先搜索算法,弗洛伊德算法,迪杰斯特拉算法,Bellman-Ford算法 1),深度或广度优先搜索算法(解决单源最短路径) 从起始结点开始访问所…

ZooKeeper集群与Leader选举

说说你对ZooKeeper集群与Leader选举的理解? ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。 高可用 为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper…

JVM初探:内存分配、GC原理与垃圾收集器

JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤: I. 怎样分配- JVM内存分配策略 对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在…

02 CSS

使用 table 进行布局存在缺陷,而一般的布局都会采用 DIVCSS 来进行布局。 Div 它是一个html 标签,一个块级元素(单独显示一行)。它单独使用没有任何意义,必须结合 CSS 来使用。它主要用于页面的布局。 Span 它是一个 html 标签,…

一致性哈希算法 应用

互联网创业中大部分人都是草根创业,这个时候没有强劲的服务器,也没有钱去买很昂贵的海量数据库。在这样严峻的条件下,一批又一批的创业者从创业中获得成 功,这个和当前的开源技术、海量数据架构有着必不可分的关系。比如我们使用m…

单个节点的缓存容量达到上限 Hash算法一致性

场景 单个节点的缓存容量达到上限,无法继续单点增加内存,如何解决? 单个节点支撑的QPS达到上限,如何解决? 初步方案 增加N个缓存节点,为了保证缓存数据的均匀,一般情况会采用对key值hash&…

java学习笔记11 (构造方法 this深探)

在开发中,经常需要在创建对象的同事明确对象对的属性值,比如一个person对象创建的时候就应该有name和age 等属性,那么如何做到在创建对象的同时给对象的属性值初始化值呢? 这里介绍构造方法 1 构造方法没有返回值类型,…

编程算法 - 将排序数组按绝对值大小排序 代码(java)

一个含有多个元素的数组&#xff0c;有多种排序方式。它可以升序排列&#xff0c;可以降序排列&#xff0c;也可以像我们以前章节说过的&#xff0c;以波浪形方式排序&#xff0c;现在我们要看到的一种是绝对值排序。对于数组A,绝对值排序满足以下条件&#xff1a;|A[i]| < …

数据结构09图

第七章 图 Graph 7.1 图的定义和术语 顶点 Vertex V 是顶点的有穷非空集合&#xff0c;顶点数 |V| n VR 两个顶点之间关系的集合&#xff0c;边数 |VR| e 有向图 Digraph <v, w> Arc v Tail / Inital node w Head / Terminal node 无向图 Undigraph <v, w> 必…

aspnetcore源码学习(一)

---恢复内容开始--- 笔者从事netcore相关项目开发已经大半年了&#xff0c;从netcore 1.0到现在3.0大概经过了3年左右的时间&#xff0c;记得netcore刚出来的时候国内相关的学习资料缺乏&#xff0c;限制于外语不大熟练的限制国外的相关书籍看起来相当吃力&#xff0c;于是在当…