乐趣区

关于kubernetes:04kubernetes笔记-Pod控制器三-DaemonSetJobCronJobStatefulSet

DaemonSet 简介

DaemonSet 确保全副(或者一些)Node 上运行一个 Pod 的正本。当有 Node 退出集群时,也会为他们新增一个 Pod。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创立的所有 Pod

  • 应用 DaemonSet 的一些典型用法:
  • 运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
  • 在每个 Node 上运行日志收集 daemon,例如 fluentd、logstash
  • 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond

默认会在每个节点运行一个 Pod (master 节点除外)或依据标签匹配抉择运行的节点

DaemonSet 配置标准

apiVersion: apps/v1 # API 群组及版本
kind: DaemonSet# 资源类型特有标识
metadata:
  name <string>  #资源名称, 在作用域中要惟一
  namespace <string> #名称空间;DaemonSet 资源附属名称空间级别
spec:
  minReadySeconds <integer> # Pod 就绪后多少秒内任一容器无 crash 方可视为“就绪”selector <object> #标签选择器,必须匹配 template 字段中 Pod 模板中的标签
  template <object> #Pod 模板对象;
  revisionHistoryLimit <integer> #滚动更新历史记录数量,默认为 10;
  updateStrategy <0bject> #滚动更新策略
    type <string>  #滚动更新类型,可用值有 OnDelete 和 Rollingupdate;
    rollingUpdate <Object>  #滚动更新参数,专用于 RollingUpdate 类型
      maxUnavailable <string>  #更新期间可比冀望的 Pod 数量短少的数量或比例

示例 1: 新建 DaemonSet 控制器 部署 node-exporter

[root@k8s-master PodControl]# cat daemonset-demo.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-demo
  namespace: default
  labels:
    app: prometheus
    component: node-exporter
spec:
  selector:
    matchLabels:
      app: prometheus
      component: node-exporter
  template:
    metadata:
      name: prometheus-node-exporter
      labels:
        app: prometheus
        component: node-exporter
    spec:
      containers:
      - image: prom/node-exporter:v0.18.0
        name: prometheus-node-exporter
        ports:
        - name: prom-node-exp
          containerPort: 9100
          hostPort: 9100
        livenessProbe:
          tcpSocket :
            port: prom-node-exp
          initialDelaySeconds: 3
        readinessProbe:
          httpGet:
            path: '/metrics'
            port: prom-node-exp
            scheme: HTTP
          initialDelaySeconds: 5
      hostNetwork: true
      hostPID: true

[root@k8s-master PodControl]# kubectl apply -f daemonset-demo.yaml 
daemonset.apps/daemonset-demo created

[root@k8s-master PodControl]# kubectl get pod
NAME                                             READY   STATUS      RESTARTS   AGE
deployment-demo-77d46c4794-fhz4l                 1/1     Running     0          16h
deployment-demo-77d46c4794-kmrhn                 1/1     Running     0          16h
deployment-demo-fb544c5d8-5f9lp                  1/1     Running     0          17h


[root@k8s-master PodControl]# cat daemonset-demo.yaml 
...
    spec:
      containers:
      - image: prom/node-exporter:latest  #更新为最新版
...

#默认为滚动更新

[root@k8s-master PodControl]# kubectl apply -f daemonset-demo.yaml && kubectl rollout status daemonset/daemonset-demo
daemonset.apps/daemonset-demo created
Waiting for daemon set "daemonset-demo" rollout to finish: 0 of 3 updated pods are available...
Waiting for daemon set "daemonset-demo" rollout to finish: 1 of 3 updated pods are available...
Waiting for daemon set "daemonset-demo" rollout to finish: 2 of 3 updated pods are available...
daemon set "daemonset-demo" successfully rolled out

Job 的简介及 配置标准

Job 负责批处理工作,即仅执行一次的工作,它保障批处理工作的一个或多个 Pod 胜利完结

Job 配置标准

apiVersion: batch/v1 #API 群组及版本
kind: Job  #资源类型特有标识
metadata:
  name <string> #资源名称, 在作用域中要惟一
  namespace <string> #名称空间;Job 资源附属名称空间级别
spec:
  selector <object> #标签选择器,必须匹配 template 字段中 Pod 模板中的标签
  template <object> #Pod 模板对象
  completions <integer>  #冀望的胜利实现的作业次数,胜利运行完结的 Pod 数量
  ttlSecondsAfterFinished <integer> #终止状态作业的生存时长,超期将被删除
  parallelism <integer> #作业的最大并行度, 默认为 1
  backoffLimit <integer> #将作业标记为 Failed 之前的重试次数,默认为 6
  activeDeadlineSeconds <integer> #作业启动后可处于活动状态的时长
  restartPolicy <string> #重启策略
    #1. Always: 容器生效时,kubelet 主动重启该容器;#2. OnFailure: 容器终止运行且退出码不为 0 时重启;#3. Never: 不管状态为何,kubelet 都不重启该容器。

示例 2: 创立 Job 控制器 实现 2 次工作

[root@k8s-master PodControl]# cat job-demo.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: job-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: alpine:3.11
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh" , "-c", "sleep 60"]
      restartPolicy: Never
  completions: 2   #实现 2 次 没有配置并行 所以是单队列 实现 1 次后在启动一次
  ttlSecondsAfterFinished: 3600 #保留 1 个小时
  backoffLimit: 3  #重试次数 默认为 6 改为 3
  activeDeadlineSeconds: 300 #启动后的存活时长

[root@k8s-master PodControl]# kubectl apply -f job-demo.yaml 

[root@k8s-master PodControl]# kubectl get pod
NAME                                             READY   STATUS              RESTARTS   AGE
daemonset-demo-4zfwp                             1/1     Running             0          20m
daemonset-demo-j7m7k                             1/1     Running             0          20m
daemonset-demo-xj6wc                             1/1     Running             0          20m
job-demo-w4nkh                                   0/1     ContainerCreating   0          2s

[root@k8s-master PodControl]# kubectl get pod
NAME                                             READY   STATUS      RESTARTS   AGE
daemonset-demo-4zfwp                             1/1     Running     0          22m
daemonset-demo-j7m7k                             1/1     Running     0          22m
daemonset-demo-xj6wc                             1/1     Running     0          22m
job-demo-vfh9r                                   1/1     Running     0          49s  #串行运行 
job-demo-w4nkh                                   0/1     Completed   0          2m5s #已实现

[root@k8s-master PodControl]# cat job-para-demo.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: job-para-demo
spec:
  template:
    spec:
      containers:
      - name: myjob
        image: alpine:3.11
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh" , "-c", "sleep 60"]
      restartPolicy: Never
  completions: 12   #实现 12 次
  parallelism: 2    #同时运行 2 个  个 2 个 Pod 同时运行
  ttlSecondsAfterFinished: 3600
  backoffLimit: 3
  activeDeadlineSeconds: 1200


[root@k8s-master PodControl]# kubectl apply  -f  job-para-demo.yaml 
job.batch/job-para-demo created

[root@k8s-master PodControl]# kubectl get job
NAME            COMPLETIONS   DURATION   AGE
job-demo        2/2           2m25s      11m
job-para-demo   10/12         6m37s      7s

[root@k8s-master PodControl]# kubectl get pod
NAME                                             READY   STATUS              RESTARTS   AGE
daemonset-demo-4zfwp                             1/1     Running             0          25m
daemonset-demo-j7m7k                             1/1     Running             0          25m
daemonset-demo-xj6wc                             1/1     Running             0          25m
deployment-demo-fb544c5d8-lj5gt                  0/1     Terminating         0          17h
deployment-demo-with-strategy-59468cb976-vkxdg   0/1     Terminating         0          16h
job-demo-vfh9r                                   0/1     Completed           0          3m41s
job-demo-w4nkh                                   0/1     Completed           0          4m57s
job-para-demo-9jtnv                              0/1     ContainerCreating   0          7s  #同一时间并行数为 2 个  共循环 6 次
job-para-demo-q2h6g                              0/1     ContainerCreating   0          7s


[root@k8s-master PodControl]# kubectl get pod
NAME                   READY   STATUS      RESTARTS   AGE
daemonset-demo-4zfwp   1/1     Running     0          30m
daemonset-demo-j7m7k   1/1     Running     0          30m
daemonset-demo-xj6wc   1/1     Running     0          30m
job-demo-vfh9r         0/1     Completed   0          9m38s
job-demo-w4nkh         0/1     Completed   0          10m
job-para-demo-8fz78    0/1     Completed   0          3m48s
job-para-demo-9jtnv    0/1     Completed   0          6m4s
job-para-demo-bnw47    0/1     Completed   0          2m42s
job-para-demo-dsmbm    0/1     Completed   0          96s
job-para-demo-j4zw5    1/1     Running     0          30s
job-para-demo-jkbw4    0/1     Completed   0          4m55s
job-para-demo-l9pwc    0/1     Completed   0          96s
job-para-demo-lxxrv    1/1     Running     0          30s
job-para-demo-nljhg    0/1     Completed   0          4m55s
job-para-demo-q2h6g    0/1     Completed   0          6m4s
job-para-demo-rc9qt    0/1     Completed   0          3m48s
job-para-demo-xnzsq    0/1     Completed   0          2m42s

cronJob 简介及字段格局

Cron Job 治理基于工夫的 Job,即:

  1. 在给定工夫点只运行一次
  2. 周期性地在给定工夫点运行

** 应用前提条件:以后应用的 Kubernetes 集群,版本 >= 1.8(对 CronJob)。对于先前版本的集群,版本 < 1.8,启动 API Server 时,通过传递选项  –runtime-config=batch/v2alpha1=true  能够开启 batch/v2alpha1
API**
典型的用法如下所示:
1. 在给定的工夫点调度 Job 运行
2. 创立周期性运行的 Job,例如:数据库备份、发送邮件

cronJob 借助 Job 来实现工作 他们的有关系相似 Deployment 与 ReplicaSet 的关系

cronJob 配置标准

apiVersion: batch/v1betal #API 群组及版本
kind: CronJob #资源类型特有标识
metadata:
  name <string> #资源名称, 在作用域中要惟一
  namespace <string> #名称空间; CronJob 资源附属名称空间级别
spec:
  jobTemplate <object> #job 作业模板, 必选字段
    metadata <object> #模板元数据
    spec_<object> #作业的冀望状态
  schedule string> #调度工夫设定, 必选字段
  concurrencyPolicy <string> #并发策略,可用值有 Allow、Fprbid 和 Replace 指前一个工作还没有执行完 下一个工作工夫又到了, 是否容许两个工作同时运行
  failedJobsHistoryLimit <integer> #失败作业的历史记录数,默认为 1
  successfulJobsHistoryLimit <integer> #胜利作业的历史记录数,默认为 3
  startingDeadlineSeconds <integer> #因错过工夫点而未执行的作业的可超期时长
  suspend <boolean> #是否挂起后续的作业,不影响以后作业,默认为 false

示例 3 : 创立 cronJob 每 2 分钟执行 1 次工作

[root@k8s-master PodControl]# cat cronjob-demo.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-demo
  namespace: default
spec:
  schedule: "*/2 * * * *"  #第 2 分种执行一次 和 Linux 定时工作一样别离是 分 时 日 月 周
  jobTemplate:
    metadata:
      labels:
        controller: cronjob-demo
    spec:  #Job 的定义
      parallelism: 1  #并行数为 1
      completions: 1  #执行 1 次 
      ttlSecondsAfterFinished: 600  #实现 600 后删除
      backoffLimit: 3 #最多执行 3 次
      activeDeadlineSeconds: 60
      template:
        spec:
          containers:
          - name: myjob
            image: alpine
            command:
            - /bin/sh
            - -c
            - date; echo Hello from cronJob, sleep a while...; sleep  10 
          restartPolicy: OnFailure  #容器终止运行且退出码不为 0 时重启
  startingDeadlineSeconds: 300


[root@k8s-master PodControl]# kubectl get cronjob
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob-demo   */2 * * * *   False     0        <none>          58s

[root@k8s-master PodControl]# kubectl get pod
NAME                            READY   STATUS              RESTARTS   AGE
cronjob-demo-1629169560-vn8hk   0/1     ContainerCreating   0          12s
daemonset-demo-4zfwp            1/1     Running             0          51m
daemonset-demo-j7m7k            1/1     Running             0          51m
daemonset-demo-xj6wc            1/1     Running             0          51m

