k8s-pod的资源控制器类型
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
[root@k8s-master01 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
root@k8s-master01 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
[root@k8s-master01 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
[root@k8s-master01 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
[root@k8s-master01 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日志
[root@k8s-master01 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
[root@k8s-master01 yaml]# kubectl delete cronjob --all
cronjob.batch "hello" deleted
6 StatefulSet
statefulset见:https://www.cnblogs.com/huningfei/p/12704794.html