当前位置: 首页 > article >正文

【高级部署】-Kubernetes K8S理论篇

前言:2019年已经过去了,在2019年阿里号称双11全面上云,为什么要上云?这你得问马云,开个玩笑...

因为k8s的加持,让云发挥了更大价值,k8s的提供的弹性伸缩,使得云资源得到充分利用,目前全球三大云全部都支持k8s,加上k8s本身就是谷歌的亲儿子,在这样的背景下,k8s越来越流行,作为一名开发,学习k8s迫在眉睫,所以我开始上路了,你呢?


1.什么是k8s?

了解k8s是什么之前,需要先了解docker,docker我就不多说了,没基础的自己恶补。如果说是微服务让docker火了,那么docker则让k8s火了一把,k8s是由谷歌开源的一款容器集群管理系统,可以实现容器的自动化部署,自动扩容,缩容,维护,监控等功能。

在大型的系统中,背后可能有成千上万个实例在运行,假设这些实例都是运行在docker容器中,实际上也几乎都是,这么多容器势必会有一些容器在某些时间段是空闲的,也有些是挂掉的,如果依靠人肉运维去监控和管理这些容器,枯燥又烧钱。在像双11这样的场景下,由于临时增加了很多实例来支撑超大流量,但双11过后这些实例资源就空置了,造成大量资源浪费,还有一些秒杀场景,可能在极短时间内涌入大量流量,对服务器造成冲击,有没有办法能在大流量的时候自动增加一些实例,在流量减少后自动下掉一些实例,当然有,它就是k8s,它的出现让阿里云更具有价值了,阿里云有丰富的服务器资源,支撑着众多企业的服务,在大部分场景下,不可能所有企业都在同一时刻流量洪峰,k8s可以让这些企业来共享这服务器资源,以弹性的方式伸缩,实现共赢,可以类比医疗保险。

2.k8s能做什么?

通过k8s你可以:快速部署服务,快速扩展应用,无缝对接新应用,负载均衡,监控,自动伸缩,节省资源,优化硬件资源使用...总之应有尽有。

3.k8s架构

引用一张k8s官方的图,虽然比较不清晰,也比较难看懂,不过没关系,可以继续先往下看,看完组件再来看这张图就比较清晰了

 

4.k8s组件

k8s是基于主从架构的,其组件主要分为两大类,一类是Master组件,一类是Node节点组件,其余组件单独介绍,因为非常重要!

Master组件包括:kube-apiserver,ETCD,kube-controller-manager,cloud-controller-manager,kube-scheduler,addons,DNS,用户界面,容器资源监测,Cluster-level Logging.

Node组件包括: kubelet,kube-proxy,docker,RKT,supervisord,fluentd

组件有点多,虽然多k8s而言,以上组件几乎都是重要组件,但对开发同学而言,仅需要重点掌握其中几个组件,其它组件简单了解即可,下面我将核心组件重点解释,并且加粗,非核心组件,简单了解,一笔带过~

 

Master组件:

 

kube-apiserver: 用于暴露k8s API,任何资源的请求/调用操作都是通过kube-apiserver提供的接口进行的.

ETCD:etcd是k8s默认的存储系统,存储所有集群数据,使用时需要为etcd数据提供备份计划.

kube-controller-manager:运行管理控制器,是集群中用来处理常规任务的后台线程.

cloud-controller-manager:云控制器是负责与底层云提供商的平台交互.

kube-scheduler:k8s的调度器,监视新创建但没有分配到Node的pod,为pod选择一个Node.

addons:插件,是实现集群pod和service功能的.

DNS:虽然不严格要求使用插件,但k8s集群都应该具有集群DNS,集群DNS是一个DNS服务器,能够为k8s service提供DNS记录.

用户界面:kube-ui,提供集群基础信息查看,是经常要被开发同学用到的.

容器资源监测:提供浏览器UI监控数据,也是经常要被用到的.

cluster-level logging:负责保存容器日志,查看/搜索容器日志.

 

Node组件:

 

kubelet:是主要的节点代理,它会监视已分配给节点的pod

kube-proxy:通过主机上维护网络规则并执行连接转发来实现k8s服务抽象.

docker:用于运行容器

RKT:作为docker工具的替代方案

supervisord:轻量级的监控系统,保障kubelet和docker运行

fluentd:是一个守护进程,提供cluster-level logging

 

5.核心概念

pod:pod是k8s中创建或部署的最小基本单位,一个Pod代表集群中正在运行的一个进程,一个pod可以由一个或多个容器组成,这些容器共同部署在一个节点上成为一个单元,一个Pod具有一个Ip,该ip在容器之间共享.

node:node节点是部署Pod的物理机(或虚拟机)

NameSpace:可以将物理上的cluster逻辑上划分成多个cluster,每个cluster就是一个Namespace,不同namespa里的资源是完全隔离的.

Label:标签,可以为pod打上Label标签,Label是以key-value形式存储的,打上标签之后,就可以通过命令快速筛选出同类pod

Annotation:与Label类似,也是以key-value形式存储的,主要用来记录一些信息,如发布的版本号,负责人之类的.

service:逻辑上的一组pod,service是对访问Pod策略的抽象层,可以把相同的pod划分进同一个service中,对外提供服务.因为Pod具有伸缩性,pod重启Ip发生改变后服务如何找到对应pod? 答案就是service,它通过label找到pod组,对调用方是无感知的,因为service的ip是固定的,service会在几个Pod中做负载均衡.

controller:k8s通过controller来管理Pod,controller里定义里Pod的部署特性,k8s提供了多种controller,包括deployment,replicaset,daemonset,job...来满足多种业务场景.

deployment:最常用的controller,可以管理Pod的多个副本,并确保pod按照期望的状态运行.

 

至此,k8s的基本概念就梳理完了,有了这些理论,再回头看3中的架构图,就比较容易懂了,看懂架构图之后,也就可以进入实战篇了,我会持续更新,实战k8s以及将k8s和rancher结合,届时会把链接附在这里.

由于本人水平有限,文中若有不正之处望留言指正.

参考文献:https://www.kubernetes.org.cn/doc-30 (k8s中文社区)

http://www.lryc.cn/news/2415758.html

相关文章:

  • JavaScript:求学生成绩案例及错误分析。
  • linux就该这么学pdf+下载链接
  • 在Esri官网申请60天试用版 ArcGIS Desktop(过期)
  • informix的一些函数,时间
  • H.266资料网站
  • 热点博客,技术历程和技术积累 (个人)
  • 人脸识别方案选择
  • Web前端学习路线,超全面整理「HTML+CSS+JS+Ajax+jQuery+VUE
  • 网络视频会议 OpenMeetings 介绍 运行 开发
  • 【STM32】嵌入式(片上)Flash的读写(以STM32F407ZGT6为例,HAL库)
  • VMware vCenter/vSphere/vSan/Esxi/7.0 lic许可
  • godaddy又支持支付宝支付了。今天backorder了一个域名,尝试用支付宝支付。居然可以支付了。当时的汇率结算。...
  • java快速培训
  • Java中常用的代码汇总
  • 文本框限制只能输入数字、汉子、字母的方法
  • ShopNC多用户商城系统,B2B2C企业级电商平台
  • 果然,ChatGPT还是被拿去搞黄色了...
  • 奥特曼在银行里下象棋的梗
  • 空指针解引用(nullpointer dereference)_空指针解引用分析
  • SAP MM 存储条件 - Room Temperature Vs Ambient
  • 启动IIS 发生意外错误0x8ffe2740
  • 如何零基础制作一款自己的游戏!(一)
  • 用html画一颗圣诞树
  • MapInfo7.0序列号和许可文件
  • 用NetBeans进行JavaFX 开发(一) 入门篇
  • 微信小程序开发中的用户数据统计与分析
  • IOS15升级教程
  • CRMEB商城系统营销功能解读——秒杀功能
  • 2014台州学院ACM集训队寒假练习赛1
  • Sanic学习笔记-搭建简单WEB基础框架