【Kubernetes】StatefulSet对象详解

news2024/12/29 10:41:40

文章目录

  • 简介
    • 1. StatefulSet对象的概述、作用及优点
      • 1.1 对比Deployment对象和StatefulSet对象
      • 1.2 以下是比较Deployment对象和StatefulSet对象的优缺点:
    • 2. StatefulSet对象的基础知识
      • 2.1 StatefulSet对象的定义
        • 2.1.1 下表为StatefulSet对象的定义及其属性:
      • 2.2 Pod对象和StatefulSet对象之间的关系
        • 2.2.1 下表为 Pod对象和StatefulSet对象特征的对比:
      • 2.3 StatefulSet的命名规则
        • 2.3.1 下表为StatefulSet的命名规则的描述:
      • 2.4 StatefulSet的副本集管理
        • 2.4.1 下表为StatefulSet的副本集管理的描述:
    • 3. StatefulSet对象的部署
      • 3.1 创建StatefulSet对象
        • 3.1.1 以下是创建StatefulSet对象的基本步骤:
          • 3.1.1.1 以下是创建StatefulSet对象的示例yaml文件:
      • 3.2 定义StatefulSet中每个Pod的唯一标识符
        • 3.2.1 以下是 定义StatefulSet中每个Pod的唯一标识符的示例:
      • 3.3 使用Headless Service对象管理StatefulSet对象中的Pod
        • 3.3.1 StatefulSet 中使用 Headless Service 的基本步骤:
    • 4. StatefulSet对象的更新和扩缩容
      • 4.1 更新StatefulSet的镜像版本
        • 4.1.1 操作步骤:
      • 4.2 横向扩展和缩小StatefulSet的实例数量
        • 4.2.1 操作示例:
      • 4.3 Vertical Pod Autoscaler对象管理StatefulSet对象
        • 4.3.1下表是 Vertical Pod Autoscaler 对象管理 StatefulSet 对象的一些示例。
    • 5. StatefulSet对象的数据管理
      • 5.1 数据卷的定义和使用
      • 5.2 PV和PVC的管理
      • 5.3 对数据进行备份和恢复
    • 6. StatefulSet对象的操作和监控
      • 6.1 使用kubectl命令行接口管理StatefulSet对象
      • 6.2 监控StatefulSet对象及其相关组件的运行情况
        • 6.2.1 监控StatefulSet对象
        • 6.2.2 监控StatefulSet中的Pod对象
        • 6.2.3 监控Kubernetes集群中的组件
          • 6.2.3.1 以下是监视Kubernetes集群中的组件的一些工具和方法的优缺点:
      • 6.3 解决StatefulSet对象的故障
        • 6.3.1 基本的调试工具的优缺点对比和下载地址

简介

在 Kubernetes 中运行应用程序的常见方法是创建部署对象(Deployment),它管理一个或多个 Pod 实例的副本集。但是,某些应用程序需要保留唯一标识符和网络标识符,比如数据库应用程序。这时候就需要用到 StatefulSet 对象。

StatefulSet 是 Kubernetes 的一种对象类型,提供管理有状态应用程序的能力。它可以用于管理有唯一标识符和网络标识符要求的应用程序,如数据库、消息队列等。

1. StatefulSet对象的概述、作用及优点

1.1 对比Deployment对象和StatefulSet对象

