kubernetes简介-这是一篇学习k8s必看的文章

你想要学习k8s吗?如果想要学习k8s就需要了解什么是k8s,这篇文章通过图文形式很好的解释了k8s到底是什么,正所谓众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。只有读到通俗易懂的文章你才不会迷路,下面开始跟着笔者进入到k8s学习之旅吧。

kubernetes基本介绍

一、kubernetes是什么?
Kubernetes是一个开源的容器管理平台,简称k8s,用于管理多个主机上的容器化应用程序,提供应用程序的快速部署,扩缩容,升级,维护和扩展等机制,利用service可以实现服务注册、发现以及四层负载均衡,通过ingress可以实现七层负载均衡等功能,Kubernetes这个名字源于希腊语,意思是舵手或飞行员,结合了社区中的最佳创意和实践,社区活跃度极高,幕后拥有大量技术人员在维护和支持。

二、kubernetes容器编排工具的优势
1.用户体验效果好,可以快速上手操作:
拥有良好的web ui界面,可以实现应用程序的快速部署,升级,扩容,缩容,回滚等。
2.根据节点资源的使用情况对pod进行合理的调度:
可以按照用户需要调度pod,例如保证Pod只在资源足够的节点上运行,会尝试把同一功能的pod分散在不同的节点上,还会尝试平衡不同节点的资源使用率等。
3.灵活部署:
支持多种平台,如公有云、私有云、混合云,VMware vSphere、VMware Workstation、虚拟机、物理机等。
4.完善的认证授权机制,自带审计功能:
可以对多用户做细化的授权管理,达到相互之间的操作完全隔离,互不影响,而且自身带有审计功能,可以对操作过程进行实时的日志记录,出现问题可以方便排查。
5.可扩展性强:
拥有强大的集群扩展能力,可以根据业务规模自动增加和缩减主机节点的数量,确保服务可以承受大量并发带来的压力,保证业务稳定运行。
6.拥有完善的灾备预警解决方案:
拥有多种灾备解决方案,支持备份和容灾,出现故障可以达到秒级切换,保证线上业务不受影响。
7.支持windows节点:
kubernetes支持将windows节点添加为工作节点并部署windows容器,确保不再受到具体的操作系统类型的影响,提升整体部署的效率。

三、应用场景实践
1.kubernetes在日志管理系统中的应用:在生产环境中,日志对于排查问题至关重要,我们需要有一个日志管理系统,如efk,kubernetes可以实现efk的快速部署,通过采用daemonset控制器部署fluentd组件,来收集节点和k8s集群的日志,通过kubernetes部署efk日志管理系统可实现如下功能:

(1)如果集群扩容,那么daemonset控制器会自动检测到新增加的node节点,就会在新的node节点上部署fluentd,完成日志收集,这就可以减少人为干预,提高工作效率,确保日志可以被正常收集;
(2)如果es数据量大,kubernetes可以实现集群中pod应用的水平扩展,完成应用的弹性扩容和收缩等操作。

2.kubernetes在DevOps场景下的应用:
DevOps是一套完整的运维开发流程,可以实现快速的构建、测试和发布软件,整个流程包括敏捷开发->持续集成->持续交付->持续部署->DevOps,通过 Kubernetes,我们可以实现容器在多个计算节点上的统一调度,可以将容器对接到持久存储、虚拟网络,还可以实现弹性伸缩等,提高了产品的迭代速度,在DevOps体系下加入k8s可以实现如下功能:

(1)多集群管理:可以根据客户需求对开发,测试,生产环境部署多套kubernetes集群,每个环境使用独立的物理资源,相互之间避免影响;
(2)多环境一致性:Kubernetes是基于docker的容器编排工具,因为容器的镜像是不可变的,所以镜像把 OS、业务代码、运行环境、程序库、目录结构都包含在内,镜像保存在我们的私有仓库,只要用户从我们提供的私有仓库拉取镜像,就能保证环境的一致性;
(3)持续集成,持续部署,持续交付:可以让产品快速迭代,自动部署,根据客户的要求达到持续交付的能力。

3.kubernetes在微服务中的应用:
service Mesh可以很好地保证未拆分的应用与已经拆分出来的微服务之间的互通和统一治理,不将业务代码与任何框架,平台或者服务绑定,管理微服务时,我们需要对这些微服务和它们的调用关系进行注册、为其分配资源、创建一定数量的节点副本、并发布到集群中去;同时还要为其配置好网络和负载均衡,使这些微服务能够被外部访问,在这些微服务的运行过程中,需要始终保持其可用性,一旦有节点出现问题,需要立即创建新的节点将其替换掉,运行过程中需要对这些微服务进行监控和日志收集;在负载发生变化的时候,还要能够迅速调整资源分配,kubernetes在微服务中可实现如下功能:

(1)服务发现:通过service可以实现服务发现,负载均衡,自修复,自动关联;
(2)提供统一的配置管理中心:对于配置中心,K8S提供了configMap,可以在容器启动的时候,将配置注入到环境变量或者Volume里面;
(3)弹性伸缩:通过控制器创建指定数量的pod副本,通过hpa可以实现pod应用的水平扩容和回收;
(4)通过jenkins实现持续集成/持续部署
(5)自动扩展:当Kubernetes集群的资源严重不足而导致Job排队等待时,可以很容易的添加一个Kubernetes Node到集群中,从而实现扩展。

四、kubernetes特点

  1. 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  2. 可扩展: 模块化, 插件化, 可挂载, 可组合
  3. 自愈: 自动布置,自动重启,自动复制,自动扩展。

五、kubernetes功能详细介绍

  1. 多租户的网络隔离:
    Kubernetes支持多种网络插件,如flannel,calico,canel等,每个插件都有独特的性能,可以分别适用于多种场景,我们可以利用calico的network policy(网络策略)解决k8s中的网络隔离,对于多租户场景,可以每一个用户一个名称空间,然后对这个名称空间设置网络隔离。
  2. 高可用:
    kubernetes中支持多种高可用解决方案,如keepalive+nginx,keepalived+haproxy等,
    可以使访问流量分发到不同的主机节点,减轻节点压力,如果某个节点出现故障,可以实现妙级切换,达到高可用,保证业务不中断;
  3. 用户数据的持久化存储:
    kubernetes支持多种持久化存储解决方案,保证数据可以得到很好的备份,降低用户数据丢失的风险,kubernetes中可使用的存储方案如下:
    (1)本地存储
    emptyDir,hostPath
    (2)网络连接类存储
    SAN/网络附加存储:iSCSI
    NAS/存储局域网络:nfs,cifs
    (3)分布式存储
    glusterfs,ceph/块级别的存储,cephfs/文件系统级别的存储
    (4)云存储:Azure Disk等
  4. 拥有多种更新回滚策略:
    通过管理kubernetes的控制器和service等,可以实现灰度发布,蓝绿部署,
    金丝雀发布等,达到业务的快速和回滚等操作,用以满足不同客户的不同升级需求。
  5. 弹性伸缩:
    根据访问的流量压力,可以实现pod的水平扩容和缩减,达到秒级扩容,让pod始终处于满足业务正常运行时所需的数量即可,避免了资源的浪费。
  6. Kubernetes可以满足很多运行环境中应用的需求,如下:
    进程协同,利用复合应用保证应用和容器一对一的模型
    存储系统挂载
    分发密钥
    应用健康检测
    应用实例复制
    水平自动扩展
    命名和发现
    负载均衡
    滚动更新
    资源监控
    日志访问
    自检和调试
    识别和认证
    这为PaaS提供了IaaS层的便利,提供了基础设施提供者间的可移植性。

六、kubernetes架构
kubernetes的物理架构是master/node模式,master一般是三个节点或者五个节点做高可用,根据集群规模来定,master高可用指的是对apiserver做高可用或者对master的物理节点做高可用,node可以有多个节点,专门用来部署应用的,架构图如下所示:

七、kubernetes核心组件
1.master节点组件
apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制,负责接收、解析、处理请求。
scheduler:调度器,负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。
kube-controller-manager:控制器,负责维护集群的状态,检查pod的健康状态,比如故障检测、自动扩展、滚动更新等一些操作。
docker:是一个容器引擎,用于运行容器。
etcd:etcd是一个key/value形式的键值存储,保存了整个kubernetes集群的状态,在kubernetes中使用etcd时,需要对etcd做备份,保证高可用,整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是:

(1)网络插件calico、对于其它网络插件也需要用到etcd存储网络的配置信息;
(2)kubernetes本身,包括各种对象的状态和元信息配置。

注:关于etcd API版本的说明:
网络插件操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API,所以在下面我们执行etcdctl的时候需要设置ETCDCTL_API环境变量,该变量默认值为2,表示使用v2版本的api,v3表示使用v3版本的api。

2.node节点(工作节点)组件
kubelet:负责与master节点的apiserver进行通信的,接收到客户的请求,进行创建Pod,管理Pod,启动pod等相关操作。
kube-proxy:k8s代理,是在群集中的每个节点上运行的网络代理,kube-proxy负责请求转发,一旦发现了某一个Service关联的Pod信息发生了改变(如IP、Port等),由Kube-Proxy就会把变化后的service转换成IPVS或IPtables规则中,完成对后端pod的负载均衡。
docker:是一个容器引擎,用于运行容器。