StatefulSet 无状态利用控制器

StatefulSet 作为 Controller 为 Pod 提供惟一的标识。它能够保障部署和 scale 的程序
StatefulSet 是为了解决有状态服务的问题(对应 Deployments 和 ReplicaSets 是为无状态服务而设计),其利用
场景包含:

  1. 稳固的长久化存储,即 Pod 从新调度后还是能拜访到雷同的长久化数据,基于 PVC 来实现
  2. 稳固的网络标记,即 Pod 从新调度后其 PodName 和 HostName 不变,基于 Headless Service(即没 Cluster IP 的 Service)来实现
  3. 有序部署,有序扩大,即 Pod 是有程序的,在部署或者扩大的时候要根据定义的程序顺次顺次进行(即从 0 到 N -1,在下一个 Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态),基于 init containers 来实现有序
  4. 膨胀,有序删除(即从 N - 1 到 0)
  • StatefulSet: 通用的有状态利用控制器
    每个 Pod 都有本人的惟一标识,故障时,它只能被领有同一标识的新实例所取代;
    &dollar;{STATEFULSET_NAME}-${ORDINAL},web-O, web-1,web-2,如果更新和删除都是从逆序从最初一个开始 StatefulSet 强依赖于 Headless Service 无头服务创立 Pod 惟一标识 确定域名解析到能解析到惟一 Pod 之上如果有必要,能够为被 Pod 配置专用的存储卷,且只能是 PVC 格局;

StatefulSet 配置标准:

apiVersion:apps/v1 #API 群组及版本;
kind: StatefulSet #资源类型的特有标识
metadata:
  name <string> #资源名称, 在作用域中要惟一
  namespace <string> #名称空间;StatefulSet 附属名称空间级别
spec:
  replicas <integer> #冀望的 Pod 正本数, 默认为 1
  selector <object> #标签选择器,须匹配 Pod 模板中的标签,必选字段
  template <object> #Pod 模板对象,必选字段
  revisionHistoryLimit <integer> #滚动更新历史记录数量,默认为 10
  updateStrategy'<object> #滚动更新策略
    type <string> #滚动更新类型,可用值有 OnDelete 和 Rollingupdate
    rollingUpdate <object> #滚动更新参数, 专用于 RollingUpdate 类型
      partition <integer> #分区批示索引值, 默认为 0 如果为 2 示意只更新序号大于 2 的 Pod
  serviceName <string> #相干的 Headless Service 的名称,必选字段
  volumeclaimTemplates <[]0bject> #存储卷申请模板
    apiVersion <string> #PVC 资源所属的 API 群组及版本,可省略
    kind <string> #PVc 资源类型标识, 可省略
    metadata <object># 卷申请模板元数据
    spec <object># 冀望的状态, 可用字段同 PVC
  podManagementPolicy <string> # Pod 管理策略,默认的“OrderedReady" 示意程序创
                               # 建并逆序删除, 另一可用值“Parallel" 示意并行模式

示例 4: 创立 StatefulSet 控制器

[root@k8s-master PodControl]# cat statefulset-demo.yaml 
apiVersion: v1
kind: Service
metadata:
  name: demoapp-sts
  namespace: default
spec:
  clusterIP: None  #发明无头服务
  ports:
  - port: 80
    name: http
  selector:
    app: demoapp
    controller: sts-demo
---  
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sts-demo
spec:
  serviceName: demoapp-sts #绑定无头服务
  replicas: 2
  selector:
    matchLabels :
      app: demoapp
      controller: sts-demo
  template:  #以下为 Pod 模板
    metadata:
      labels:
        app: demoapp
        controller: sts-demo
    spec:
      containers:
      - name: demoapp
        image: ikubernetes/demoapp:v1.0  #不是无状态服务  只模仿 StatefulSet 创立过程
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: appdata
          mountPath: /app/data
  volumeClaimTemplates:
  - metadata:
      name: appdata
    spec:
      accessModes: ["ReadWriteOnce"]    #单路读写
      storageClassName: "longhorn"   #应用之前创立的 sc
      resources:
        requests:
          storage: 2Gi

