kubernetes学习路上的那些事(一文教你快速入门Kubernetes)

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(1)

一、什么是kubernetes?

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(2)

特点:

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化,插件化,可挂载,可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
二、集群架构和组件

Kubernetes 集群架构以及相关的核心组件如下图所示:一个 Kubernetes 集群一般包含一个 Master 节点和多个 Node 节点,一个节点可以看成是一台物理机或虚拟机。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(3)

Master 负责集群的管理。Master 协调集群中的所有行为/活动,例如应用的运行、修改、更新等。

Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。

Master 节点一般包括四个组件,kube-apiserver、kube-schedulerkube-controller-manageretcd,他们分别的作用:

  • kube-apiserver

kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。请参阅构建高可用集群。

  • kube-controller-manager

kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行

  • kube-scheduler

根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

  • ETCD

etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

(Node)节点作为Kubernetes集群中的工作节点,可以是VM虚拟机、物理机。

每个node上都有一个Kubelet,用于管理node节点与Kubernetes Master通信。每个Node节点上至少还要运行container runtime(比如docker或者rkt)。

Node 节点一般包括三个组件,docker,kube-proxy,kubelet

  • kubelet

kubelet 是 Master 在 Node 节点上的 Agent(代理),与 Master 密切协作,管理本机运行容器的生命周期,负责 Pod 对应的容器的创建、启停等任务,实现集群管理的基本功能。

  • kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

  • docker

docker用于运行容器。

三、基本概述

1、Pod

Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。这些资源包括:· 共享存储,当作卷· 网络,作为唯一的集群 IP 地址· 有关每个容器如何运行的信息,例如容器映像版本或要使用的特定端口

Pod 为特定于应用程序的“逻辑主机”建模,并且可以包含相对紧耦合的不同应用容器。例如,Pod 可能既包含带有 Node.js 应用的容器,也包含另一个不同的容器,用于提供 Node.js 网络服务器要发布的数据。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行。

Pod有其自己的IP地址,同一Cluster中才能互相访问,如果它们紧耦合并且需要共享磁盘等资源,这些容器应在一个 Pod 中编排。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(4)

2、Label

标签,附加到某个资源上,用于关联对象、查询和筛选。一个 Label 是一个 key=value 的键值对,key 与 value 由用户自己指定。Label 可以附加到各种资源上,一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源上。

标签(Label)是附加在对象上的键/值对,可以以多种方式使用:

  • 指定用于开发,测试和生产的对象
  • 嵌入版本标签
  • 使用 Label 将对象进行分类

标签(Label)可以在创建时或之后附加到对象上。他们可以随时被修改

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(5)

3、ReplicaSet(RC)

ReplicaSet 用来确保预期的 Pod 副本数量,如果有过多的 Pod 副本在运行,系统就会停掉一些 Pod,否则系统就会再自动创建一些 Pod。

我们很少单独使用 ReplicaSet,它主要被 Deployment 这个更高层的资源对象使用,从而形成一整套 Pod 创建、删除、更新的编排机制。

4、Deployment

Deployment 指挥 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。

Deployment 用于部署无状态应用,Deployment 为 Pod 和 ReplicaSet 提供声明式更新,只需要在 Deployment 描述想要的目标状态,Deployment 就会将 Pod 和 ReplicaSet 的实际状态改变到目标状态。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(6)

5、Service

Kubernetes 中的服务(Service)是一种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。Service 使从属 Pod 之间的松耦合成为可能。 和其他 Kubernetes 对象一样, Service 用 YAML (更推荐) 或者 JSON 来定义. Service 下的一组 Pod 通常由LabelSelecto来标记。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(7)

6、Namespace

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间

Namespace适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑名字空间。当需要名称空间提供的功能时,开始使用它们。

Namespace 多用于实现多租户的资源隔离。Namespace 通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组。

当我们给每个租户创建一个 Namespace 来实现多租户的资源隔离时,还可以结合 K8S 的资源配额管理,限定不同租户能占用的资源,例如 CPU 使用量、内存使用量等。

四、网络模型原则

K8s网络模型要符合4个基础原则,3个网络要求原则,1个架构原则,1个IP原则。

每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问。

K8s中的Pod的IP是最小粒度IP。同一个Pod内所有的容器共享一个网络堆栈,该模型称为IP-per-Pod模型。

  • Pod由docker0实际分配的IP
  • Pod内部看到的IP地址和端口与外部保持一致
  • 同一个Pod内的不同容器共享网络,可以通过localhost来访问对方的端口,类似同一个VM内不同的进程。

IP-per-Pod模型从端口分配、域名解析、服务发现、负载均衡、应用配置等角度看,Pod可以看做是一立的VM或物理机。

  • 所有容器都可以不用NAT的方式同别的容器通信。
  • 所有节点都可以在不同NAT方式下同所有容器心痛,反之亦然。
  • 容器的地址和别人看到的地址是同一个地址。

要符合下面的架构:

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(8)

五、资料

为了帮助大家更好的了解K8s,我整理了一些相关资料,希望可以帮助到大家。

kubernetes学习路上的那些事(一文教你快速入门Kubernetes)(9)

关注传知摩尔狮 留言领取超详细资料!


关于传知摩尔狮

传知摩尔狮是广州传知信息科技有限公司旗下针对阿里云认证及云网创立的数字人才培训品牌,传知摩尔狮成立于2019年,致力于传播领先的教育理论,倡导更有效、更高效的学习范式,在IT职业教育领域,研究相关学科的教材教法和教学资源的整合,通过自主研发的学习服务平台推动IT人才的学习和发展,致力为中国云计算行业培养数字化人才。

摩尔狮在秉持传播知识、成就未来的理念下,2021年8月与阿里云达成深度合作,成为阿里云认证的战略级培训伙伴。并且,摩尔狮已和超过200家的互联网厂家签署了就业合作协议,为企业与国家持续培养输送面向未来的应用型人才。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页