【项目实战18】k8s(4)—调度器的使用(图文详解rs,deployment控制器)

一、前言

Pod 的分类:
  自主式 Pod:Pod 退出后不会被创建
  控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目,即使删除了副本,控制器也会恢复其数量。
控制器类型:
  1、Replication Controller(RC)和ReplicaSet(RS)
  2、Deployment
  3、DaemonSet
  4、StatefulSet
  5、Job
  6、CronJob
  7、HPA全称Horizontal Pod Autoscaler

二、RS控制器

(1)、简介

ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。
ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行
虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

(2)、使用

1、创建一个ReplicaSet类型的控制器

[root@server2 control] cat rs.yaml 


apiVersion: apps/v1                                          
kind: ReplicaSet                                                  类型:RS控制器
metadata:
  name: replicaset-example                                        控制器的名字为replicaset-example   
spec:
  replicas: 6                                                     副本数量为6
  selector:
    matchLabels:
      app: nginx                                                      
  template:                                                       模板(创建的副本以此为模板)
    metadata:
      labels:
        app: nginx                                                给副本打上nginx的标签
    spec:
      containers:
      - name: nginx
        image: myapp:v1
    


2、查看节点,并展示标签

[root@server2 control] kubectl get pod --show-labels       

3、结果:出现6个副本,且标签都为nginx
在这里插入图片描述
4、查看rs副本的更多信息

[root@server2 control] kubectl describe rs

在这里插入图片描述
5、修改其中一个容器的标签,查看副本的数量变化

[root@server2 control] kubectl label pod replicaset-example-9llrx app=myapp --overwrite 
pod/replicaset-example-9llrx labeled
[root@server2 control] kubectl get pod --show-labels 

6、结果:新建了一个副本,原有的6个pod不变,说明副本的控制不受改变。
在这里插入图片描述

三、Deployment

(1)、简介

Deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法

典型的应用场景:

用来创建Pod和ReplicaSet
滚动更新和回滚
扩容和缩容
暂停与恢复

(2)、使用

Deployment中可以实现ReplicaSet 的全部功能,所以一般是一起使用
1、建立一个deployment控制器

[root@server1 ~] cat deployment.yml 


apiVersion: apps/v1
kind: Deployment                                                           类型是Deployment    
metadata:
  name: nginx-deployment                                          控制器的名字是nginx-deployment 
  labels:
    app: nginx                                                                   标签;nginx
spec:                                                                                 指定内容如下
  replicas: 3                                                                            副本数量为3
  selector:                                                                          
    matchLabels:                                                                    匹配标签为nginx的容器
      app: nginx                                                                  
  template:                                                                              新建模板如下:
    metadata:                                                                               
      labels: 
        app: nginx                                                                            标签为nginx
    spec:
      containers:
      - name: nginx                                                                        容器名字为nginx
        image: nginx                                                                       使用镜像为nginx
//

2、查看副本的分配情况

[root@server1 ~] kubectl  apply  -f deployment.yml 
deployment.apps/nginx-deployment created
[root@server1 ~] kubectl  get pod -o wide

在这里插入图片描述
3、查看标签

[root@server1 ~] kubectl  get pod  --show-labels 

在这里插入图片描述
4、访问测试

[root@server2 control]# curl 10.244.141.214

在这里插入图片描述
三、回滚测试
1、修改deployment.yml文件里面新建模板的镜像文件为myapp:v1。
在这里插入图片描述
2、应用,查看信息
可以直接应用,不用关闭之前的版本

[root@server2 control]# kubectl apply -f deployment.yml
[root@server2 statefulset]# kubectl get pod -o wide                                          图1、查看pod信息
[root@server2 statefulset]# curl 10.244.141.216                                              图1、进行访问
[root@server2 control]# kubectl get rs                                                       图2、查看到目前的版本

图1、可以查看到目前myapp的版本
在这里插入图片描述
图2、查看到目前已经迭代过版,如果需要可以回滚为之前的版本
在这里插入图片描述

四、DaemonSet控制器

(1)、简介

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。一个典型用法是在每个节点上运行监控 DaemonSet,例如 zabbix agent等。保证每个节点做一次
编辑daemonset.yaml文件

(2)、使用

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        image: zabbix/zabbix-agent

五、StatefulSet控制器

StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”。
主要用于长期的、持续的监测状态,需要唯一的网络标识符的集群。

六、Job控制器

执行批处理任务,仅执行一次任务,执行成功就结束。比如可以计算pi值。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

拉起pod,查看状态
在这里插入图片描述
启动成功后,在日志中出现结果
在这里插入图片描述

七、CronJob控制器

Cron Job 创建基于时间调度的 Jobs。
一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job

$ vim cronjob-example.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
 name: cronjob-example
spec:
 schedule: "* * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
         - name: cronjob
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from k8s cluster
         restartPolicy: OnFailure
         
$ kubectlapply -f cronjob-example.yaml
$ kubectl get cronjob
NAME              SCHEDULE    SUSPEND  ACTIVE   LAST SCHEDULE   AGE
cronjob-example  * * * * *   False     0       38s             8m22s 
$ kubectl get job -w
NAME                         COMPLETIONS   DURATION  AGE
cronjob-example-1581873180   1/1          1s         3m
cronjob-example-1581873240   1/1          1s         2m
$ kubectl get pod
NAME                               READY   STATUS     RESTARTS   AGE
cronjob-example-1581873240-r644w   0/1    Completed   0          2m51s
cronjob-example-1581873300-p89rc   0/1    Completed   0          111s
$ kubectl logs cronjob-example-1581873240-r644w
Sun Feb 16 17:14:06 UTC 2020
Hello from k8s cluster
$ kubectldelete  cronjob  cronjob-example
cronjob.batch"cronjob-example" deleted
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值