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

目录

[1 Deployment控制器](#1 Deployment控制器)

[2 StatefulSet控制器](#2 StatefulSet控制器)

[3 DaemonSet控制器](#3 DaemonSet控制器)

[4 Job控制器](#4 Job控制器)

[5 CronJob控制器](#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 控制器-CSDN博客

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

继续学习吧!

相关推荐
黎陌MLing1 小时前
docker安装管理TDengine
docker·容器·tdengine
charlie1145141913 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
❀͜͡傀儡师3 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器
好奇龙猫3 小时前
【AI学习-comfyUI学习-三十二节-FLXU原生态反推+controlnet depth(UNion)工作流-各个部分学习】
人工智能·学习
老姚---老姚3 小时前
docker常用命令
运维·docker·容器
好奇龙猫3 小时前
【大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(7)】
学习
j_jiajia4 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
2301_783360135 小时前
关于RNAseq——从fastq到gene_counts全流程
笔记·学习
_李小白5 小时前
【AlohaMini学习笔记】第三天:AlohaMini相关技术
笔记·学习
我命由我123455 小时前
Photoshop - Photoshop 工具栏(57)模糊工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop