【第一章】Kubernetes快速入门

1. Kubernetes介绍

1.1 Kubernetes是什么

Kubernetes是⼀个可移植、可扩展的 “分布式开源平台”,这个平台主要是⽤来管理我们运⾏的容器化应⽤,只不过这个平台它是⼀个分布式的,那Kubernetes这个分布式平台是如何实现的呢。 Kubernetes是将多个OS节点组织在⼀起,构建出⼀个庞⼤的虚拟资源池,⽽后对⽤户提供操作该集群的接⼝,⽤户就可以通过Kubernetes提供的对应接⼝对容器进⾏增删查改等操作。 所以对于⽤户⽽⾔,它⽆需关⼼Kubernetes底层是如何对容器进⾏的创建、⼜是如何调度到对应的节点的,它只需要专注于⾃⼰的业务逻辑代码开发即可;
在这里插入图片描述
当我们需要使⽤Kubernetes交付应⽤时,仅需要通过yaml⽂件的⽅式来描述对应容器的状态,Kubernetes则会按照yaml⽂件中所描述的容器状态信息;进⾏容器的“⾃动化”创建。

在这里插入图片描述
Kubernetes会时刻监控着容器的状态,如果有容器故障,则会尝试重启容器,使其能容器运⾏的状态能达到⽤户所期望的值;

1.2 为什么需要Kubernetes

⽬前使⽤容器打包和运⾏应⽤程序,已经是业界主流的⼀种⽅式,在⽣产环境中,我们需要管理运⾏应⽤程序的容器,同时还要确保它不会停机,例:⼀个容器发⽣故障,需要重新拉起该容器。如果系统能⾃动为其处理,那么容器的管理会不会更加的容易

这就是 Kubernetes 需要解决的问题!Kubernetes 它可以轻松的实现应⽤的扩展、服务发现、负载均衡、容器的故障转移、以及容器编排
等。

  • 垂直扩容:新的服务器节点能够很容易的进⾏增加和删除。
  • ⽔平扩容:容器实例能通过副本控制器进⾏轻松的扩容,缩容
  • 弹性伸缩:能根据容器的资源使⽤情况,进⾏⾃动的扩缩容
  • 服务发现和负载均衡: Kubernetes 为容器提供负载均衡功能,
    进⾏流量调度,从⽽使得应⽤运⾏更加稳定。
  • 存储编排:Kubernetes允许⾃动挂载各种存储类系统,例如本地存
    储、NFS、GFS、Ceph、公共云存储等。
  • ⾃动部署和回滚:如果应⽤部署过程中出现错误,可以实现⾃动回滚
  • ⾃动完成装箱计算:Kubernetes允许指定每个容器所需的CPU和内
    存资源,能够更好的管理容器的资源使⽤。
  • ⾃我修复:Kubernetes 会重新启动失败的容器、替换容器、对运
    ⾏状况检查不响应的容器进⾏杀死
  • 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如
    密码、令牌和 ssh 密钥。可以在不重建容器镜像的情况下,部署和
    更新密钥

1.3 Kubernetes不是什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。它提供了 PaaS 产品共有的⼀些普遍适⽤的功能, 例如部署、扩展、负载均衡、⽇志记录和监视。 Kubernetes 默认解决⽅案都是可选和可插拔的。但在重要的地⽅保留了⽤户的选择和灵活性。

  • 不限制⽀持的应⽤程序类型:如果只要应⽤程序可以在容器中运⾏,
    那么它应该可以在 Kubernetes 上很好地运⾏。
  • 不部署源代码,也不构建你的应⽤程序:CI/CD⼯作流取决于组织的
    ⽂化和偏好以及技术要求。
  • 不提供应⽤程序级别的服务作为内置服务:例如中间件(例如,消息
    中间件)、 数据处理框架(例如,Spark)、数据库(例如,
    mysql)、缓存、集群存储系统 (例如,Ceph)。但这些组件都可
    以在 Kubernetes 上运⾏
  • 不要求⽇志记录、监视或警报解决⽅案: 它提供了⼀些集成作为概念
    证明,并提供了收集和导出指标的机制。
  • 不提供或不要求配置语⾔/系统:它提供了声明性API,该声明性
    API可以由任意形式的声明性规范所构成。RESTful;
  • 不提供也不采⽤任何的机器配置、维护、管理或⾃我修复系统。

1.4 Kubernetes集群角色

Kubernetes集群需要建⽴在多个物理主机上,将多个物理主机的资源抽象出来,组织成⼀个平台,⽽后进⾏统⼀管理,当然它需要多个物理主机,不⼀定必须是物理机,也可以是虚拟机VM等等;所以从这个⻆度来说,Kubernetes是⼀个集群,但是在Kubernetes集群内部,这些节点⼜被划分成了两类⻆⾊;

  • ⼀类⻆⾊为主节点,叫Master,负责管理集群;
  • ⼀类⻆⾊为⼯作节点,叫Node,负责运⾏应⽤;

这也就意味着我们将来运⾏的所有容器,都应该运⾏在Node节点,⽽Master负责管理有多少个Node节点,同时还负责管理每个Node节点应该运⾏哪个容器或哪些容器的控制中⼼,因此在Kubernetes中Master被称之为Control plane控制平⾯,⽽Node就是我们的data plane叫数据平⾯;
在这里插入图片描述
Registry:Kubernetes主要是在Node上运⾏容器化应⽤,那么容器化应⽤需要依托镜像,⽽镜像⼜来⾃于Registry,但Registry并不是Kubernetes集群的组成部分,但我们必须要有⼀个私有的Registry,
当然也可以使⽤公共的镜像仓库;

