/images/hugo/avatar.png

自定义存储插件:FlexVolume与CSI

在 Kubernetes 中,存储插件的开发有两种方式:FlexVolume 和 CSI。

1. PV和PVC 的绑定

在 Kubernetes 中,实际上存在着一个专门处理持久化存储的控制器,叫作 Volume Controller。这个 Volume Controller 维护着多个控制循环,其中有一个循环,扮演的就是撮合 PV 和 PVC 的“红娘”的角色。它的名字叫作 PersistentVolumeController。PersistentVolumeController 会不断地查看当前每一个 PVC,是不是已经处于 Bound(已绑定)状态。如果不是,那它就会遍历所有的、可用的 PV,并尝试将其与这个“单身”的 PVC 进行绑定。

PV、PVC

1. PV/PVC

PV 描述的,是持久化存储数据卷。这个 API 对象主要定义的是一个持久化存储在宿主机上的目录,比如一个 NFS 的挂载目录。通常情况下,PV 对象是由运维人员事先创建在 Kubernetes 集群里待用的。

声明式API 的设计和使用

声明式 API 是 kubernetes 另一个非常重要的设计,今天我们就来学习声明式 API 到底是什么。

1. 声明式 API

触发 kuberneters 进行配置更新的方式有很多,比如

  1. kubectl create
  2. kubectl apply
  3. kubectl set image/kubectl edit

哪些算是声明式 API 方式的处理方式?

DaemonSet

1. DaemonSet

1.1 DaemonSet 作用

DaemonSet 的主要作用,是让你在 Kubernetes 集群里,运行一个 Daemon Pod。 所以,这个 Pod 有如下三个特征:

  1. 这个 Pod 运行在 Kubernetes 集群里的每一个节点(Node)上;
  2. 每个节点上只有一个这样的 Pod 实例;
  3. 当有新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来;而当旧节点被删除后,它上面的 Pod 也相应地会被回收掉。

跟其他编排对象不一样,DaemonSet 开始运行的时机,很多时候比整个 Kubernetes 集群出现的时机都要早。

Job/CronJob

1. Job

1.1 Job API 对象的定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: resouer/ubuntu-bc 
        command: ["sh", "-c", "echo 'scale=10000; 4*a(1)' | bc -l "]
      # 必须是 Never
      restartPolicy: Never
  backoffLimit: 4

现在来创建这个 Job: