k8s基础

一. 容器、虚拟机概念

在这里插入图片描述

特性

容器

虚拟机

启动速度

秒级

分钟级

性能

接近原生

较弱,表现有限

内存消耗

很小

较多

硬盘消耗

MB级别

GB级别

运行密度

单机最大支持上千容器

单机一般支持几十个

隔离性

安全

安全

迁移性

优秀

一般

二. Docker,镜像、容器

Docker是一个开源的应用容器引擎,可以让开发者打包应用及依赖包到一个可移植的镜像中,发布到Linux/Windows机器上

  1. 镜像:是一个文件的副本,可以被特定的软件/硬件识别。是一个可执行的程序,静态的概念。
  2. 容器:是通过执行镜像文件生成的。是动态的概念。可以通过镜像运行生成多个容器。iso镜像文件可以运行生成在多个操作系统也就是容器。

三. Kubernetes

Kubernetes, 即K8S

  1. 背景: 从上文我们了解了以Docker为首的容器化技术,解决了因环境、配置及程序本身不同而造成的各种部署配置的问题,Docker 将它们统一在容器镜像之上。部署的复杂度虽然解决了,但是在生产环境中,会涉及到多个容器,这些容器必须跨多个服务器主机进行部署。随着用户使用越来越多的容器进行封装和运行应用程序,必将会导致容器的管理和编排变得更加困难,不得不对容器实施分组,以便跨所有容器提供网络、安全、监控等服务,所以容器编排系统应需而生。
  2. K8S的概念 K8S是用来对docker容器进行管理和编排的工具,一个基于docker构建的调度服务,可以提供资源调度、均衡容灾、服务注册、动态扩容等能力。一个具体的Kubernetes集群包含一个Master节点和一群Node节点,Master节点负责管理和控制,Node节点是工作负载节点,里面是具体的容器,每个容器中部署的是具体的服务,如下图所示。

在这里插入图片描述

四. Master节点

主要由四部分组成:API Server、Scheduler、Controller Manager、Etcd,具体作用如下:

  1. API Server: 可以理解为整个集群的对外接口,它提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据
  2. Scheduler:负责集群内部的资源调度,如负责某个请求的Pod到某个Node节点上。在调度时,
  3. Controller Manager:负责管理集群的各种资源,保证资源处于预期的状态。它由多种分别管理各类资源
  4. Etcd:负责保存K8S集群的配置信息和各种资源的状态信息,当数据发生变化时,Etcd会快速的通知K8S相关组件。

五. Node节点

主要是由Pod、kubelet、kube-proxy、Docker、Fluentd等部分组成,各部分的具体作用如下:

Pod:Pod是Kurbernetes进行创建、调度和管理的最小单位,一个pod由一个或多个容器组成,pod中共享存储和网络,在同一个Docker主机上运行。pod内部可以运行一个或多个容器,一般情况下为了便于管理,一个pod下只运行一个容器。Kubernetes不会直接管理容器,而是管理Pod。Pod的作用是管理线上运行的应用程序,在通常情况下,在服务上线部署时,Pod通常被用来部署一组相关的服务,即一个调用链上的服务。

kubelet: kubelet是Master在Node节点上的代理,每个Node节点都会启动一个kubelet进程,用来处理Mater节点下发到Node节点的任务,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、管理Pod生命周期、获取容器和节点的状态等工作。当Scheduler确定某个Node上运行Pod之后,会将Pod的具体配置信息发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向Master报告运行状态。

kube-proxy: 负责负载均衡、路由转发,具体来说,其负责将访问service的TCP/UDP数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。Proxy是为了解决外部网络能够访问跨机器集群中容器提供的应用服务而设计的,运行在每个Node上。Proxy提供TCP/UDP sockets的proxy,每创建一种Service,Proxy主要从etcd获取Services和Endpoints的配置信息(也可以从file获取),然后根据配置信息在Minion上启动一个Proxy的进程并监听相应的服务端口,当外部请求发生时,Proxy会根据Load Balancer将请求分发到后端正确的容器处理。

Docker/Container Runtime:运行容器的引擎,Pod内部运行的都是具体的容器,这个容器是由Docker引擎创建的,Docker引擎是node节点的基础服务。(补充:Docker 运行时在 Kubernetes 的2021年底发布1.23版本中被移除,不再被支持,需要切换到其他符合标准的容器运行时,如 containerd或 CRI-O。)

Fluentd:提供集群日志采集、存储与查询的功能。

介绍完Master和Node它们分别的组件,我们知道了Pod是K8S创建、调度和管理的最小单位,那么一个Pod具体是怎么创建的呢?参考如下:

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...