3.附加组件
coredns:k8s1.11之前使用的是kubedns,1.11之后才有coredns,coredns是一个DNS服务器,能够为 Kubernetes services提供 DNS记录
dashboard:k8s的web界面,通过这个界面可以对k8s资源进行操作
Ingress Controller :七层负载均衡控制器,可以创建nginx或者traefik这种七层负载应用,实现域名和https访问
prometheus+alertmanager+grafana:监控组件
efk:日志采集组件

看到这就要恭喜你了,说明你已经耐心的看完了整篇文章,对k8s有了基本了解,请继续关注后续文章,带你真正走进k8s的世界,没有人能随随便便成功,90%努力+10%天赋=100%成功!!

原文地址:https://blog.51cto.com/12974849/2476138

时间: 2024-11-10 19:55:36

kubernetes简介-这是一篇学习k8s必看的文章的相关文章

学习推荐系统必看的10篇RecSys论文,收藏!(官方推荐)

导读:深入学习任何一门学科,都离不开对前沿知识的了解.对于推荐系统学习者来说,一年一度的RecSys大会就是了解学术界与工业界研究热点的最佳平台.鉴于此,在这篇文章中,我们把过往的RecSys论文整理成一个清单,列出了大家学习推荐系统必看的10篇RecSys论文. 下边这5篇是根据ACM数字图书馆中的阅读量整理出来的.在已发表的925篇论文中,这五篇论文是阅读量最高的.这五篇论文约占所有RecSys会议论文引用的12%! · Performance of recommender algorith

学习Linux(必看经典)牛人40天精通Linux运维的学习方法

学习Linux(必看经典)牛人40天精通Linux运维的学习方法 简介:linux运维人才是企业目前急需的技术人才之一,从从事linux运维的工作,本系列整理的视频课程是你不可或缺的要学习的内容,学习时,建议做好笔记,画好图,勤加练习,多和同学交流讨论,则可成大器.  Linux职业路线图 企业Linux高薪运维实战必会精品学习路线图 http://edu.51cto.com/roadmap/view/id-62.html 简介:如果你,认真学习完,并掌握了本课程,即可掌握企业的实战运维的基本应

嵌入式初学者学习嵌入式必看必看书籍

嵌入式初学者学习嵌入式必看必看书籍列表,有电子档的同学可以共享出来,谢谢 Linux基础  1.<Linux与Unix Shell 编程指南>  2.<嵌入式Linux应用程序开发详解> C语言基础  1. The C programming language <C程序设计语言>  2. Pointers on C    <C和指针>  3. C traps and pitfalls   <C陷阱与缺陷>  4. Expert C Lanuage

学习ios(必看经典)牛人40天精通iOS开发的学习方法

学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲解.也适合想提升技能的已从事iOS开发的工作人员以最短时间内提升技能的从业者. 目标 通过本系列课程的学习,希望使一个对iOS开发感兴趣,想从事iOS开发的学员,成为一名真正iOS开发人员,iOS从业者,iOS技术大牛,最重要的是学会解决开发中遇到困难的方法. 建议 建议学员,尤其是初学者,一定要打

学习Linux必看的命令(一)

学习Linux必看的命令(一) 一:什么是Linux ? Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心.Linux命令在系统中有两种类型:内置shell命令和Linux命令. ? 在Linux操作系统中,有一点要注意的是,linux的命令(也包括文件名等等)对大小写是有要求的,如果输入的命令大小写不对的话,系统是不会做出你期望的响应. 二:Linux命令行的格

优秀的编程风格(Java篇)——高薪必看

今天突发奇想,对编码习惯和编程风格很感兴趣,于是乎,找了一下关于编程风格(Java篇)的资料,希望对爱好编码或者开始学习编码的同学有帮助! 来自<The Elements of Java Style>-<Java编程风格>一书,值得一读的书籍,会让你在细节上节省很多时间,合作之间更加愉快! 好处不多说了,但是有几个原则如下: 1.保持原有风格 2.坚持最小惊奇原则 3.第一次就做对 4.记录所有非规范行为 格式规范: 1.缩进嵌套的代码:在每个代码块和嵌套中加入缩进,缩进代码,加强

学习Python必看入门教程

Python是一种很美丽的语言,现在越来越多的人想要入门Python,所以这里给大家总结了入门Python必知的知识. 什么是Python? Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等. 那Python是一种什么语言? 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算

K8s--01 Kubernetes简介

目录 Kubernetes简介 1. 什么是Kubernetes 2. Kubernetes发展史 3. Kubernetes 特点 4.Kubernetes核心组件 Kubernetes简介 1. 什么是Kubernetes Kubernetes (通常称为K8s,K8s是将8个字母"ubernete"替换为"8"的缩写) 是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和运行容器,提供容器自动部署.扩展和管理的开源平台.满足了应用程序在生产环境

0807&mdash;MapReduce的第一篇学习笔记

http://blog.csdn.net/v_july_v/article/details/6637014 1 2 3 4 0807—MapReduce的第一篇学习笔记