Client:⽆论客户端是通过API接⼝,还是WebUI接⼝、异或者CLI接⼝与Master交互,其实都是向Master发送请求,⽐如客户端申请创建容器、删除容器等,都是由Master负责在Node节点上对容器进⾏增删改查,⽽这些操作必须要通过Master,由Master控制着完成的,虽然我们将其称Master,但它并⾮是⼀个组件,⽽是由多个组件组成的;

2. Kubernetes集群组件

通过创建⼀个Pod或者Deployment资源来了解Kubernetes集群组件以
及之间的关系。
在这里插入图片描述

2.1 Master节点组件

2.1.1 kube-APIServer

Kubernetes API 主要提供前端请求接⼊,然后验证客户端身份,以及客户端提交的请求。所有的组件都必须通过APIServer进⾏交互;

2.1.2 Kube-Scheduler

负责监视APIServer新创建,但未指定运⾏⾄哪个节点的 Pod,然后选择合适的节点让 Pod 在上⾯运⾏;
调度决策考虑的因素有很多,其中有 Pod亲和性、反亲和、节点亲和、数据位置等

2.1.3 Kube-ControllManager

控制器通过 APIServer 监控集群当前运⾏的容器状态,当控制器监控到运⾏的容器状态不符合期望状态时,控制器会致⼒于将当前状态转变为期望的状态,简单来说就是⾃动调节当前系统运⾏状态;

控制循环的例⼦:房间⾥的温度⾃动调节器。当你设置了温度,告诉了温度⾃动调节器你的 期望状态(Desired State)。 房间的实际温度是当前状态(Current State) 通过对设备的控制,温度⾃动调节器让其当前状态接近期望状态。

这些控制器包括:
节点控制器(Node Controller): 负责在节点出现故障时进⾏通知和响应;
副本控制器(ReplicaSet Controller):监视容器运⾏的副本,时刻让其维持期望状态;
任务控制器(Job controller): 监测⼀次性任务的 Job 对象,然后创建Pods来运⾏这些任务直⾄完成;

2.2 Node节点组件

2.2.1 Kube-kubelet

kubelet 是集群中每个 Node 节点上运⾏的代理程序,⽤于接收APIServer 提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运⾏状态且健康,主要作⽤就是管理容器的启动、停⽌、销毁、
重建等;

2.2.2 Kube-kubeproxy

kube-proxy 是集群中每个节点上运⾏的⽹络代理,它主要维护每台节点上的 Iptables、IPVS 规则创建和删除,这些规则允许从集群内部或集群外部与 Pod 进⾏⽹路通信;kube-proxy负责实现容器的负载均衡,然后将指定的流量调度到对应的容器,通过iptables或ipvs规则来实现

2.2.3 ContainerRuntime

容器运⾏环境是负责运⾏容器的软件,Kubernetes ⽀持容器运⾏时,⽐如 Docker、Containerd等;

2.3 Add-One附件组件

2.3.1 CoreDNS

每创建⼀个内部负载均衡,则⾃动创建⼀条对应的DNS记录,这样就可以
让Pod通过域名的⽅式访问对应的负载均衡; 因为k8s分配的负载均衡
IP不稳定,删除和添加都会发⽣变化,但如果分配⼀个稳定的DNS名称,
则⽆需关系负载均衡的IP;

2.3.2 network

⽹络插件,为每个Pod分配⼀个IP地址,确保多个不同节点的Pod能够直
接通信,⽽⽆需经过NAT地址转换等;

2.3.3 Dashboard

为Kubernetes提供图形界⾯,通过图形界⾯管理Kubernetes;

2.4 Pod的创建流程图

在这里插入图片描述

3. Kubernetes快速入门总结

Kubernetes CLuster

Master:
		API Server      
		Scheduler :调度器  负责将Pod调度到对应的Node节点上;
		Controller Manager: 控制器管理器   致力于将当前状态转为期望状态;
			ReplicasSet Controller: 副本控制器; 
			
Nodes:
	Kubelet:	
			watch API Server,Pod需要绑定到当前节点; PodSpec
			APIServer 将PodSpec规范,下发给Kubelet, 容器名称,容器镜像,容器存储等等
			kubelet根据这些信息,Registry获取镜像,通过CNI网络插件获取IP地址,通过CSI存储卷相关信息;
			通过DOcker来运行对应的容器(Container)

	kube-proxy:
		Watch API Server,获取Service资源 Endpoints资源变更;
			Service: 分配负载均衡IP地址(虚拟VIP)
			Endpoints:获取到对应容器的IP地址集合;负载均衡后端节点
		kubeproxy:VIP + Endpoints IP集合,转为对应的Iptables、IPVS规则,然后应用到所有的节点;
	
	
	container Runtime: Docker Containerd ....等 运行容器的软件;

						
	
addons:
	CoreDNS:
		为负载均衡提供一个稳定的名称;
	
	Network:
		Flannel  host-gw模式,在节点上创建了一推的路由条目;去往1网段的网关是多少;  去往2网段网关是发多少
		集群如果没有这个网络插件的话,是没有办法实现跨集群通信的;
	
	Dashboard:
		图形界面;命令行操作Kubernetes;
  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值