当前位置:   article > 正文

k8s pod的控制器介绍_storage:1g

storage:1g

k8s pod的控制器主要是以下几种:

Deployment

DaemonSet

Job

Cronjob

StatefullSet

准备工作,先定义了一个存储类(storageclass),用于动态制备pv

Deployment

描述:用来控制无状态pod,每个pod一模一样,pod之间没有联系

  1. 重新调度以后pod的名称、ip地址会发生变化
  2. pod的启动、停止、扩容、缩减并不是线性的
  3. 多副本pod之间共享存储,并不会为每个pod生成单独的存储。

测试一:重新调度pod名称与IP地址随机

pod的初始名称为(nginx-deployment-5b95fcf774-zkqlw)、IP地址为:10.244.2.130

删除重新调度后,pod的名称为(nginx-deployment-5b95fcf774-mc9vp)、ip地址为:10.244.1.52

 

测试二、pod的启动、停止、扩容、缩减并不是线性的

使用命令扩容副本数量仔细观察可以看出来

 

测试三:pod之间使用共享存储

生成多副本以后,查看对应的pv与pvc,并没有发生数量变化,也不会为每个pod单独分配pv与pvc。(可以对比后面statefullset的测试查看)

---

kind: PersistentVolumeClaim   #资源类型pvc

apiVersion: v1               #api版本v1

metadata: # pvc的元数据,即描述

  name: pvc1 # pvc的名字pvc1

spec: #pvc资源的详细信息

  accessModes:            #pvc资源的访问模式

    - ReadWriteMany        #卷可以被多个节点读写的方式挂载

  resources:               # 资源定义

    requests: #资源请求定义

      storage: 1Gi #请求存储1G

  storageClassName: "nfs-storage" #存储类的名称,需要先定义存储类

---

apiVersion: apps/v1       # api版本

kind: Deployment          # 资源类型为deployment

metadata:                 #元数据即资源描述信息

  name: nginx-deployment  #deployment资源名称

  labels:                 #deployment资源标签定义

    app: nginx                  #deployment 资源标签的值

spec:                     #deployment资源的详细信息

  replicas: 1             #副本数量定义

  selector:               #标签选择器,通过标签选择器控制pod,这里的标签必须与pod的一样

    matchLabels:          # 匹配标签定义,即控制器控制哪个pod

      app: nginx                        #匹配标签的值

  template:               # pod的模板

    metadata:             # 元数据即pod的描述信息

      labels:             # pod的标签

        app: nginx

    spec:                 # pod资源的详细信息

      containers:                        #容器资源定义

      - name: nginx        #容器名称

        image: nginx           #镜像名称与标签,没有写标签默认为latest

        imagePullPolicy: IfNotPresent   # 镜像拉取策略,如果本地不存在,网上拉取

        resources:        # 资源定义

          requests:       #定义请求的资源

            cpu: 100m     #定义单个pod请求的cpu资源

        ports:            # 容器端口定义

        - containerPort: 80   

        volumeMounts:

        - name: personal

          mountPath: /usr/share/nginx/html

      volumes:

      - name: personal

        persistentVolumeClaim:

          claimName: pvc1

          readOnly: false

DaemonSet

描述:用来保证每个节点有一个指定的pod运行。适合通过pod收集节点

软硬件信息,监控节点状态,或者其他特殊的应用场景

测试

使用daemonset控制器,发现在每个节点上生成一个pod,对pod进行扩容,发现报错提示,未能发现请求的资源。事实上daemonset控制器确实没有replicaset资源的定义

 

---

apiVersion: apps/v1       # api版本

kind: DaemonSet          # 资源类型为daemonset

metadata:                 #元数据即资源描述信息

  name: nginx-daemonset  #deployment资源名称

  labels:                 #daemonset资源标签定义

    app: nginx                  #daemonset 资源标签的值

spec:                     #daemonset资源的详细信息

  selector:               #标签选择器,通过标签选择器控制pod,这里的标签必须与pod的一样

    matchLabels:          # 匹配标签定义,即控制器控制哪个pod

      app: nginx                        #匹配标签的值

  template:               # pod的模板

    metadata:             # 元数据即pod的描述信息

      labels:             # pod的标签

        app: nginx

    spec:                 # pod资源的详细信息

      containers:                        #容器资源定义

      - name: nginx        #容器名称

        image: nginx           #镜像名称与标签,没有写标签默认为latest

        imagePullPolicy: IfNotPresent   # 镜像拉取策略,如果本地不存在,网上拉取

        resources:        # 资源定义

          requests:       #定义请求的资源

            cpu: 100m     #定义单个pod请求的cpu资源

        ports:            # 容器端口定义

        - containerPort: 80  #容器暴露端口80

Job

描述:用来部署一次性任务,完成某次或者某些单次计算任务:比如计算圆周率

apiVersion: batch/v1

kind: Job

metadata:

  name: pi

spec:

  template:

    spec:

      containers:

      - name: pi

        image: perl:5.34.0

        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]

      restartPolicy: Never

  backoffLimit: 4

查看pod日志发现计算圆周率到小数点后2000位

 

Cronjob

描述:用来部署周期性计划性任务,默认保留最后三个pod。

apiVersion: batch/v1beta1

kind: CronJob

metadata:

  name: hello

spec:

  schedule: "* * * * *"

  jobTemplate:

    spec:

      template:

        spec:

          containers:

          - name: hello

            image: busybox:1.28

            imagePullPolicy: IfNotPresent

            command:

            - /bin/sh

            - -c

            - date; echo Hello from the Kubernetes cluster

          restartPolicy: OnFailure

每分钟打印一次时间以及“Hello from the Kubernetes cluster”这句话

 

StatefullSet

描述:用来控制有状态pod

  1. pod的启动、更新、扩容与缩减是线性的,按照顺序执行。
  2. pod的主机名、DNS地址不会因为重新调度发生变化
  3. pod被重新调度以后,仍然使用以前的存储。

测试一、pod的启动、更新、扩缩、缩减是线性的

此测试比较简答,注意观察就可以了,启动的时候,只有前一个pod创建成功并启动以后,下一个才会创建,删除的时候,按照索引从后往前删除,后一个被删除以后,前一个才会被删除。

使用kubectl scale statefullset  名称  --replicas=自定义副本数量

kubeclt get pod可以查看线性启动与线性删除

测试二、pod的主机名在pod被删除以后,重新调度不会发生变化在测试三最后一步可以体现(删除pod以后重新调度,发现dns并未发生变化)

测试三、每个pod有对应的存储,并且删除pod以后,对应的存储并不会被删除

测试前查看pv与pvc都不存在

使用state fullset控制器部署pod,查看pv与pvc都被创建

扩容副本以后,每个pod对应一个pv与pvc

 

同时查看nfs的共享目录下自动创建与pod副本对应(或者说与pv数量对应)目录

 

通过pv修改pod的服务内容

删除pod以后发现pv、pvc仍然存在

重新调度pod以后,注意对应的pod名称并不会变化,同样pod对应的服务内容并不会发生变化

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/162328
推荐阅读
相关标签
  

闽ICP备14008679号