kubernetes(K8S)笔记

文章目录

    • 大佬博客
    • 简介
    • K8S+Docker VS Docker
      • Docker+K8S简介
      • K8S配合docker相比较单纯使用docker

大佬博客

kubernetes(K8S)笔记_第1张图片
Kubernetes(通常缩写为K8s)是一个用于自动化容器化应用程序部署、管理和扩展的开源容器编排平台。它的构造非常复杂,由多个核心组件和附加组件组成,共同协作以实现容器集群的高可用性和可伸缩性。以下是Kubernetes的主要组件和其构造:

  1. Master节点(控制平面)

    • kube-apiserver:API服务器是Kubernetes的控制平面组件之一,充当所有控制平面组件和用户命令的入口点。它公开了Kubernetes API,允许外部和内部组件与集群交互。
    • etcd:etcd是一个高度可用的键值存储,用于保存集群的所有配置数据,包括应用程序配置、节点信息、服务发现等。
    • kube-scheduler:调度器负责决定在哪个节点上运行新创建的Pod。它考虑了节点资源、亲和性、反亲和性、争用和其他策略来选择合适的节点。
    • kube-controller-manager:控制器管理器运行一组控制器,这些控制器负责监控集群的状态,并确保期望的状态与实际状态保持一致。常见的控制器包括ReplicaSet Controller、Node Controller、Service Controller等。
    • cloud-controller-manager(可选):云控制器管理器是与云提供商相关的控制器,用于处理云资源,如负载均衡器、持久卷、虚拟机等。
  2. Node节点(工作节点)

    • kubelet:kubelet是运行在每个Node节点上的代理服务,负责与Master节点通信,管理节点上的Pod生命周期,确保Pod按照预期的方式运行。
    • kube-proxy:kube-proxy是用于服务发现和负载均衡的网络代理,它维护网络规则,将请求路由到正确的Pod。
    • Container Runtime:Kubernetes支持多种容器运行时,包括Docker、Containerd、CRI-O等。容器运行时负责在节点上创建和运行容器。

在Kubernetes中,一个宿主机通常只会被视为一个Node节点。Node节点代表物理或虚拟机器,它是Kubernetes集群中的一个工作节点,用于运行容器化的应用程序。
一台宿主机对应一个Node节点,不同宿主机上的Node节点是独立的,并且它们之间不会共享资源、容器、网络等。

Node节点的数量由Kubernetes集群的规模和配置决定。
您可以根据需要增加或减少Node节点来扩展或缩小集群的计算资源。每个Node节点上可以运行一个或多个容器,具体取决于Node的资源配置和负载需求。

在一些特殊情况下,您可以配置多个Node节点在同一台物理宿主机上,这被称为多Node容器化,但这通常是不常见的,而且需要高度的配置和管理,因为它涉及到共享宿主机上的资源和网络。

总之,一个宿主机通常对应一个Node节点,Kubernetes集群中的Node节点数量取决于您的集群规模和需求。要增加或减少Node节点,您可以根据需要添加或移除宿主机,并在Kubernetes中进行相应的配置。

  1. Pod:Pod是Kubernetes的最小部署单元,通常包含一个或多个容器,它们在同一网络命名空间、存储卷和节点上运行。Pod代表应用程序的一个实例。

  2. Service:Service定义了一组Pod的网络访问方式,提供了负载均衡、服务发现和DNS解析等功能,使应用程序能够稳定地运行。

  3. Volume:Volume是用于在Pod中持久化存储数据的抽象。它可以与Pod一起创建和销毁,并且可以挂载到Pod的一个或多个容器中。

  4. Namespace:Namespace用于将集群划分为多个虚拟集群,每个Namespace中可以有自己的Pod、Service和其他资源,以实现多租户和隔离。

  5. ConfigMap和Secret:ConfigMap用于存储配置数据,而Secret用于存储敏感数据,它们可以在Pod中以卷的形式挂载。

  6. Ingress:Ingress定义了HTTP和HTTPS流量的规则,允许外部流量访问集群内的服务。

  7. 其他附加组件:Kubernetes生态系统中还有许多其他附加组件,如监控工具、日志记录工具、自动伸缩控制器、认证和授权插件等,用于增强和扩展Kubernetes的功能。

Kubernetes的这些组件共同协作,以实现容器化应用程序的高度可扩展性、可用性和自动化管理。不同版本的Kubernetes可能会有一些变化和新增组件,但这些基本组件构成了Kubernetes的核心架构。

简介

yml文件---->前台处理---->API Server---->Controller Manager------>Kubelet(Pod创建,修改,监控等全周期管理)
API Server是资源对象的唯一操作入口,所有执行,操作解析后都是调用API然后触发Controller Manager实现功能。

Pods:

  • 一个可以被创建、销毁、调度、管理的最小的部署单元,例如一个或一组容器
  • 每个Pod有一个独立的IP
  • 同一个Pod的容器共享网络,共享存储资源:localhost相互通信

