k8s-资源控制器类型

1 RS(ReplicaSet)和deployment

1.1 RC (ReplicationController )

主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如

果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收

Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有本质的不同,只是名字不一样,并且 RS 支持集合式的 selector

 

实例:

 

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: wangyanglinux/myapp:v2
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

 

特性: rc模式如果更新,需要更改配置文件的镜像地址,然后apply一下,但是发现pod还是么有更新,需要手动删除原有的pod,才可以自己更新,相比于deployment不是全自动的。

1.2 删除rs

 

[[email protected] yaml]# kubectl delete rs/frontend
replicaset.extensions "frontend" deleted

 

2 deployment

定义Deployment来创建Pod和ReplicaSet

滚动升级和回滚应用

扩容和缩容

暂停和继续Deployment

实例:

 

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: wangyanglinux/myapp:v2
        ports:
        - containerPort: 80
  • 扩容

 

kubectl scale deployment nginx-deployment --replicas 10
  • 更新镜像地址

 

kubectl set image  deployment/nginx-deployment nginx=wangyanglinux/myapp:v3
#也可以直接编辑
kubectl edit deployment/nginx-deployment

 

  • 回滚

 

kubectl rollout undo deployment/nginx-deployment

2.1 删除deployment

 

[email protected] yaml]# kubectl delete deploy --all
deployment.extensions "nginx-deployment" deleted

 

3 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 代理

实例:

 

里面并没有指定副本数量,因为daemonset默认是每个node节点上都创建一个pod

 

 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: deamonset-example
  labels:
    app: daemonset
spec:
  selector:
    matchLabels:
      name: deamonset-example
  template:
    metadata:
      labels:
        name: deamonset-example
    spec:
      containers:
      - name: daemonset-example
        image: wangyanglinux/myapp:v1

3.1 查看daemonset

[[email protected] yaml]# kubectl get daemonset
NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
deamonset-example   2         2         2       2            2           <none>          31s

 

每个node节点都会运行一个pod

[[email protected] yaml]# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
deamonset-example-s9zsw   1/1     Running   0          40m   10.244.1.109   k8s-node1   <none>           <none>
deamonset-example-wlxm2   1/1     Running   0          40m   10.244.2.7     k8s-node2   <none>           <none>

4 job

Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束

spec.template格式同Pod

RestartPolicy仅支持Never或OnFailure

单个Pod时,默认Pod成功运行后Job即结束

.spec.completions 标志Job结束需要成功运行的Pod个数,默认为1

.spec.parallelism 标志并行运行的Pod的个数,默认为1

spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试

 

实例

 

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

 

4.1 查看job任务

4.2 删除job的pod

 

kubectl delete pod  pi-w7sr8

4.3 删除job

 

[[email protected] yaml]# kubectl delete job pi
job.batch "pi" deleted

 

5 cronjob

在给定时间点只运行一次

周期性地在给定时间点运行

 

CronJob Spec
.spec.schedule :调度,必需字段,指定任务运行周期,格式同 Cron
.spec.jobTemplate :Job 模板,必需字段,指定需要运行的任务,格式同 Job
.spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。如果因为任何原因而错
过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限
.spec.concurrencyPolicy :并发策略,该字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的
并发执行。只允许指定下面策略中的一种:
Allow (默认):允许并发运行 Job
Forbid :禁止并发运行,如果前一个还没有完成,则直接跳过下一个
Replace :取消当前正在运行的 Job,用一个新的来替换
注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总
是允许并发运行。
.spec.suspend :挂起,该字段也是可选的。如果设置为 true ,后续所有执行都会被挂起。它对已经开始
执行的 Job 不起作用。默认值为 false 。
.spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit :历史限制,是可选的字段。它
们指定了可以保留多少完成和失败的 Job。默认情况下,它们分别设置为 3 和 1 。设置限制的值为 0 ,相
关类型的 Job 完成后将不会被保留。

 

5.1 查看cronjob的信息

 

 

查看pod日志

 

[[email protected] yaml]# kubectl log hello-1584433800-4bfc4
log is DEPRECATED and will be removed in a future version. Use logs instead.
Tue Mar 17 08:30:25 UTC 2020
Hello from the Kubernetes cluster

 

5.2 删除cronjob

 

[[email protected] yaml]# kubectl delete cronjob --all
cronjob.batch "hello" deleted

6 StatefulSet

statefulset见:https://www.cnblogs.com/huningfei/p/12704794.html