[root@k8s-master PodControl]# kubectl apply -f statefulset-demo.yaml 
service/demoapp-sts created

#Pod 是按序创立 先发明实现第 1 个才会发明 2 个 Pod
[root@k8s-master PodControl]# kubectl get pod 
NAME         READY   STATUS              RESTARTS   AGE
sts-demo-0   0/1     ContainerCreating   0          12s

[root@k8s-master PodControl]# kubectl get pod 
NAME         READY   STATUS              RESTARTS   AGE
sts-demo-0   1/1     Running             0          29s
sts-demo-1   0/1     ContainerCreating   0          9s

示例 4: StatefulSet 扩容、缩容

[root@k8s-master PodControl]# cat demodb.yaml 
# demodb ,an educational Kubernetes-native NoSQL data store. It is a distributed
# key-value store,supporting permanent read and write operations.
# Environment Variables: DEMODB_DATADIR,DEMODB_HOST,DEMODB_PORT
# default port: 9907/tcp for clients, 9999/tcp for members.
# Maintainter: MageEdu <mage@magedu. com>
---
apiVersion: v1
kind: Service
metadata:
  name: demodb
  namespace: default
  labels:
    app: demodb
spec:
  clusterIP: None
  ports:
  - port: 9907
  selector:
    app: demodb
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: demodb
  namespace: default
spec:
  selector:
    matchLabels:
      app: demodb
  serviceName: "demodb"
  replicas: 3
  template:
    metadata:
      labels:
        app: demodb
    spec:
      nodeName: k8s-node3  #指定节点 测试环境 node 系统资源比拟 富余
      containers :
      - name: demodb-shard
        image: ikubernetes/demodb:v0.1
        ports:
        - containerPort: 9907
          name: db
        env:
        - name: DEMODB_DATADIR
          value: "/demodb/data"
        volumeMounts:
        - name: data
          mountPath: /demodb/data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "longhorn"
      resources:
        requests:
          storage: 1Gi


[root@k8s-master PodControl]# kubectl apply -f demodb.yaml

[root@k8s-master PodControl]# kubectl get sts
NAME     READY   AGE
demodb   1/3     31s
[root@k8s-master PodControl]# kubectl get pod   #按序创立
NAME                                 READY   STATUS              RESTARTS   AGE
centos-deployment-66d8cd5f8b-9x47c   1/1     Running             1          22h
demodb-0                             1/1     Running             0          33s
demodb-1                             0/1     ContainerCreating   0          5s

[root@k8s-master PodControl]# kubectl get pod -o wide 
NAME                                 READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
demodb-0                             1/1     Running   0          5m22s   10.244.3.69    k8s-node3   <none>           <none>
demodb-1                             1/1     Running   0          5m1s    10.244.3.70    k8s-node3   <none>           <none>
demodb-2                             1/1     Running   0          4m37s   10.244.3.71    k8s-node3   <none>           <none>




[root@k8s-master PodControl]# kubectl get pvc  # PVC 绑定胜利
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-demodb-0   Bound    pvc-bef2c61d-4ab4-4652-9902-f4bc2a918beb   1Gi        RWO            longhorn       14m
data-demodb-1   Bound    pvc-2ebb5510-b9c1-4b7e-81d0-f540a1451eb3   1Gi        RWO            longhorn       9m8s
data-demodb-2   Bound    pvc-74ee431f-794c-4b3d-837a-9337a6767f49   1Gi        RWO            longhorn       8m
  • 新开启一个终端 测试应用
[root@k8s-master PodControl]# kubectl run pod-$RANDOM --image=ikubernetes/admin-box:latest -it --rm --command -- /bin/sh

root@pod-31692 # nslookup -query=A demodb   #解析测试
Server:        10.96.0.10
Address:    10.96.0.10#53

Name:    demodb.default.svc.cluster.local
Address: 10.244.3.69
Name:    demodb.default.svc.cluster.local
Address: 10.244.3.71
Name:    demodb.default.svc.cluster.local
Address: 10.244.3.70


root@pod-31692 # nslookup -query=PTR  10.244.3.70  #对 IP 进行反解析
Server:        10.96.0.10
Address:    10.96.0.10#53

70.3.244.10.in-addr.arpa    name = demodb-1.demodb.default.svc.cluster.local. #解析对惟一 Pod