Pods的使用

  • 具有密切连接关系(相互访问、共享数据) 的容器放在同一个Pod中

kubernetes(K8S)笔记_第2张图片

K8S+Docker VS Docker

Docker+K8S简介

Kubernetes(通常缩写为K8s)和Docker是两个不同但密切相关的容器技术。它们在容器化应用程序方面发挥不同的角色,通常一起使用以实现更好的容器化应用程序管理和部署。

  1. Docker(容器引擎):

    • Docker是一种容器化技术,它允许开发人员将应用程序和其依赖项打包到一个可移植的容器中。这个容器包含了应用程序的所有必要组件,包括代码、运行时环境、库和配置。
    • Docker容器具有以下优点:可移植性、隔离性、轻量级、快速启动和关闭、易于扩展等。
  2. Kubernetes(容器编排平台):

    • Kubernetes是一个开源的容器编排平台,用于自动化和管理容器化应用程序的部署、扩展、更新和运维。Kubernetes提供了一种容器编排的框架,以确保容器在集群中按照期望的方式运行。
    • Kubernetes的功能包括自动负载均衡、自动扩展、容器自愈、滚动升级、服务发现等。它还提供了用于定义应用程序架构的声明式配置(例如Pods、Services、Deployments等)。

联系:

  • Docker通常用于创建和管理单个容器,而Kubernetes用于协调和管理多个容器的集群。Kubernetes可以管理数百甚至数千个容器实例,确保它们在各种节点上正确运行,具备高可用性和容错性。
  • Kubernetes可以使用Docker作为容器运行时(Container Runtime),这意味着它可以直接与Docker引擎一起使用。但是,Kubernetes也支持其他容器运行时,如Containerd和CRI-O。
  • Kubernetes提供了对Docker容器的高级编排、自动化和管理功能,例如水平扩展、自动恢复、滚动升级等,使得容器化应用程序在生产环境中更容易管理和扩展。

总之,Docker是容器技术的核心,而Kubernetes是一个容器编排平台,用于自动化和管理大规模的Docker容器集群。它们一起使用,可以实现高度可伸缩、高可用性的容器化应用程序部署和管理。

K8S配合docker相比较单纯使用docker

K8S配合docker优势(单独使用docker劣势)

  • 调度:灵活资源分配(Pod的label+Scheduler)
  • 修复:容器跑出问题了,换个主机再跑跑(controller manager)
  • 自动扩缩容:超过人为设定的监控指标自动扩缩容(controller manager)

Kubernetes(K8s)与单纯使用Docker相比,具有一些重要的优势和适用场景。下面是一些比较:

  1. 自动化容器编排

    • Kubernetes允许您自动化地编排、管理和扩展容器化应用程序,而无需手动管理容器的生命周期。这包括自动部署、水平扩展、滚动升级、自动故障恢复等功能,减少了操作负担。
  2. 高可用性

    • Kubernetes提供了内置的高可用性机制,允许您在多个节点上运行应用程序的副本,以确保应用程序的可用性。如果某个节点或容器失败,Kubernetes可以自动迁移工作负载以保持应用程序的正常运行。
  3. 多租户支持

    • Kubernetes支持命名空间(Namespaces),可以将集群划分为多个虚拟集群,每个命名空间都有自己的资源隔离,适用于多租户环境。
  4. 服务发现和负载均衡

    • Kubernetes提供了内置的服务发现和负载均衡功能,允许应用程序组件相互发现并与其他服务通信,而无需硬编码IP地址和端口。
  5. 声明式配置

    • Kubernetes使用声明式配置来定义应用程序的状态和规模,而不是命令式的操作。这样,您只需描述所需的状态,而不必关心如何达到该状态,Kubernetes会负责实现。
  6. 自动伸缩

    • Kubernetes可以根据工作负载的需求自动扩展应用程序,以满足流量的变化。这可以节省资源并确保应用程序的性能。
  7. 滚动升级和回滚

    • Kubernetes支持滚动升级,允许您在不中断服务的情况下逐步更新应用程序。如果升级失败,您可以轻松地回滚到之前的版本。
  8. 资源管理

    • Kubernetes提供了资源管理功能,允许您限制容器的CPU和内存使用,以确保资源公平共享。
  9. 生态系统支持

    • Kubernetes具有丰富的生态系统,包括各种插件、工具和集成,用于监控、日志记录、安全性、认证等方面。

然而,对于一些简单的应用场景,使用Docker本身可能足够了,特别是在开发和测试阶段。Kubernetes在复杂的容器化应用程序中表现出色,但也需要更多的配置和管理工作。因此,选择Kubernetes还是纯粹使用Docker取决于您的应用程序需求和规模。如果应用程序较小且需要简单的容器管理,Docker可能足够;但如果需要高可用性、自动化和扩展性,那么Kubernetes可能更适合。

你可能感兴趣的:(运维,kubernetes,笔记,容器)