zoukankan      html  css  js  c++  java
  • k8s中Pod、ReplicaSet、Deployment、Service的概念

    转自 https://blog.csdn.net/qq_35080214/article/details/111177787

    一、Pod
    Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。

    简单来说k8s不想直接操作container,因为操作container的事情是docker来做的,k8s中要有自己的最小操作单位,称之为Pod。说白了,Pod就是一个或多个Container的组合。

    每个Pod中都有一个pause容器,pause是Kubernetes基础设施的一部分,Kubernetes管理的所有pod里,pause容器是第一个启动的,用于实现Kubernetes集群里pod之间的网络通讯。

    二、ReplicaSet

    ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。(确保任何时间都有指定数量的 Pod 副本在运行)。

    2.1 Label(标签)
    Label是Kubernetes系统中的一个核心概念。
    Label以key/value键值对的形式附加到各种对象上,如Pod、Service、RC、Node等。
    Label定义了这些对象的可识别属性,用来对它们进行管理和选择。Label可以在创建时附加到对象上,也可以在对象创建后通过API进行管理。

     三、Deployment

    Deployment用于管理Pod、ReplicaSet,可实现滚动升级和回滚应用、扩容和缩容。

    四、Service
    试想一个问题,ReplicaSet定义了pod的数量是2,当一个pod由于某种原因停止了,ReplicaSet会新建一个pod,以确保运行中的pod数量始终是2。但每个pod都有自己的ip,前端请求不知道这个新pod的ip是什么,那前端的请求如何发送到新pod中呢?
    答案是使用Service
    k8s的Service定义了一个服务的访问入口地址,前端的应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,来自外部的访问请求被负载均衡到后端的各个容器应用上。Service与其后端Pod副本集群之间则是通过Label Selector实现关联。
    简单来说前端请求不是直接发送给Pod,而是发送到Service,Service再将请求转发给pod。

    k8s中的service中有三种类型:

    • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问。
    • NodePort:在每个Node上打开一个端口以供外部访问。
    • LoadBalancer:通过外部的负载均衡器来访问。

    五、总结
    Pod里是容器,Pod被ReplicaSet管理,ReplicaSet控制pod的数量;ReplicaSet被Deployment管理,Deployment控制pod应用的升级、回滚,当然也能控制pod的数量。Service提供一个统一固定入口,负责将前端请求转发给Pod。

    常用选项:
    Deployment:
    ① apiVersion 是当前配置格式的版本。
    ② kind 是要创建的资源类型,这里分别创建了Deployment和Service。
    ③ metadata 是该资源的元数据,name 是必需的元数据项。
    ④ spec 部分是 Deployment 的规格说明。
    ⑤ replicas 指明副本数量,默认为 1。
    ⑥matchLabels 指匹配的pod的标签是什么。
    ⑦ template 定义 Pod 的模板,这是配置文件的重要部分。
    ⑧ metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
    ⑨ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。

    Service:
    ① port Service 服务暴露的端口
    ② targetPort 容器暴露的端口
    ③ type Service的类型

  • 相关阅读:
    Windows莫名内存到百分之百,需要修改虚拟内存
    idea中的springboot的maven项目报错Failed to clean project: Failed to delete D: ew_shunyishunyi argetshunyiWEB-INFclassesstatic
    VMware 启动虚拟机黑屏(Ubuntu)
    MySQL 8.0.18安装教程(windows 64位)
    ubunt中,使用命令su命令切换root账户,提示认证失败
    AngularJS 杂项知识点
    AngularJS $watch 性能杀手
    AngularJS controller as vm方式
    AngularJS 路由 resolve属性
    AngularJS $observe $watch
  • 原文地址:https://www.cnblogs.com/vzhangxk/p/15176815.html
Copyright © 2011-2022 走看看