前言
作为一名网络工程的大学生,在前段时间学习了云计算和大数据的相关技术后,我迫切的想要获得更多的自动化持续交互的相关技术。目前非常火热的Kubernetes技术简称(K8s)是由谷歌开源的Docker容器集群管理系统,功能非常强大,也激起了我浓厚的学习兴趣。
以后我会将这一系列关于Kubernetes的技术文章和学习心得一并分享出来,供大家一块学习和交流。
1. Kubernetes是什么
首先, 我们在学习Kubernetes之前一定要先了解一下什么是Kubernetes。
- 第一,它是一个全新的基于容器技术的分布式架构领先方案,并且是由谷歌保密十几年之久的秘密武器-Borg的一个开源版本。
- Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自
动化,以及跨多个数据中心的资源利用率的最大化。 - 然后,Kubernetes是一个开放的开发平台。与J2EE不同,它不局限于
任何一种语言
,没有限定任何编程接口,所以不论是用Java、Go、C++还是用Python编写的服务,都可以被映射为Kubernetes的Service(服务),并通过标准的TCP通信协议进行交互。 - 此外,Kubernetes平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。
- 最后,Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
- 同时,Kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。
2. 为什么要用Kubernetes
使用Kubernetes的理由很多,最重要的理由是,IT行业从来都是由新技术驱动的
。而且,Docker这门容器化技术已经被很多公司采用,从单机走向集群已成为必然,云计算的蓬勃发展正在加速这一进程。Kubernetes作为当前被业界广泛认可和看好的基于Docker的大规模容器化分布式系统解决方案,得到了以谷歌为首的IT巨头们的大力宣传和持续推进。
关于Docker相关的知识可以移步我的Docker学习专栏
2.1 Kubernetes的优点
- 可以“轻装上阵”地开发复杂系统。以前需要很多人(其中不乏技术达人)一起分工协作才能设计、实现和运维的分布式系统,在采用Kubernetes解决方案之后,只需一个精悍的小团队就能轻松应对。
- 全面拥抱微服务架构。微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务可能由多个实例副本支撑,副本的数量可以随着系统的负荷变化进行调整。
- 随时随地将系统整体“搬迁”到公有云上。
- Kubernetes内在的服务弹性扩容机制可以让我们轻松应对突发流量。
- Kubernetes系统架构超强的横向扩容能力很强
3. Kubernetes的一些基本知识
Kubernetes的架构和Borg的架构很相似。
Borg架构:
Kubernetes架构:
Service:
在Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征。
- 拥有唯一指定的名称(比如mysql-server)。
- 拥有一个虚拟IP(Cluster IP、Service IP或VIP)和端口号。
- 能够提供某种远程服务能力。
- 被映射到提供这种服务能力的一组容器应用上。
Service的服务进程目前都基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的特定TCP Server进程。
虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)
访问点,但Kubernetes能够让我们通过Service(虚拟Cluster IP +Service Port)
连接到指定的Service。有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。更重要的是,这个Service本身一旦创建就不再变化,这意味着我们再也不用为Kubernetes集群中服务的IP地址变来变去的问题而头疼了。
Pod:
容器给我们提供了强大的隔离功能,所以有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程都包装到相应的Pod中,使其成为在Pod中运行的一个容器(Container)
Pod运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是一个虚拟机,通常在一个节点上运行几百个Pod;其次,在每个Pod中都运行着一个特殊的被称为Pause
的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中;每当启动一个pod的时候,pause容器也会随之启动
Kubernetes将集群中的机器划分为一个Master
和一些Node
。在Master上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kubescheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。
Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。在Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。Etce
:
etcd的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转
Raft: 读写信息的存储
WAL: 预写日志,并且定时对这些日志进行备份
Store: 实时把日志和数据持久化传入本地磁盘中
关于
知识整理于:Kubernetes权威指南 第4版
想要这本书的小伙伴可以在评论区留下邮箱。
来源:CSDN
作者:浩翰Redamancy
链接:https://blog.csdn.net/qq_43442524/article/details/104483555