k8s

194 阅读6分钟

什么是k8s

kubernetes, 简写为k8s

为什么这么简写, 8是什么意思?

因为kubernetes这个单词太长了, 就省略了中间的8个字母, 8就是这么来的.

简介

你是一个程序员, 你开发了一个博客应用服务, 你现在要把该应用服务部署在服务器上.

部署之后, 因为该服务太过受欢迎, 访问量太大, 应用服务经常会挂掉.

所以, 你用了自动重启的工具(一旦挂掉就重启), 并且把该博客应用服务部署在了好几个服务器上,总算扛住了.

后来你又开发了好几个其他的服务, 比如商城应用服务, 语音应用服务.

随着服务变多, 需求也千奇百怪:

1/有的服务可以被 外部调用, 但是有的服务, 我们不想被外部调用.

2/有的服务在部署的时候, 对服务器的内存有一定的要求, 比如内存>xxxx才能部署该服务,因为该服务对内存要求比较大.

你需要登录到各个服务器上去, 部署服务, 或者解决各个服务的问题.

k8s是干什么的

k8s是介于 应用服务 和 服务器 之间的一个中间层, 能够通过策略协调和管理多个应用服务.

它只需要一个yaml文件配置,定义应用服务的部署顺序等信息, 或其他的信息, 就可以自动的部署各个服务到服务器上, 并且可以自动的扩容和缩容.

k8s可以解决:当某个服务器上的某个服务挂了,那么可以在其他的服务器上自动部署该服务.

k8s是google的开源的神器.

k8s的架构原理

图片.png

k8s会把我们的服务器, 分成2个部分. 一部分是控制平面,另一部分是节点node

其实就是[老板]和[打工的]的关系, 控制平面来管理各个node, 而node来实际运行各个应用服务.

<1>控制平面长什么样子呢?它的内部组件是什么?

图片.png

<2>node长什么样子?有什么组件呢?

node是实际的工作节点, 它可以是裸机服务器,也可以是虚拟机,

它会负责实际运行各个服务, 部署在一个node上的服务, 共享node上的内存和cpu等计算资源.

我们之前需要把代码上传到服务器上去,

现在我们只需要把代码和和 依赖的环境, 打包起来, 然后在服务器上用一行代码就可以部署?

1)容器镜像?

就是把应用代码和系统环境打了一个压缩包. 然后在任意一台机器上解压, 发服务就能正常运行了.

图片.png

2)pod?

每个应用服务都是一个containner, 同时我们还会给每一个应用服务搭配一个日志收集器container, 或者监控采集器container, 这多个的containner共同组成一个一个的pod. pod运行在node上, k8s可以把pod从某个node, 调度到另一个node, 还能以pod为单位, 去做重启和动态扩所容的操作. 所以, pod是k8s中最小的调度单位

3)cluster?

控制平面和node, 共同构成一个cluster ,也就是集群. 在公司里, 我们一般会构建多个集群. 比如测试环境构建一个集群, 生产环境构建一个集群.

图片.png

总结

k8s是服务和服务器之间的中间层. 有了这个中间层,我们就可以通过这个中间层, 非常方便灵活的去部署服务应用, 进行资源的扩容和缩容.

通过暴露一系列的api能力, 让我们简化服务的部署运维流程,

node和pod之间的关系

在Kubernetes(K8s)中,Node和Pod是两个核心概念,它们之间存在紧密的关联。以下是对Node和Pod之间关系的详细解释:

Node的定义和作用

  1. 定义:Node是Kubernetes集群中的一个工作节点,它可以是物理服务器或虚拟机。Node负责运行Pod和管理其上的容器。

  2. 作用

    • 提供主机和网络资源,让Pod中的容器能够运行和相互通信。
    • 监控容器的健康状态,并处理容器的事件和故障。
    • 运行必要的Kubernetes组件,如kubelet、kube-proxy和容器运行时(如Docker)。

Pod的定义和作用

  1. 定义:Pod是Kubernetes中最小的可部署单元,它是一个容器的集合,可以包含一个或多个容器。Pod中的容器共享相同的网络命名空间和存储卷,它们可以通过localhost相互通信。

  2. 作用

    • 提供了一个隔离的执行环境,使得容器能够在相同的宿主机上运行,并且能够共享资源和访问网络。
    • 是Kubernetes负责调度和管理的工作单元。

Node和Pod之间的关系

  1. Pod调度到Node

    • 当创建一个Pod时,Kubernetes调度器会根据资源需求、节点的可用性和调度策略等多个因素,将Pod分配到某个合适的Node上。
    • Pod在被调度后,会在该Node上启动和运行,直到Pod结束或被迁移。
  2. Node运行Pod

    • Node为Pod提供了运行时所需的所有资源,包括CPU、内存、存储和网络。
    • 每个Node都有一定的资源容量,当一个Pod被调度到某个Node上时,该Node必须为Pod分配足够的资源。
  3. Pod在Node上的生命周期

    • Pod在Node上的生命周期主要包括Pending(等待调度)、Running(运行中)、Succeeded(成功结束)、Failed(失败结束)和Unknown(未知状态)等阶段。
    • Kubelet负责监控Pod的健康状态,并根据需要对Pod进行重启、迁移等操作。
  4. Pod与Node之间的调度策略

    • 开发者可以通过NodeSelector等策略来影响Pod的调度决策,将Pod限制调度到具备特定标签的节点上。

综上所述,Node和Pod之间的关系可以看作是任务和工作者的关系。Pod是要完成的任务,而Node是执行这些任务的工作者。Node提供了Pod所需的主机和网络资源,Pod则是Kubernetes负责调度和管理的工作单元。通过合理的Pod设计和Node管理,Kubernetes集群可以实现高可用性和多活复用,确保应用程序能够在不同地理位置或数据中心之间实现故障转移和负载均衡。