前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三、Kubernetes 核心概念

三、Kubernetes 核心概念

作者头像
Yuyy
发布2022-09-21 10:13:17
2960
发布2022-09-21 10:13:17
举报
文章被收录于专栏:yuyy.info技术专栏

什么是 Kubernetes

企业级的容器编排平台。

Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。联想一下 Docker 的集装箱,不难想到 k8s 是想成为运送集装箱的轮船,来管理集装箱,也就是管理容器。

“k8s”,是通过将8个字母“ubernete ”替换为“8”而导致的一个缩写。(这种缩短名称的方式还是第一次见,有创意)

Kubernetes 核心功能

  • 服务的发现与负载的均衡;
  • 容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上,Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接;
  • 自动化的容器恢复。
  • 应用的自动发布与应用的回滚,以及与应用相关的配置密文的管理;
  • 对于 job 类型任务,Kubernetes 可以去做批量的执行;
  • 为了让这个集群、这个应用更富有弹性,Kubernetes 也支持水平的伸缩。

调度

k8s 将用户提交的容器,放置到集群的某个节点上。结合容器的大小,所需要的资源情况等,将容器放到一个满足容器要求的、相对空闲的节点上。

自动修复

k8s 会检查节点是否健康,如果节点出现故障,k8s 会自动将该节点的容器迁移到健康的节点上。

水平伸缩

k8s 具备业务负载检查的能力,如果某个容器 cpu 利用率过高,响应时间长,k8s 可以对该容器进行水平扩展。其中需要用到负载均衡。

Kubernetes 的架构

典型的二层架构和 server-client 架构。(Docker 也是 server-client 架构)

中央的管控节点 master

  • API Server:用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送;
    • 本身在部署结构上是一个可以水平扩展的一个部署组件
  • Controller:是控制器,它用来完成对集群状态的一些管理。比如刚刚我们提到的两个例子之中,第一个自动对容器进行修复、第二个自动进行水平扩张,都是由 Kubernetes 中的 Controller 来进行完成的;
    • 可以进行热备的一个部署组件
  • Scheduler:调度器,完成调度的操作,就是我们刚才介绍的第一个例子中,把一个用户提交的 Container,依据它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置;
  • etcd:是一个分布式的一个存储系统,API Server 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。

真正运行业务负载的 Node

Pod

每个业务负载会以 Pod 的形式运行,一个 Pod 中运行的一个或者多个容器。

kubelet

真正去运行这些 Pod 的组件的是叫做 kubelet,通过 API Server 接收到所需要 Pod 运行的状态,然后提交到 Container Runtime 组件中。

Storage Plugin、Network Plugin

在 OS 上创建容器运行所需要的环境,需要对存储、网络进行管理,Kubernetes 并不会直接进行网络存储的操作,他会靠 Storage Plugin 或者是网络的 Plugin 来进行操作。用户自己或者云厂商都会去写相应的 Storage Plugin 或者 Network Plugin,去完成存储操作或网络操作。

也就是定义规范,让各个厂商自己去实现。前提是软件自身要有话语权,想想一下如果不这样,就需要对接各种 OS,任务之重,没有话语权又想让各个 OS 使用 k8s,是多么的难。还好在容器编排领域,k8s 处于领先地位

Kube-proxy

在 Kubernetes 自己的环境中,也会有 Kubernetes 的 Network,它是为了提供 Service network 来进行搭网组网的。真正完成 service 组网的组件的是 Kube-proxy,它是利用了 iptable 的能力来进行组建 Kubernetes 的 Network,就是 cluster network。

Pod调度执行流程

用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署,这个 Pod 请求首先会通过 CLI 或者 UI 提交给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd,之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。

这个时候 Scheduler 会根据它的内存状态进行一次调度决策,在完成这次调度之后,它会向 API Server report 说:“OK!这个 Pod 需要被调度到某一个节点上。”

这个时候 API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执行启动。相应节点的 kubelet 会得到这个通知,kubelet 就会去调 Container runtime 来真正去启动配置这个容器和这个容器的运行环境,去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。

Kubernetes 的核心概念

Pod

  • Pod 是 Kubernetes 的一个最小调度以及资源分配单元。
  • 一个或者多个容器组成。
  • 定义容器运行的方式(Command、环境变量等)
  • 提供给容器共享的运行环境(网络、进程空间)
    • Pod 里的容器可以用 localhost 来进行直接的连接。而 Pod 与 Pod 之间,是互相隔离的。

Volume

  • 声明在 Pod 中的容器可以访问的文件目录
  • 一个卷可以被挂载在 Pod 中一个或者多个容器的指定路径下面。
  • 支持多种后端存储的抽象
    • 本地存储、分布式存储、云存储

Deployment

一般用 Deployment 这个抽象来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元。

  • 定义一组 Pod 的副本数目、版本等
  • 通过 Controller 维持 Pod 的数目
    • 自动恢复失败的 Pod
  • 通过 Controller 以指定的策略控制版本
    • 滚动升级、重新生成、回滚等

滚动升级

  • 逐个更新 Pod,不会停止所有 Pod,导致业务中断
  • 更新期间仅对可用的 Pod 进行负载均衡

Service

  • 提供访问一个或多个 Pod 实例的稳定访问地址
    • Pod 实例生命周期短,自身访问地址无法固定
  • 支持多种访问方式实现
    • ClusterIP
    • NodePort
    • LoadBalancer

Namespace

区分不同的BU(business units:业务单位)

  • 一个集群内部的逻辑隔离机制(鉴权、资源管理)
  • 每个资源都属于一个 Namespace
    • Pod、Deployment、Service
  • 同一个 Namespace 中的资源命名唯一

Kubernetes 的 API

high-level(学到个新名词) 上看,Kubernetes API 是由 HTTP+JSON 组成的

  • labels:一个非常核心的 kubernetes API 的概念(目前只理解到起标识作用), KeyValuePair,可以作为 Pod 查询条件。
  • spec:期望的状态,Pod 内部容器的信息

Kubernetes 官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-2-13 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Kubernetes
  • Kubernetes 核心功能
    • 调度
      • 自动修复
        • 水平伸缩
        • Kubernetes 的架构
          • 中央的管控节点 master
            • 真正运行业务负载的 Node
              • Pod
              • kubelet
              • Storage Plugin、Network Plugin
              • Kube-proxy
              • Pod调度执行流程
          • Kubernetes 的核心概念
            • Pod
              • Volume
                • Deployment
                  • Service
                    • Namespace
                    • Kubernetes 的 API
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档