Java进阶之路:看完这篇Kubernetes的深入分析后,我完全掌握了这门技术!
Posted java构架师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java进阶之路:看完这篇Kubernetes的深入分析后,我完全掌握了这门技术!相关的知识,希望对你有一定的参考价值。
什么是Kubernetes?
Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。CNCF于2017年宣布首批Kubernetes认证服务提供商(KCSPs),包含IBM、MIRANTIS、华为、inwinSTACK迎栈科技等服务商。
背景
- 2014年 docker容器编排工具,立项
- 2015年7月 发布kubernetes 1.0, 加入cncf
- 2016年,kubernetes干掉两个对手,docker swarm,mesos 1.2版
- 2017年
- 2018年 k8s 从cncf基金会 毕业
- 2019年: 1.13、1.14 、1.15 cncf cloud native compute foundation
- kubernetes (k8s):希腊语舵手,领航 容器编排领域,谷歌16年容器使用经验,borg容器管理平台,使用golang重构borg,kubernetes
作用?
①自愈:重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被终止,并且在容器准备好服务之前不会把其向客户端广播。
②弹性伸缩:通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量。
③服务的自动发现和负载均衡:不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes为容器提供了自己的IP地址和一组容器的单个DNS名称,并可以在它们之间进行负载均衡。
④滚动升级和一键回滚:Kubernetes逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。
惊喜在后面,请继续看完
K8S实现了什么?
从架构设计层面,我们关注的可用性,伸缩性都可以结合k8s得到很好的解决,如果你想使用微服务架构,搭配k8s,真的是完美,再从部署运维层面,服务部署,服务监控,应用扩容和故障处理,k8s都提供了很好的解决方案。
具体来说,主要包括以下几点:
1/服务发现与调度
2/负载均衡
3/服务自愈
4/服务弹性扩容
5/横向扩容
6/存储端挂载
总而言之,k8s可以使我们应用的部署和运维更加方便。
我们再来看下k8s的架构:
k8s集群由Master节点和Node(Worker)节点组成。
###Master节点
Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。在Master上主要运行着:
- Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
- Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。
- etcd:保存整个集群的状态。
Node节点
除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。在Node上主要运行着:
- kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
- kube-proxy:实现service的通信与负载均衡
- docker(Docker Engine):Docker引擎,负责本机的容器创建和管理
为什么需要Kubernetes?
真正的生产型应用会涉及多个容器。这些容器必须跨多个服务器主机进行部署。容器安全性需要多层部署,因此可能会比较复杂。但 Kubernetes 有助于解决这一问题。Kubernetes 可以提供所需的编排和管理功能,以便您针对这些工作负载大规模部署容器。借助 Kubernetes 编排功能,您可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。有了 Kubernetes,您便可切实采取一些措施来提高 IT 安全性。
Kubernetes 还需要互联网、存储、安全性、遥测和其他服务整合,以提供全面的容器基础架构。
当然,这取决于您如何在您的环境中使用容器。Linux 容器中的基本应用将它们视作高效、快速的虚拟机。一旦把它部署到生产环境或扩展为多个应用,您显然需要许多托管在相同位置的容器来协同提供各种服务。随着这些容器的累积,您运行环境中容器的数量会急剧增加,复杂度也随之增长。
Kubernetes 通过将容器分类组成"容器集" (pod) ,解决了容器增殖带来的许多常见问题容器集为分组容器增加了一个抽象层,可帮助您调用工作负载,并为这些容器提供所需的联网和存储等服务。Kubernetes 的其它部分可帮助您在这些容器集之间达成负载平衡,同时确保运行正确数量的容器,充分支持您的工作负载。
如果能正确实施 Kubernetes,再辅以其它开源项目(例如 Atomic 注册表、Open vSwitch、heapster、OAuth 以及 SELinux),您就能够轻松编排容器基础架构的各个部分。
如果你对于K8S不是很熟悉,或者正在学习中,那么这个学习指南对不懂K8S的人来说,是很有帮助的!从理论到实践讲解得非常详细。想要这份学习指南的小伙伴可以在文末获取!
理论篇(部分内容截图)
实践篇(部分内容截图)
结束语
基本上来说,K8S集群的控制器,其实扮演着集群大脑的角色。有了控制器,K8S集群才有机会摆脱机械和被动,变成一个自动、智能、有大用的系统。
通过这篇文章,大家应该对K8S集群服务的概念以及实现,有了更深层次的认识。我们基本上需要把握三个要点。一、服务本质上是负载均衡;二、服务负载均衡的实现采用了与服务网格类似的Sidecar的模式,而不是LVS类型的独占模式;三、kube-proxy本质上是一个集群控制器。除此之外,我们思考了过滤器框架的设计,并在此基础上,理解使用iptables实现的服务负载均衡的原理。
如果你还在因为学习而没有方向,这份学习指南应该足以帮助到你了!有需要这份已经整理成完整文档的K8S学习指南的小伙伴只需你扫描👇Q群二维码找群里助理小姐姐领取即可!
添加时请备注 ‘CSDN+K8S’ 方便助理查找资料。
以上是关于Java进阶之路:看完这篇Kubernetes的深入分析后,我完全掌握了这门技术!的主要内容,如果未能解决你的问题,请参考以下文章
致运维:关于 Kubernetes 的架构,看完这篇你就明白了
蔚来一面:HashMap 的 hash 方法原理是什么?看完这篇还不懂HashMap的hash原理,那我要哭了~