root@pod-31692 # nslookup -query=PTR  10.244.3.71 
Server:        10.96.0.10
Address:    10.96.0.10#53

71.3.244.10.in-addr.arpa    name = demodb-2.demodb.default.svc.cluster.local.  #解析对惟一 Pod



root@pod-31692 # echo "www.google.com" >/tmp/data
root@pod-31692 # curl -L -XPUT -T /tmp/data http://demodb:9907/set/data   #通过 svc 上传数据 数据上传 set 下载 get
WRITE completedroot
root@pod-31692 # curl http://demodb:9907/get/data  #尽管位于不同的 PV 不同 Pod 之前会同步数据 保持数据的一致性
www.google.com
  • 更新: 如果是更新镜你 能够用 set 命令 或 编译 yaml 文件 还能够用 patch 打补丁
# 编译 yaml 文件 image 版本为 v0.2

[root@k8s-master PodControl]# kubectl apply -f demodb.yaml
service/demodb unchanged
statefulset.apps/demodb configured


[root@k8s-master PodControl]# kubectl get sts -o wide
NAME     READY   AGE   CONTAINERS     IMAGES
demodb   2/3     18m   demodb-shard   ikubernetes/demodb:v0.2     #之前说过是逆序更新 demodb-2 最先更新
[root@k8s-master PodControl]# kubectl get pod -o wide
NAME                                 READY   STATUS              RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
centos-deployment-66d8cd5f8b-9x47c   1/1     Running             1          22h   10.244.1.160   k8s-node1   <none>           <none>
demodb-0                             1/1     Running             0          18m   10.244.3.69    k8s-node3   <none>           <none>
demodb-1                             1/1     Running             0          18m   10.244.3.70    k8s-node3   <none>           <none>
demodb-2                             0/1     ContainerCreating   0          16s   <none>         k8s-node3   <none>           <none>
  • 扩缩容 Pod 也是逆序执行
# 应用 patch 打补丁批改正本数
[root@k8s-master PodControl]# kubectl patch sts/demodb -p '{"spec":{"replicas":5}}' #扩容数量为 5
statefulset.apps/demodb patched

[root@k8s-master PodControl]# kubectl get pod
NAME                                 READY   STATUS              RESTARTS   AGE
demodb-0                             1/1     Running             0          6m43s
demodb-1                             1/1     Running             0          7m3s
demodb-2                             1/1     Running             0          7m53s
demodb-3                             0/1     ContainerCreating   0          10s


[root@k8s-master PodControl]# kubectl get pod
NAME                                 READY   STATUS              RESTARTS   AGE
demodb-0                             1/1     Running             0          6m52s
demodb-1                             1/1     Running             0          7m12s
demodb-2                             1/1     Running             0          8m2s
demodb-3                             0/1     ContainerCreating   0          19s

[root@k8s-master PodControl]# kubectl patch sts/demodb -p '{"spec":{"replicas":2}}'  #缩容数据为 2 逆序缩

[root@k8s-master PodControl]# kubectl get pod   
NAME                                 READY   STATUS        RESTARTS   AGE
demodb-0                             1/1     Running       0          9m19s
demodb-1                             1/1     Running       0          6m9s
demodb-2                             1/1     Running       0          5m25s
demodb-3                             1/1     Running       0          2m18s
demodb-4                             0/1     Terminating   0          83s

[root@k8s-master PodControl]# kubectl get pod
NAME                                 READY   STATUS        RESTARTS   AGE
demodb-0                             1/1     Running       0          10m
demodb-1                             1/1     Running       0          7m34s
demodb-2                             1/1     Running       0          6m50s
demodb-3                             1/1     Terminating   0          3m43s

[root@k8s-master PodControl]# kubectl get pod 
NAME                                 READY   STATUS    RESTARTS   AGE
demodb-0                             1/1     Running   0          12m
demodb-1                             1/1     Running   0          9m46s
pod-31692                            1/1     Running   0          85m

#测试数据一致性 尽管不同位于的 PV 不同 Pod 之前会同步数据 保持数据的一致性

root@pod-31692 # curl http://demodb:9907/get/data
www.google.com
退出移动版