当前位置: 首页 > article >正文

kubernetes学习-概念3

工作负载资源

Kubernetes 提供了几个内置的 API 来声明式管理工作负载及其组件。

最终,你的应用以容器的形式在 Pods 中运行; 但是,直接管理单个 Pod 的工作量将会非常繁琐。例如,如果一个 Pod 失败了,你可能希望运行一个新的 Pod 来替换它。Kubernetes 可以为你完成这些操作。

你可以使用 Kubernetes API 创建工作负载对象, 这些对象所表达的是比 Pod 更高级别的抽象概念,Kubernetes 控制平面根据你定义的工作负载对象规约自动管理 Pod 对象。

用于管理工作负载的内置 API 包括:

Deployment (也间接包括 ReplicaSet) 是在集群上运行应用的最常见方式。Deployment 适合在集群上管理无状态应用工作负载, 其中 Deployment 中的任何 Pod 都是可互换的,可以在需要时进行替换。

StatefulSet 允许你管理一个或多个运行相同应用代码、但具有不同身份标识的 Pod。 StatefulSet 与 Deployment 不同。Deployment 中的 Pod 预期是可互换的。 StatefulSet 最常见的用途是能够建立其 Pod 与其持久化存储之间的关联。 例如,你可以运行一个将每个 Pod 关联到 PersistentVolume 的 StatefulSet。如果该 StatefulSet 中的一个 Pod 失败了,Kubernetes 将创建一个新的 Pod, 并连接到相同的 PersistentVolume。

DaemonSet 定义了在特定节点上提供本地设施的 Pod, 例如允许该节点上的容器访问存储系统的驱动。当必须在合适的节点上运行某种驱动或其他节点级别的服务时, 你可以使用 DaemonSet。DaemonSet 中的每个 Pod 执行类似于经典 Unix / POSIX 服务器上的系统守护进程的角色。DaemonSet 可能对集群的操作至关重要, 例如作为插件让该节点访问集群网络, 也可能帮助你管理节点,或者提供增强正在运行的容器平台所需的、不太重要的设施。 你可以在集群的每个节点上运行 DaemonSets(及其 Pod),或者仅在某个子集上运行 (例如,只在安装了 GPU 的节点上安装 GPU 加速驱动)。

你可以使用 Job 和/或 CronJob 定义一次性任务和定时任务。 Job 表示一次性任务,而每个 CronJob 可以根据排期表重复执行。

Deployments

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
 

在该例中:

  • 创建名为 nginx-deployment(由 .metadata.name 字段标明)的 Deployment。 该名称将成为后续创建 ReplicaSet 和 Pod 的命名基础。

  • 该 Deployment 创建一个 ReplicaSet,它创建三个(由 .spec.replicas 字段标明)Pod 副本。

  • .spec.selector 字段定义所创建的 ReplicaSet 如何查找要管理的 Pod。 在这里,你选择在 Pod 模板中定义的标签(app: nginx

  • template 字段包含以下子字段:
    • Pod 被使用 .metadata.labels 字段打上 app: nginx 标签。
    • Pod 模板规约(即 .template.spec 字段)指示 Pod 运行一个 nginx 容器, 该容器运行版本为 1.14.2 的 nginx Docker Hub 镜像。
    • 创建一个容器并使用 .spec.template.spec.containers[0].name 字段将其命名为 nginx

kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml

kubectl get deployments

在检查集群中的 Deployment 时,所显示的字段有:

  • NAME 列出了名字空间中 Deployment 的名称。
  • READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。
  • UP-TO-DATE 显示为了达到期望状态已经更新的副本数。
  • AVAILABLE 显示应用可供用户使用的副本数。
  • AGE 显示应用程序运行的时间。

请注意期望副本数是根据 .spec.replicas 字段设置 3。

要查看 Deployment 上线状态

kubectl rollout status deployment/data-intellegence

kubectl rollout status 是 Kubernetes(K8s) 中的一个命令,用于查看资源的状态。这个命令通常用于查看特定部署(deployment)的状态。

要查看 Deployment 创建的 ReplicaSet(rs),运行 kubectl get rs

ReplicaSet 的名称格式始终为 [Deployment 名称]-[哈希]。 该名称将成为所创建的 Pod 的命名基础。 其中的哈希字符串与 ReplicaSet 上的 pod-template-hash 标签一致。

ReplicaSet是Kubernetes中的一种控制器,用于确保由其管控的Pod对象副本数在任一时刻都能精确满足期望的数量

ReplicaSet的工作原理是通过一组字段来定义的,包括一个用来识别可获得的Pod的集合的选择算符、一个用来标明应该维护的副本个数的数值、一个用来指定应该创建新Pod以满足副本个数条件时要使用的Pod模板等。当需要创建新的Pod时,ReplicaSet会使用所提供的Pod模板。ReplicaSet通过其选择算符来辨识要获得的Pod集合,当前活动对象的数量与期望的数量不吻合时,多则删除,少则通过Pod模板创建以补足,等Pod资源副本数量符合期望值后即进入下一轮和解循环。

要查看每个 Pod 自动生成的标签,运行 kubectl get pods --show-labels

kubectl get pods --show-labels


http://www.kler.cn/a/137556.html

相关文章:

  • Redis--高可用(主从复制、哨兵模式、分片集群)
  • doris:基于 Arrow Flight SQL 的高速数据传输链路
  • 【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子
  • 密码学精简版
  • 端口镜像SPAN与RSPAN
  • PWN 的知识之如何利用栈溢出利用后门函数
  • 函数有返回类型,但函数体未返回类型,程序崩溃问题记录
  • 【机器学习基础】K-Means聚类算法
  • Vue学习
  • LeetCode | 19. 删除链表的倒数第 N 个结点
  • QMenuBar和QToolBar使用同一个QAction
  • Vue Router的使用
  • 详解Python安装requests库的实例代码
  • Python之字典
  • 普冉PY32系列(十) 基于PY32F002A的6+1通道遥控小车I - 综述篇
  • 关闭bitlocker加密
  • 基于纹理特征的kmeas聚类的图像分割方案
  • 最近带着江苏高校的学生做软件测试项目实战
  • Redis缓存雪崩、穿透、双写一致
  • HarmonyOS基础组件之Button三种类型的使用
  • 安全领航,共筑敏捷开发新时代【云驻共创】
  • pyecharts画图结果存为图片
  • vue路由传参的详解1.命名路由的传参和取出2.query传参和取出3.meta传参和取出4.其他方式5.注意点 代码和注释
  • java如何设置动态表名?
  • 51单片机应用
  • 脚本(JavaScript)-练手-简单的随机音乐播放器