Deployment 对象和 StatefulSet 对象都用于管理应用程序的实例,两者有以下区别:

  • 命名的稳定性:Deployment 管理的 Pod 实例在删除和重新创建时,它们的名称会发生变化,所以无法保证 Pod 的稳定标识符。而 StatefulSet 可以为 Pod 实例提供稳定的名称和网络标识符。

  • 滚动更新:Deployment 对象通过滚动更新,升级应用程序的实例。而 StatefulSet 对象需要逐个升级每个 Pod 实例,以确保应用程序稳定性。

  • ``持久化数据`:StatefulSet 对象支持对有状态应用程序的持久化数据进行管理。

因此,StatefulSet 适用于需要稳定标识符和网络标识符以及需要持久化存储的有状态应用程序。

1.2 以下是比较Deployment对象和StatefulSet对象的优缺点:

优缺点DeploymentStatefulSet
POD的管理Deployment对象主要用于管理无状态的POD。StatefulSet对象主要用于管理有状态的POD。
命名的稳定性当POD失败并被重建时,Deployment对象为其分配新的名称。当POD失败并被重建时,StatefulSet对象将保留相同的名称。
稳定的网络标识Deployment对象不保证每个POD的网络标识符。StatefulSet对象为每个POD提供稳定的网络标识符。
有序部署的支持Deployment对象不支持对有状态应用程序进行计划部署。StatefulSet对象支持有序部署,以避免应用程序在非有序器中跳跃。
存储卷的支持Deployment对象支持使用存储卷和容器映像一起使用。StatefulSet对象支持在多个POD之间共享磁盘状态。
可扩展性Deployment对象适合需要大量调整的长时间运行的任务StatefulSet对象适合需要有状态数据管理的长时间运行任务。

2. StatefulSet对象的基础知识

2.1 StatefulSet对象的定义

StatefulSet 对象是 Kubernetes API 中的一种对象类型,它管理 Pod 实例的唯一标识符和网络标识符。StatefulSet 以容器化应用程序为基础,保证了每个实例都有唯一的标识符,如 DNS 名称。

2.1.1 下表为StatefulSet对象的定义及其属性:

属性描述
apiVersion使用的Kubernetes API版本
kindStatefulSet对象类型
metadataStatefulSet对象的元数据,包括名称、命名空间、标签等
specStatefulSet对象的规格,包括副本数、pod模板、卷、服务名称等
statusStatefulSet对象的状态信息,包括当前状态、当前副本数、Ready副本数等

2.2 Pod对象和StatefulSet对象之间的关系

每个 StatefulSet 都在后台控制着与一个或多个相同配置的 Pod 组。使用 StatefulSet 能保证这些 Pod 按照一定的顺序部署,同时它们都有稳定的网络标识符。与 Deployment 不同,每个 Pod 的名称是固定的,并且即使重启也不会改变。

2.2.1 下表为 Pod对象和StatefulSet对象特征的对比:

特征PodStatefulSet
稳定性每次重新创建Pod会获得新ID,无法持久化存储每个pod都有固定的名称和唯一的ID,能够与持久化存储进行交互
调度顺序没有保证Pod调度顺序可以按照顺序部署、更新和删除Pod
管理策略单独操作,不受其他Pod影响以集合为单位操作Pod,可扩展性更强
扩容伸缩扩容、缩容需要手动操作自动调节Pod数量,保证每个Pod都有唯一名称和ID
存储无法保证Pod之间的存储共享确保每个Pod都可以访问相同的持久化存储

2.3 StatefulSet的命名规则

按照名称命名约定,StatefulSet 的名称必须以小写字母开头,只能包含小写字母、数字和连字符(-),长度不能超过 63 个字符。

2.3.1 下表为StatefulSet的命名规则的描述:

命名规则描述
字符集包括小写字母、数字和’-‘,不能以’-'结尾
长度不超过63个字符
命名空间如果命名空间存在,则命名空间和StatefulSet名称中间用’-'连接
名称格式由小写字母开头,可包含小写字母、数字和’-’

请注意,名称格式应符合DNS子域名的规则,这样才能被正常解析。建议使用短、有含义的名称,便于管理。|

2.4 StatefulSet的副本集管理

与 Deployment 类似,StatefulSet 也可以管理多个 Pod 的副本集。但它需要保证副本集中每个 Pod 的唯一标识符和网络标识符是不变的。在对 StatefulSet 进行扩展和缩容时,需要在每个 Pod 上的启动和终止之间保留稳定的标识符和网络标识符。

2.4.1 下表为StatefulSet的副本集管理的描述:

策略描述
创建在创建StatefulSet时,会根据指定的副本数自动创建相应的Pod
更新更新StatefulSet时,会根据更新策略分别进行更新。策略有:OnDelete(默认)、RollingUpdate
扩容使用kubectl scale命令或更新StatefulSet的spec.replicas字段进行扩容
缩容使用kubectl scale命令或更新StatefulSet的spec.replicas字段进行缩容
升级更新Pod模板时会根据更新策略开始升级。策略有:OnDelete(默认)、RollingUpdate
有序部署StatefulSet会按照其在spec中定义的Pod的名称顺序逐个启动和关闭Pod

请注意,StatefulSet的副本集管理相对于其他同级别的控制器来说更加复杂,理解和掌握其中的策略和规则非常重要。|

3. StatefulSet对象的部署

3.1 创建StatefulSet对象

要创建 StatefulSet 对象,需要指定该 StatefulSet 管理的 Pod 模板,并选择合适的 Pod 副本数。

3.1.1 以下是创建StatefulSet对象的基本步骤:

  1. 准备Pod模板:定义需要创建的StatefulSet对象中包含的Pod的配置,例如容器镜像、容器端口等。

  2. 创建StatefulSet对象:定义StatefulSet对象,包括元数据、规格等信息并指定Pod模板。

  3. 应用StatefulSet对象:使用kubectl apply等命令将定义的StatefulSet对象应用到Kubernetes集群中。

3.1.1.1 以下是创建StatefulSet对象的示例yaml文件:
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: webapp
  labels:
    app: simpleweb
spec:
  replicas: 3
  serviceName: webapp
  selector:
    matchLabels:
      app: simpleweb
  template:
    metadata:
      labels:
        app: simpleweb
    spec:
      containers:
        - name: simpleweb
          image: nginx:latest
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              name: persistent-storage
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
        annotations:
          volume.beta.kubernetes.io/storage-class: "standard"
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 5Gi

这个示例创建了一个名为webapp的StatefulSet对象,包含3个Pod的副本,服务名称为webapp,使用nginx的最新版本镜像,并向容器内挂载了一个持久化存储。

可以使用 kubectl apply -f filename.yaml 命令来创建该StatefulSet对象和相关的Pod。

3.2 定义StatefulSet中每个Pod的唯一标识符

在 StatefulSet 中,每个 Pod 都会被赋予一个稳定的唯一标识符,格式为 StatefulSetName-Ordinal。 Ordinal 是从 0 开始的整数,表示 Pod 在 StatefulSet 中的顺序。

为了定义 StatefulSet 中每个 Pod 的唯一标识符,需要在 Pod 模板中指定以下两个属性:

  • metadata.name:为 Pod 设置一个基础名称。
  • spec.hostname:为 Pod 设置带 Ordinal 的完全限定域名,例如 PodNameOrdinal.ServiceName.HeadlessServiceNamespace.svc.cluster.local。

3.2.1 以下是 定义StatefulSet中每个Pod的唯一标识符的示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: webapp
  labels:
    app: simpleweb
spec:
  replicas: 3
  serviceName: webapp
  selector:
    matchLabels:
      app: simpleweb
  template:
    metadata:
      labels:
        app: simpleweb
      name: simpleweb
    spec:
      hostname: simpleweb-$(hostname).webapp
      containers:
        - name: simpleweb
          image: nginx:latest
          ports:
            - containerPort: 80

在这个示例中,我们通过将 spec.hostname 设置为 simpleweb-$(hostname).webapp 来定义每个 Pod 的唯一标识符。这里的 $(hostname) 会被替换为 Pod 的序号。例如,其中一个 Pod 的名称可能是 simpleweb-0.webapp。

3.3 使用Headless Service对象管理StatefulSet对象中的Pod

StatefulSet 可以使用 Headless Service 对象来管理它的 Pod,从而可以控制多个 Pod 之间的网络通信。Headless Service 不提供 Cluster IP,但它提供 DNS 记录,返回所有 Pod 的网络标识符。

3.3.1 StatefulSet 中使用 Headless Service 的基本步骤:

  1. 定义 Headless Service:定义一个 Service 类型为 Headless,用于管理相关的 Pod。Service 名称使用 .spec.serviceName 属性关联到 StatefulSet。
apiVersion: v1
kind: Service
metadata:
  name: webapp
  labels:
    app: simpleweb
spec:
  type: ClusterIP
  selector:
    app: simpleweb
  clusterIP: None
  1. 更新 StatefulSet:将 StatefulSet 的 .spec.serviceName 属性设置为上一步定义的 Headless Service 名称。另外,确保在 Pod 模板中配置了 hostname 和 subdomain 字段。
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: webapp
  labels:
    app: simpleweb
spec:
  replicas: 3
  serviceName: webapp
  selector:
    matchLabels:
      app: simpleweb
  template:
    metadata:
      labels:
        app: simpleweb
      name: simpleweb
    spec:
      hostname: simpleweb-$(hostname).webapp
      subdomain: webapp
      containers:
        - name: simpleweb
          image: nginx:latest
          ports:
            - containerPort: 80

4. StatefulSet对象的更新和扩缩容

4.1 更新StatefulSet的镜像版本

StatefulSet 对象可以通过更新镜像版本来更新应用程序。

4.1.1 操作步骤:

首先,您需要查找要升级的镜像版本。您可以通过Docker Hub或Kubernetes注册表等命令行工具来查找可用的版本。例如,使用下面的命令可以查找最新的nginx版本:

$ docker search nginx

确认要更新的StatefulSet名称和命名空间。使用下面的命令列出所有StatefulSets:

$ kubectl get statefulsets

停止StatefulSet中的所有Pod实例:

$ kubectl scale statefulsets <statefulset-name> --replicas=0

更新StatefulSet的镜像版本。使用下面的命令可以更新镜像版本:

$ kubectl set image statefulset/<statefulset-name> <container-name>=<new-image-version>

执行完更新后,重新启动StatefulSet Pod实例:

$ kubectl scale statefulsets <statefulset-name> --replicas=<desired-number-of-replicas>

在执行上述步骤时,请注意替换适当的名称,并根据需要更改其他标志,以适应您的环境。

4.2 横向扩展和缩小StatefulSet的实例数量

可以通过更新 StatefulSet 对象中的 Pod 副本数来横向扩展或缩小 StatefulSet 的实例数量。

4.2.1 操作示例:

横向扩展和缩小StatefulSet的实例数量可以使用kubectl命令行工具完成。

  1. 扩展StatefulSet的实例数:

使用kubectl scale命令扩展StatefulSet的实例数。语法如下:

kubectl scale statefulset <statefulset-name> --replicas=<desired-number-of-replicas>

StatefulSet名称和所需副本的数量是必需的参数。例如,如果要将名为 “my-statefulset”的 StatefulSet 的实例数扩展为 5,则可以运行以下命令:

kubectl scale statefulset my-statefulset --replicas=5

确认扩展已成功完成:

kubectl get statefulset <statefulset-name>

此命令将显示副本数等详细信息,以及一个READY列,该列显示了可用的副本数和所需的副本数。

  1. 缩小StatefulSet实例的数量:

使用kubectl scale命令缩小StatefulSet实例数。语法如下:

kubectl scale statefulset <statefulset-name> --replicas=<desired-number-of-replicas>

StatefulSet名称和所需副本的数量是必需的参数。例如,如果要将名为 “my-statefulset”的 StatefulSet 的实例数量缩小为 3,则可以运行以下命令:

kubectl scale statefulset my-statefulset --replicas=3

确认缩小已成功完成:

kubectl get statefulset <statefulset-name>

此命令将显示副本数等详细信息,以及一个READY列,该列显示了可用的副本数和所需的副本数。

4.3 Vertical Pod Autoscaler对象管理StatefulSet对象

Vertical Pod Autoscaler (VPA) 是 Kubernetes 中用于自动调整 Pod 的资源请求和限制的机制,它可以管理 StatefulSet 对象的资源请求和限制。

4.3.1下表是 Vertical Pod Autoscaler 对象管理 StatefulSet 对象的一些示例。

操作kubectl 命令
创建 Vertical Pod Autoscaler 对象kubectl apply -f <vpa-file.yaml>
删除 Vertical Pod Autoscaler 对象kubectl delete vpa <vpa-name>
获取 Vertical Pod Autoscaler 对象kubectl get vpa
更新 Vertical Pod Autoscaler 对象kubectl apply -f <vpa-file.yaml>
将 Vertical Pod Autoscaler 应用于 StatefulSetkubectl annotate statefulset <statefulset-name> verticalpodautoscaler.kubernetes.io/enable='true'

其中,<vpa-file.yaml> 是包含 Vertical Pod Autoscaler 对象的 YAML 文件的路径。<vpa-name> 是要删除的 Vertical Pod Autoscaler 的名称,<statefulset-name> 是要将 Vertical Pod Autoscaler 应用于的 StatefulSet 名称。

在针对 StatefulSet 配置 VPA 后,VPA 将自动计算每个 Pod 的资源需求,然后动态调整 Pod 的资源请求和限制。这可以提高集群的资源利用率和可靠性,因为 VPA 可以自动调整 Pod 的资源请求和限制,并在需要时增加或减少 Pod 的数量。

5. StatefulSet对象的数据管理

5.1 数据卷的定义和使用

数据卷是一种可以用来存储数据的方案,它可以被挂载到Pod中,这样数据就可以在不同的Pod之间共享。StatefulSet对象支持使用多种类型的数据卷,包括:

  • 空白目录卷
  • 主机路径卷
  • 配置映射卷
  • 存储卷

下面是数据卷的定义和使用示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
configMap:
name: html-configmap
items:
- key: index.html
path: index.html

在这个示例中,我们使用了一个配置映射卷(html-configmap)来将一个目录(index.html)挂载到Nginx的容器中。请注意,在volumes段中,我们定义了该卷的名称(html),该名称然后被用于volumeMounts段中,表示将卷挂载到该路径。

5.2 PV和PVC的管理

PV(Persistent Volume)和PVC(Persistent Volume Claim)被设计用来对应用程序提供长期持久性的数据存储。PV是集群中的一个资源,它表示一个物理卷,如NFS共享卷、云存储、本地硬盘等等。而PVC则是一个请求,用于申请特定容量和属性的PV。StatefulSet对象可以使用由管理员创建的PV中分配出来的PVC:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: html-pvc

在这个示例中,我们使用了一个PVC(html-pvc),它是由管理员创建的,并且在StatefulSet对象的volumes段中引用它。在运行时,当顶部的Pod被调度到节点上时,Kubernetes将在集群中查找有足够容量、存储类型和访问模式的PV,将其绑定到PVC上,然后将数据挂载到容器中。

5.3 对数据进行备份和恢复

下表是一些常用的备份和恢复 StatefulSet 数据的 Kubernetes 资源和操作:

操作kubectl 命令
创建 PVCkubectl apply -f <pvc-file.yaml>
删除 PVCkubectl delete pvc <pvc-name>
获取 PVCkubectl get pvc
备份 PVC 中的数据使用备份工具(如 Velero)备份 PVC 中的数据
恢复 PVC 中的数据使用备份工具(如 Velero)恢复之前备份的 PVC 中的数据
创建 PVkubectl apply -f <pv-file.yaml>
删除 PVkubectl delete pv <pv-name>
获取 PVkubectl get pv
恢复 PV 中的数据将 PV 挂载到 Pod 中,并使用命令行/文件浏览器复制数据

在使用这些资源和操作时,我们可以先创建 PVC 和 PV,然后将 PVC 挂载到 StatefulSet 中的 Pod 中。使用备份工具备份 PVC 中的数据以及对应的 PV,如果需要恢复数据,可以先恢复 PV,然后将 PVC 挂载到新的 Pod 中,从 PV 中复制数据。

需要注意的是,备份和恢复数据时,需要考虑 StatefulSet 中 Pod 的稳定性和数据一致性,以避免数据损坏或丢失。

6. StatefulSet对象的操作和监控

6.1 使用kubectl命令行接口管理StatefulSet对象

  1. 创建StatefulSet对象

通过Kubernetes命令行工具kubectl可以创建一个新的StatefulSet对象,如下所示:

kubectl create -f statefulset.yaml

其中,statefulset.yaml是包含StatefulSet对象定义的YAML文件。

  1. 更新StatefulSet对象

如果需要修改StatefulSet对象的定义,可以使用kubectl命令进行更新。例如,修改StatefulSet的副本数量:

kubectl patch statefulset my-statefulset -p '{"spec":{"replicas":3}}'
  1. 删除StatefulSet对象

如果要删除已有的StatefulSet对象,可以使用以下命令:

kubectl delete statefulset my-statefulset

6.2 监控StatefulSet对象及其相关组件的运行情况

6.2.1 监控StatefulSet对象

可以使用kubectl get命令查看StatefulSet对象的状态:

kubectl get statefulset

该命令将显示StatefulSet对象的名称、副本数量、当前运行的Pod数量、以及相关的Selector和Pod模板信息。

此外,可以使用kubectl describe命令查看有关StatefulSet对象的更详细信息:

kubectl describe statefulset my-statefulset

6.2.2 监控StatefulSet中的Pod对象

可以使用kubectl get命令来查看StatefulSet中现有的Pod对象:

kubectl get pods -l app=my-app

其中,app=my-app指定了我们要查找的Pod的标签。

同样地,可以使用kubectl describe命令查看有关Pod的详细信息:

kubectl describe pod my-app-0

6.2.3 监控Kubernetes集群中的组件

Kubernetes集群中有多个重要的组件,包括API服务器、etcd、kube-scheduler、kube-controller-manager和kubelet等。这些组件在运行时可能会出现故障,影响整个集群的稳定性。

可以使用Kubernetes提供的各种监控工具来监控集群中的组件状态。例如,可以使用Prometheus来监控集群中各个组件的运行状况,以及各类指标的变化情况。

6.2.3.1 以下是监视Kubernetes集群中的组件的一些工具和方法的优缺点:
工具/方法优点缺点
kubectl 监视命令简单易用,无需安装额外的软件功能相对较为简单,只能检查少量的节点属性和当前状态
Kubernetes 监控监控 Kubernetes 集群各个组件的运行状态可视化展示较弱,使用起来相对不太方便
cAdvisor轻量级的孤立容器监测器,适用于 Docker 容器环境只能监测孤立容器环境下的参数,对于 Kubernetes 的控制面稍显力度不够
Prometheus对 Kubernetes 集群的监控非常适用部署和配置上相对较为复杂,需要一定的技术壁垒
Grafana用于接收和展示 Prometheus 的指标和警报需要部署 Prometheus 且配置在正确的位置,搭建上稍难

6.3 解决StatefulSet对象的故障

当StatefulSet对象发生故障时,可能会出现各种错误和警告。在处理这些问题之前,需要先查找出故障的原因,并尝试解决这些问题。

基本的调试工具包括Kubernetes提供的各种命令行工具,如kubectl、kubeadm和kubelet,以及各种监控工具,如Prometheus、Grafana和Elasticsearch等。

6.3.1 基本的调试工具的优缺点对比和下载地址

工具名称优点缺点下载地址
kubectl功能丰富,管理集群、Pod和服务相当方便缺少 GUI 插件; 学习曲线略为陡峭https://kubernetes.io/docs/tasks/tools/install-kubectl/
kubeadm快速部署Kubernetes集群需要一些基础知识;无法自定义集群https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kubelet监管容器的状态无法独立使用;需要其他组件配合使用https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubelet-kubeadm-and-kubectl
kustomize自定义Kubernetes资源学习曲线陡峭;缺少 GUI 插件https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#kustomize-installation
kubespray快速部署复杂的Kubernetes集群繁琐的配置https://github.com/kubernetes-sigs/kubespray
kubectl diff显示Kubernetes资源之间的差异只能比较两个资源;缺少GUI插件https://github.com/cesanta/kubectl-diff
kube-ps1美化Shell提示符并且方便切换无法独立使用;需要在shell下安装https://github.com/jonmosco/kube-ps1
stern统一在单个终端监视多个Pod没有 GUI 插件; 学习曲线略为陡峭https://github.com/wercker/stern
kubetail将多个 Pod 的日志聚合到一个流中没有 GUI 插件;只能记录标准输出流;https://github.com/johanhaleby/kubetail

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上岸川大网安院

一些感慨 一年多没写过啥玩意了&#xff0c;因为考研去了嘿嘿。拟录取名单已出&#xff0c;经历一年多的考研之路也可以顺利打上句号了。 我的初试成绩是380&#xff0c;政治65&#xff0c;英语81&#xff0c;数学119&#xff0c;专业课115。 回顾这一路&#xff0c;考研似乎也…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结合注意力机制多输…

Vue3使用Vant组件库避坑总结

文章目录前言一、问题二、解决方法三、问题出现原因总结经验教训前言 本片文章主要写了&#xff0c;Vue3开发时运用Vant UI库的一些避坑点。让有问题的小伙伴可以快速了解是为什么。也是给自己做一个记录。 一、问题 vue3版本使用vant失败&#xff0c;具体是在使用组件时失效…

IPBX系统快速部署和Freeswitch 1.10.7自动安装

IPBX系统部署文档 IPPBX系统 1.10.7版本Freeswitch &#xff0c;手机互联互通&#xff0c;SIP协议&#xff0c;分机互相拨打免费通话清晰&#xff0c;支持wifi或4G网络互相拨打电话&#xff0c;可以对接OLT设备&#xff0c;系统可以部署到本地物理机&#xff0c;也可以部署到阿…

工程质量之研发过程管理需要关注的点

一、背景 作为程序猿&#xff0c;工程质量是我们逃不开的一个话题&#xff0c;工程质量高带来的好处多多&#xff0c;我在写这篇文章的时候问了一下CHATGPT&#xff0c;就当娱乐一下&#xff0c;以下是ChatGPT的回答&#xff1a; 1、提高产品或服务的可靠性和稳定性。高质量的系…

光时域反射仪那个品牌的好用

光时域反射仪 哪个品牌好用 光时域反射仪要怎么选到合适自己的&#xff0c;这些问题 可能一直在困扰这一线的工作人员&#xff0c;下面小编就为大家一一解答下 首先光时域域反射仪是一款检测光纤线路的损耗 长度 以及 事件点的一款设备&#xff0c;在诊断 光纤线路 故障点的情…

从零开始学架构——CAP理论

CAP定理 CAP 定理&#xff08;CAP theorem&#xff09;又被称作布鲁尔定理&#xff08;Brewer’s theorem&#xff09;&#xff0c;是加州大学伯克利分校的计算机科学家埃里克布鲁尔&#xff08;Eric Brewer&#xff09;在 2000 年的 ACM PODC 上提出的一个猜想。2002 年&…

Web前端 HTML、CSS

HTML与CSSHTML、CSS思维导图一、HTML1.1、HTML基础文本标签1.2、图片、音频、视频标签1.3、超链接、表格标签1.4、布局1.5、表单标签1.6、表单项标签综合使用1.7、HTML小结二、CSS&#xff08;简介&#xff09;2.1、引入方式2.2、选择器2.3、CSS属性Web前端开发总览 Html&…

案例拆解丨ChatGPT+塔罗牌,批量起号、暴利引流,小白也能轻松月入10000+

ChatGPT 的出现&#xff0c;大大拉低了很多行业的门槛&#xff0c;比如客服、教育、翻译、自媒体……而塔罗牌占卜&#xff0c;肯定也是其中之一。 塔罗牌是一种占卜工具&#xff0c;由78张牌组成。可以用于占卜、灵性探索、个人成长和自我发现。 这是一个相对小众&#xff0c…

LinuxGUI自动化测试框架搭建(十三)-创建工具集目录tools并封装文件复制方法cpoyFile.py

(十三)-创建工具集目录tools并封装文件复制方法cpoyFile.py 1 tools的作用2 创建tools目录3 创建文件复制方法cpoyFile.py4 设计cpoyFile.py4.1 安装shutil4.2 导入模块4.3 脚本设计5 目前框架目录1 tools的作用 为了存放框架需要用到的一些常用工具或方法,比如文件复制功能…

OJ系统刷题 第九篇(难篇)

13441 - 求小数的某一位&#xff08;难题&#xff0c;二刷、三刷&#xff01;&#xff09; 时间限制 : 1 秒 内存限制 : 128 MB 分数\tfrac {a}{b}ba​化为小数后&#xff0c;小数点后第n位的数字是多少&#xff1f; 输入 三个正整数a&#xff0c;b&#xff0c;n&#xff0…

使用jni-rs实现Rust与Android代码互相调用

本篇主要是介绍如何使用jni-rs。有关jni-rs内容基于版本0.20.0&#xff0c;新版本写法有所不同。 入门用法 在Rust库交叉编译以及在Android与iOS中使用中我简单说明了jni-rs及demo代码&#xff0c;现在接着补充一些详细内容。 首先贴上之前的示例代码&#xff1a; use std:…

嘉靖王朝最大的一出闹剧和惨剧——大礼仪之争

大礼仪之争 大礼议是指发生在正德十六年&#xff08;1521年&#xff09;到嘉靖三年&#xff08;1524年&#xff09;间的一场皇统问题上的政治争论。 原因是明世宗以地方藩王入主皇位&#xff0c;为其改换父母的问题所引起&#xff0c;是明朝历史第二次小宗入大宗的事件。 “…

罗丹明荧光染料标记叶酸,FA-PEG-RB,叶酸-聚乙二醇-罗丹明;Folic acid-PEG-RB

FA-PEG-RB,叶酸-聚乙二醇-罗丹明 中文名称&#xff1a;叶酸-聚乙二醇-罗丹明 英文名称&#xff1a;FA-PEG-RB, Folic acid-PEG-RB 性状&#xff1a;粉红色固体或液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水和DMSO、DMF等常规性有机溶剂 保存条件&#xff1a;-2…

【Python】【进阶篇】二十一、Python爬虫的多线程爬虫

目录二十一、Python爬虫的多线程爬虫21.1 多线程使用流程21.2 Queue队列模型21.3 多线程爬虫案例1) 案例分析​2) 完整程序二十一、Python爬虫的多线程爬虫 网络爬虫程序是一种 IO 密集型程序&#xff0c;程序中涉及了很多网络 和 本地磁盘的 IO 操作&#xff0c;这会消耗大量…

自绘 MFC 控件 CComboBox

运行效果: 第一步:在窗口中拖拽一个CComboBox控件,设置如下属性: 类型,设置为:下拉列表包含字符串,设置为:True所有者描述,设置为:Variable 注意: 包含字符串,不设置为True,则使用GetLBText等函数无法获取到Item的text;所有者描述,设置为No,不执行DrawItem、M…

实战大数据项目

存储日志数据集&#xff08;HDFS&#xff09; 数据仓库构建&#xff08;Hive&#xff09; 数据分区表构建 数据预处理 &#xff08;Spark计算引擎&#xff09;-使用Zeppelin进行写SQL 订单指标分析 Sqoop数据导出到传统数据库&#xff08;Mysql&#xff09; Superset数据…

Vue2_02_指令

模板语法 — Vue.js (vuejs.org) 指令 (Directives) 是带有 v- 前缀的特殊 attribute 参数 一些指令能够接收一个“参数”&#xff0c;在指令名称之后以冒号表示 <a v-bind:href"url">...</a> 动态参数 可以用方括号括起来的 JavaScript 表达式作为一…

企业消费管理迈向数字化,助力员工满意度提升,解决行政·财务·采购等部门痛点 | 爱分析调研

调研&#xff1a;李进宝 撰写&#xff1a;李进宝 某市场巡视人员&#xff1a;每次出差都要垫钱&#xff0c;每月还只能报销一次&#xff0c;这不是自费上班吗&#xff1b; 某软件研发人员&#xff1a;我们每天都要加班到很晚&#xff0c;公司提供晚餐&#xff0c;但高油高盐&…

ERP系统应用场景,API接口接入

ERP订单管理系统能为企业带来什么 1、ERP订单管理系统可以对工厂物料采购的时间进行提示&#xff0c;根据产品目前的库存情况来进行确定&#xff0c;并比较物料采购时所需要支付的费用是多少&#xff0c;什么时候采购价格相对更加便宜。 2、在产品的生产方面&#xff0c;涉及…