1-kubernetes介绍

一、Kubernetes 是什么?

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88mQuNh8-1625711185581)(https://d33wubrfki0l68.cloudfront.net/26a177ede4d7b032362289c6fccd448fc4a91174/eb693/images/docs/container_evolution.svg)]

传统部署时代:

早期,各个组织机构在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。 例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况, 结果可能导致其他应用程序的性能下降。 一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展, 并且维护许多物理服务器的成本很高。

虚拟化部署时代:

作为解决方案,引入了虚拟化。虚拟化技术允许你在单个物理服务器的 CPU 上运行多个虚拟机(VM)。 虚拟化允许应用程序在 VM 之间隔离,并提供一定程度的安全,因为一个应用程序的信息 不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器上的资源,并且因为可轻松地添加或更新应用程序 而可以实现更好的可伸缩性,降低硬件成本等等。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代:

容器类似于 VM,但是它们具有被放宽的隔离属性,可以在应用程序之间共享操作系统(OS)。 因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

二、为什么需要 Kubernetes,它能做什么?

  • 服务发现和负载均衡

    Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排:Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚:你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算:Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

  • 自我修复:Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

三、Kubernetes 组件

(一)Master Node

Master节点主要是集群的控制平面,负责集群的决策一般不承担工作负载。

(1)kube-apiserver

整个集群的唯一入口,负责接受用户的指令,提供认证、授权、API注册和发现等机制。

(2)kube-scheduler

负责集群资源调度,按照预定的算法将Pod调度到指定的WorkerNode上运行。

(3)kube-controller-manager

负责维持整个集群的状态,比如程序部署、故障检测、自动扩展、滚动更新等;

(4)ETCD

负责存储集群中各种资源对象信息

(二)Worker Node

Worker Node负责为Pod提供运行环境,承担整个集群的工作负载,可以理解为整个集群的业务节点或数据节点。

(1)kubelet

负责维护容器的生命周期,即通过控制Docker,来创建、更新和销毁容器。

(2)kube-proxy

负责集群内部的服务发现和负载均衡,kube-proxy存在于各个node节点上,主要用于Service功能的实现,具体来说,就是实现集群内的客户端pod访问service,或者是集群外的主机通过NodePort等方式访问service。参考资料

(3)docker

负责节点上容器的各种操作。

四、各组件之间调用关系

下面以部署一个nginx服务,来说明kubernetes系统各个组件之间的调用关系:

  1. 首先要明确,一旦kubernetes环境启动后,master和node都会将自身的信息存储到etcd数据库中
  2. 一个nginx服务器的安装请求会首先发送到master的apiServer
  3. apiServer组件会调用scheduler组件来决定到底应该把哪个服务安装到哪个node节点上。此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
  4. apiServer调用controller-manager去调度Node节点安装nginx服务
  5. kubelet接受到指令后,会通知docker,然后由docker来启动一个nginx的pod。Pod是kubernetes的最小操作单元,容器必须跑在pod中
  6. 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理。

这样,外网用户即可访问集群中的nginx服务了。

五、Kubernetes 各个概念

  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器运行
  • Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或多个容器
  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
  • Service:pod对外服务的统一入口,下面可以维护同一类的多个pod
  • Label:标签,用于对pod进行分类,同一pod会拥有相同的标签
  • NameSpace:命令空间,用来隔离pod的运行环境

img

为了让外部分访问到tomcat服务,需要通过一个Service来提供。可以看到Service只映射到了其中3个tomcat 的Pod,这就是通过 Label 对不同的Pod进行的分类。这个是kubernetes定义的标签-选择器机制,通过标签进行定义,通过选择器来进行选择。

默认情况下,所有pod都是可以相互访问的。若是需要隔离访问,则就需要通过NameSpace来实现了。它会对pod进行逻辑区分,仅有同一个NameSpace的pod能够互相访问,实现隔离。

进行选择。

默认情况下,所有pod都是可以相互访问的。若是需要隔离访问,则就需要通过NameSpace来实现了。它会对pod进行逻辑区分,仅有同一个NameSpace的pod能够互相访问,实现隔离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dustin.Hoffman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值