系列:4.2、Kubernetes 工作负载

Kubernetes 工作负载

一个负载是指一个运行在Kubernetes上的应用程序

1、pods

Pod 是你可以在 Kubernetes 中创建和管理的最小可部署计算单元。 Kubernetes pod 具有定义的生命周期。

Kubernetes 集群中的 Pod 主要有两种使用方式:

运行单个容器的 Pod。 “one-container-per-Pod”模型是最常见的 Kubernetes 用例; 在这种情况下,您可以将 Pod 视为单个容器的包装器; Kubernetes 管理 Pod,而不是直接管理容器。

运行多个需要协同工作的容器的 Pod。 Pod 可以封装一个应用程序,该应用程序由多个位于同一位置的容器组成,这些容器紧密耦合并需要共享资源。 Pod 将这些容器、存储资源和临时网络身份包装在一起作为一个单元。

命令式创建一个pod:

kubectl run <pod-name> --image=<image-name>

一个简单的 nginx pod 的yaml文件(即声明式)

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx

2、ReplicaSet

ReplicaSet(副本集)用于确保指定数量的 pod 启动并运行。 当我们应该在给定时间运行多个 pod 时,使用它很方便。

ReplicaSet 需要标签来了解要运行哪些 pod、应该在给定时间运行的副本数量以及它需要创建的 pod 模板。

一个 ReplicaSet 的样例yaml文件:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
  labels:
    app: nginx
    tier: lb
spec:
  replicas: 3
  selector:
    matchLabels:
        tier: lb
  template:
    metadata:
      labels:
          tier: lb
    spec:
        containers:
        - name: nginx-replicaset
            image: nginx

请注意,它使用的不是 apiVersion “v1”,而是“apps/v1”。 我们在ReplicaSet副本集metadata元数据中定义了一个label标签,并将其用作规范下的选择器。 使用副本(spec.replicas),我们定义了应该启动并运行的副本数。 在模板(spec.template)上,我们放置了我们想要创建的 pod 的信息。

创建副本集

kubectl apply -f replicaset.yaml

在这里插入图片描述
查看pod

kubectl get pods

在这里插入图片描述

删除replica set中的一个pod
在这里插入图片描述
然后再次查看pod, 看下 AGE这列。
在这里插入图片描述

查看 replica set

kubectl get replicasets 

或者

kubectl get rs

在这里插入图片描述

3、Deployment

Deployment 是 ReplicaSet 和 Pod 之上的抽象层。 这意味着它既可以控制副本的数量,也可以控制 pod 的模板。 因此,与仅控制副本数量的 ReplicaSet 不同,您在 Pod 模板上所做的更改将更新 Pod。

Deployment 将创建一个 ReplicaSet 和 Pod(s)。 Kubernetes 建议使用 Deployment 而不是 ReplicaSet,除非另有要求。

通过命令式创建Deployment:

kubectl create deployment nginx --image=nginx --replicas=2

在这里插入图片描述

查看pod 依旧 replica set
在这里插入图片描述

声明式 (更多可参考 deployment配置

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

查询deployment

kubectl get deployments

在这里插入图片描述

查看deployment的rollout状态

kubectl rollout status deployment nginx

在这里插入图片描述

4、StatefulSets

StatefulSet 是用于管理有状态应用程序的工作负载 API 对象。管理一组 Pod 的部署和扩展,并保证这些 Pod 的顺序和唯一性。

这听起来很像 Deployment,但不同之处在于 StatefulSet 为 Pod 提供了唯一性,这与 Deployment 不同。这最终意味着,如果我们的应用程序是有状态的,我们应该使用 StatefulSets,正如其名称所暗示的那样,因为重新调度的 Deployment Pod 将无法保持稳定的身份。

StatefulSets 对于需要以下一项或多项的应用程序很有价值。

稳定、唯一的网络标识符。
稳定、持久的存储。
有序、优雅的部署和扩展。
有序的自动滚动更新。

Kubernetes 维护稳定身份的方式是使用持久卷。我们将在后面讨论它(即 Kubernetes 对象)。 StatefulSet 应用程序还需要公开一个我们还没有涉及的服务,所以现在看一下这个关于如何创建 statefulset 的示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

创建StatefulSets

kubectl apply -f stateful-set.yaml 

在这里插入图片描述

查询StatefulSets
在这里插入图片描述

5、DaemonSets

DaemonSet,顾名思义,作为每个节点上的守护进程工作,并确保每个节点运行指定的 Pod。 因此,当您向集群添加新节点时,定义的 DaemonSet 将创建 Pod。 这些 Pod 只能通过删除节点或删除 DaemonSet 来删除。

你可能想知道为什么我们需要这样一个对象。场景有:

在每个节点上运行集群存储守护程序
在每个节点上运行日志收集守护进程
在每个节点上运行节点监控守护进程

daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      name: nginx-lb
  template:
    metadata:
      labels:
        name: nginx-lb
    spec:
      containers:
      - name: nginx
        image: nginx

创建 daemonset

kubectl apply -f daemonset.yaml

在这里插入图片描述

查看 daemonset 以及 pod

kubectl get daemonsets

或者

kubectl get ds

在这里插入图片描述

默认情况下,daemonset pod 不会被安排在主节点上。 但是您也可以添加容忍(yaml中添加该项 tolerations)使它在主节点上运行。

系列:1、Kubernetes 简介

系列:2、创建Kubernetes集群

系列:3、Kubectl 的使用

系列:4.1、Kubernetes 对象

系列:4.2、Kubernetes 工作负载(本文)

系列:4.3、Kubernetes 服务

系列:4.4、Kubernetes 存储

系列:4.5、Kubernetes 配置对象

系列:5、Kubernetes中的调度

系列:6、Kubernetes 的升级与部署策略

系列:7、 Kubernetes 安全性

系列:8、部署一个全栈应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值