• 01. Kubernetes基础入门


    目录

    1、前言

    2、Kubernetes介绍

    2.1、什么是Kubernetes

    2.2、主要功能

    2.3、与Docker的关系

    2.4、Kubernetes集群架构体系

    3、Kubernetes组件

    3.1、核心组件

    3.2、附加组件

    4、Kubernetes对象

    4.1、对象管理

    4.2、命名空间

    4.3、标签


    1、前言

    Docker 容器技术将应用及其依赖打包到镜像中,从而很好地解决了应用部署与集成的问题。低在现实中却很少通过 Docker 将应用进行大规模的部署。这主要是因为,Docker 本质上是一种单的容器技术(或者说是一种工具),并不能很好地将应用组织起来,难以独立地支撑起生产环境中应用的大规模容器化部署。而采用 Kubernetes 则可以很好地解决这个问题。

    2、Kubernetes介绍

    Kubernetes官方网站:Kubernetes

    2.1、什么是Kubernetes

    Kubernetes 简称 K8s,是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。它最初源于谷歌内部的 Borg 系统,提供的功能包括:

    • 应用的服务排
    • 容器集群的部署
    • 集群的管理

    通过它能够非常方便地进行集群的扩容与缩容。

    Borg 系统是一个集群管理器,它管理着 Google 内部很多个应用集群,而每个集群都有成千上万台机器。Borg 系统通过准入控制、高效的任务打包、超额的资源分配,以及进程级隔离的机器共享,实现了超高的资源利用率。

    Kubernetes 通过一个抽象的逻辑单元 Pod 将应用的容器组合在一起,从而让服务更容易被发现和管理。Kubernetes 中沉淀了 Google 多年的生产环境运行经验,目前已经形成了一个完善的生态圈。Google在2014年将其开源。

    2.2、主要功能

    Kubernetes主要提供了7个重要功能:

    1、自动发布和回滚

    通过持久化存储来保存应用发布时的相关配置信息,从而在部署过程中发生问题时能够执行回滚操作。

    2、自动化装箱

    按照应用对资源的要求将容器进行自动部署,从而提高了资源的利用率,节省了资源。

    3、水平扩容

    根据应用在运行过程中对 CPU、内存的使用情况,通过简单的命令即可对应用进行扩容和缩容。

    4、配置管理

    将集群和应用的配置信息进行了持久化存储,可以在不重新构建镜像的情况下更新应用的配置信息。

    5、自愈能力

    实现了容器的高可用。当节点上运行的容器失败后,Kubernetes 会对容器进行重启。即使节点出现宕机,Kubernetes 也会对容器进行重新部署和重新调度,容器能够正常运行后才会对外提供服务。

    6、服务发现和负载均衡

    内置了服务发现机制和负载均衡功能,不需要使用额外的服务。

    7、存储编排

    利用持久卷和持久卷声明完成存储系统的自动挂载,同时支持多种存储系统(如本地存储、云存储和网络存储等 )。

    2.3、与Docker的关系

    Kubernetes 并不能够取代 Docker,它们之间是平台与组件的关系: Kubernetes 可以将Docker 作为运行时组件,但并不完全依赖 Docker。因此严格地说,Kubernetes 应该被称为容器编排技术,而不是容器技术。

    2.4、Kubernetes集群架构体系

    Kubernetes是属于主从分布式架构,包括了master节点和node节点,master为主节点,而node为工作节点,一般实际项目中,至少要有2个node节点。

    • master节点:控制着整个集群,并对集群进行管理和调度。master 节点上运行着 APIServer、scheduler、controller-manager 等服务组件,并且 master 节点还管理着集群的持久化存储。
    • node 节点: 实际运行业务应用容器的节点。node 节点上运行着 kubelet、kube-proxy和Docker 容器的守护进程。node 节点通过 kubelet 与 master 节点上的APIServer进行交互,从而在集群中对各种资源执行增加、删除、修改和查询等操作。

    3、Kubernetes组件

    3.1、核心组件

    1、API Server

    它提供了操作 Kubernetes 集群的唯一入口,通过它可以访问集群中的所有资源。它也提供了用户的认证及授权功能,并支持访问控制的管理和服务的注册与发现等机制。API Server 也可以与ETCD 存储器进行交互,从而将集群的信息持久化保存。

    2、scheduler

    它负责管理和调度集群资源。Kubernetes 许用户预先定义集群资源的调度策略,通过scheduler 将 Pod 调度到相应的 node 节点上。

    3、controller-manager

    它负责维护集群的状态,如故障检测、自动扩展、滚动更新等。

    4、kubelet

    它负责管理 node 节点上运行的 Pod,包括 Pod 的创建、修改、删除、重启及健康状态监控等。它还负责与 master 节点上的API Server 进行交互,定时将 node 节点的状态发送给API Server,并接收APIServer 下发的指令。

    5、kube-proxy

    它会根据 ETCD 中存储的应用配置信息在 node 节点上启动一个监听进程,从而将外部请求路由转发到后端正确的容器中。另外,kube-proxy 还解决了服务端口冲突的问题,并为部署在Kubernetes 集群中的应用提供访问外部网络的能力。kube-porxy 支持随机和轮询这两种负载均衡的路由算法。

    6、Docker 容器的守护进程

    它负责 Docker 的镜像管理,以及 Pod 和容器的真正运行,是 Kubernetes 真正的执行引擎。

    3.2、附加组件

    附加组件不是必需的,但是可以增强Kubernetes功能。

    1、kube-dns

    为整个Kubernetes集群提供DNS服务。

    2、Ingress

    为集群中的服务提供最佳的外部访问方式。

    3、Heapster

    监控Kubernetes集群资源。

    4、Dashboard

    Web UI。

    5、Federation

    提供跨可用的k8s集群。

    6、Fluentd-elasticsearch

    提供k8s集群日志的采集、存储和查询。

    4、Kubernetes对象

    Kubernetes 将所有的内容(如 Pod、Service、PV和PVC等)都抽象为“资源”。“资源的实例是“对象”,而对象可以被持久化。Kubernetes 使用对象去代表整个集群。对象描述了如下信息:

    • 集群中有哪些应用,它们运行在哪些节点上。
    • 应用可以使用哪些资源或对象。

    4.1、对象管理

    由于 master 节点上的 API Server 是操作集群资源的唯一入口,因此,对象的管理都是通过API Server 来完成的。Kubernetes 提供的这些API是Restful API,所以,即使使用命令行I具kubectl 来操作集群,实际上也是调用 API Server 中提供的接口来完成客户端的请求的。

    Kubernetes 使用配置文件来描述和管理对象,配置文件格式可以是JSON或YAML 格式,更常用的是YAML格式。

    下面是 Kubernetes 官方提供的一个 YAML 示例文件,它展示了 Kubernetes Deployment对象的属性的必需字段和规约。

    1. apiVersion: apps/vl
    2. kind: Deployment
    3. metadata:
    4. name: nginx-deployment
    5. spec:
    6. selector:
    7. matchLabels:
    8. app: nginx
    9. replicas:2 #设置Deployment 的副本数为2
    10. template:
    11. metadata:
    12. labels:
    13. app: nginx
    14. spec:
    15. containers:
    16. - name: nginx
    17. image: nginx:1.14.2
    18. ports:
    19. - containerPort: 80

    参数说明:

    • apiVersion:创建该对象所使用的 Kubernetes API的版本
    • kind:指定对象的类型
    • metadata:设置对象的元信息,包括对象的名称、ID 及命名空间等
    • spec:设定对象的规约信息

    4.2、命名空间

    Kubernetes 支持多个虚拟集群,它们的底层依赖同一个物理集群。通过命名空间可以将这些虚拟集群从逻辑上进行隔离。同一个命名空间中的对象名称必须唯一,并且不能跨越命名空间。每个Kubernetes的对象只能属于一个命名空间。不同的命名空间不能互相嵌套。

    获取当前命名空间的命令:

    kubectl get namespaces

    4.3、标签

    标签(Labels)是附加到 Kubernetes 对象上的键值对。通过使用标签,用户可以为对象指有意义且相关的标识属性。标签用于组织和选择对象。可以在创建对象时创建标签,也可以在对创建成功后随时添加标签。可以为一个对象添加多个标签,但是同一个对象上的标签不能重复.

    标签的定义可以在“metadata”字段中通过“labels”关键字进行定义。如:

    1. "metadata": {
    2. "labels": {
    3. "keyl" :"valuel",
    4. "key2":"value2"
    5. }
    6. }

    对象的标签可以与“selector”选择器配合使用,并用表达式对条件加以限制,从而实现更精确、更灵活的资源查找。

    标签是Kubernetes 中非常强大的一个功能。所有的 Kuberetes 资源都可以使用标签例如:在 node 节点上增加标签,然后利用 Pod的标签选择器将Pod分配到不同类型的 node节点上。

  • 相关阅读:
    1. 算法简介
    python Matplotlib Tkinter--pack 框架案例
    MYSQL误删除DELETE数据找回
    基于Python深度学习的DGA域名检测
    循环优先级仲裁~位屏蔽仲裁算法
    5. Spring源码篇之BeanDefinition
    聊聊使用场景法进行性能测试
    基于单片机+物联网控制的校园空气净化计划系统设计
    【Docker从入门到入土 1】Docker架构、镜像操作和容器操作
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 原文地址:https://blog.csdn.net/p793049488/article/details/132678281