打卡学习kubernetes——了解五种控制器类型

目录

1 Deployment控制器

2 StatefulSet控制器

3 DaemonSet控制器

4 Job控制器

5 CronJob控制器


1 Deployment控制器

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。

Deployment运行无状态应用,一般情况下,我们并不直接创建 Pod,而是通过 Deployment 来创建 Pod,由 Deployment 来负责创建、更新、维护其所管理的所有 Pods。

一个典型的用例如下:

创建Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
     app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1

执行

$ kubectl create namespace dev
$ kubectl create -f pc-deployment.yaml
$ kubectl get deploy -n dev -o wide

2 StatefulSet控制器

StatefulSet是用来管理有状态应用的工作负载API对象,实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为”有状态应用“。在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service

  • service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
  • Headless service 无头服务,不需要cluster-IP,直接绑定具体的Pod的IP。

特点

  • Pod一致性:包含次序(启动、停止次序)、网络一致性。此一致性与Pod相关,与被调度到哪个node节点无关;
  • 稳定的次序:对于N个副本的StatefulSet,每个Pod都在[0,N)的范围内分配一个数字序号,且是唯一的;
  • 稳定的网络:Pod的hostname模式为( statefulset 名 称 ) − (statefulset名称)-(statefulset名称)−(序号);
  • 稳定的存储:通过VolumeClaimTemplate为每个Pod创建一个PV。删除、减少副本,不会删除相关的卷。

 创建StatefulSet:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  namespace: nginx-ss
spec:
  selector:
    matchLabels:
      app: nginx #必须匹配 .spec.template.metadata.labels
  serviceName: "nginx"  #声明它属于哪个Headless Service.
  replicas: 3 #副本数
  template:
    metadata:
      labels:
        app: nginx # 必须配置 .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: nginx-pvc
          mountPath: /usr/share/nginx/html
 
  volumeClaimTemplates:   #可看作pvc的模板
  - metadata:
      name: nginx-pvc
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nginx-nfs-storage"  #存储类名,就是上面nginx-sc.yaml metadata.name
      resources:
        requests:
          storage: 1Gi
EOF

执行

kubectl apply -f nginx-ss.yaml
kubectl get pods -n nginx-ss

 

3 DaemonSet控制器

DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本,通常用于实现系统级后台任务。比如ELK服务。部署一些集群的日志、监控或者其他系统管理应用。

创建DaemonSet

DaemonSet的描述文件和Deployment非常相似,只需要修改Kind,并去掉副本数量的配置即可。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.13.12
        ports:
        - containerPort: 80
EOF

 执行

kubectl apply -f nginx-daemonset.yaml

4 Job控制器

Job负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。容器中的进程在正常运行结束后不会对其进行重启,而是将pod对象置于completed状态。若容器中的进程因错误而终止,则需要依据配置确定重启与否,未运行完成的pod对象因其所在的节点故障而意外终止后会被重新调度。

kubernetes支持以下几种Job:

Job Controller

Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Nerver,不支持Always)决定是否创建新的Pod再次重试任务。

固定结束次数的Job示例:

apiVersion:  batch/v1

kind:  Job

metadata:  

        name:  busybox

spec:

        completions:  3

        template:

                metadata:

                        name:  busybox

                spec:

                      containers:

                      -   name:  busybox

                          image:  busybox

                          command:  ["echo","hello"]

                      restartPolicy:  Nerver

5 CronJob控制器

CronJob即定时任务,类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

crontab的格式如下:

分 时 日 月 星期 要运行的命令 第1列分钟0~59 第2列小时0~23) 第3列日1~31 第4列月1~12 第5列星期0~7(0和7表示星期天) 第6列要运行的命令

用CronJob来管理我们上面的Job任务

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-demo
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - name: hello
            image: busybox
            args:
            - "bin/sh"
            - "-c"
            - "for i in 9 8 7 6 5 4 3 2 1; do echo $i; done"
EOF

执行 

kubectl create -f cronjob.yaml

kubectl get cronjob

 是资料整理也是初步学习,部分内容来自Kubernetes(k8s)中的五种控制器_kubenets 控制器-****博客

资料来自部分《Kubernetes指南》和《Kubernetes开源书》

继续学习吧!

上一篇:flask之ssti [WesternCTF2018]shrine1


下一篇:steam_api.dll“是什么?打开游戏出现找不到steam_api.dll无法继续执行代码如何解决