一、pod的分类:
- 自主式pod:pod退出后不会被创建
- 控制器管理的pod:在控制器的生命周期里,始终要维持pod的副本数目
控制器类型: - Replication Controller 和ReplicaSet #RS只要是保证任何时间都有足够数量的副本在运行
- Deployment
- DaemonSet
- StatefulSet
- Job
- Cronjob
- HPA全称Horizontal pod Autoscaler
Deployment
Deployment为Pod和Replicaset提供了一个串明式的定义方法
典型的应用场景:
- 用来创建pod和Replicaset
- 滚动更新和回滚
- 扩容和缩容
- 暂停与恢复
运行一个小例子:例子所在官网
二、控制器具体例子
eg1. rs.yml
yml文件
[root@node1 manifest]# cat rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
# Unique key of the ReplicaSet instance
name: replicaset-example
spec:
# 3 Pods should exist at all times.
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
# Run the nginx image
- name: myapp
image: myapp:v1
[root@node1 manifest]# kubectl apply -f rs.yml #执行
[root@node1 manifest]# kubectl get pod -o wide #效果
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
replicaset-example-6zt5j 1/1 Running 0 6m3s 10.244.2.56 node3 <none> <none>
replicaset-example-7zv27 1/1 Running 0 6m2s 10.244.1.46 node2 <none> <none>
replicaset-example-t5jgl 1/1 Running 0 6m3s 10.244.2.55 node3 <none> <none>
将rs.yml里的镜像版本换为v2,副本数不变的话,命令运行文件,版本号不会改变,除非增加副本书,新增加的版本才是v2,以前的还是v1版本。
eg2 deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-v1
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
将镜像版本改为v2,再次运行
eg3. daemonset.yml
[root@node1 manifest]# cat daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-v1
spec:
selector:
matchLabels:
app: zabbix-agent
template:
metadata:
labels:
app: zabbix-agent
spec:
containers:
- name: zabbix-agent
image: zabbix-agent
在私有仓库拉取镜像。并改下标签上传到自己的私有仓库
[root@reg harbor]# docker pull zabbix/zabbix-agent
[root@reg harbor]# docker tag zabbix/zabbix-agent reg.westos.org/library/zabbix-agent
[root@reg harbor]# docker push reg.westos.org/library/zabbix-agent
如果新开一个节点,daemonset也会在新开的节点上拉取一个pod
eg4. job.yaml
在私有仓库拉取perl镜像,docker tag改标签,再上传到私有仓库方便本地各节点下载。
[root@node1 manifest]# cat job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
template:
metadata:
name: example-job
spec:
containers:
- name: pi
image: perl
command: ["perl"]
args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
运行:
[root@node1 manifest]# kubectl apply -f job.yaml
job.batch/example-job created
[root@node1 manifest]# kubectl get pod
NAME READY STATUS RESTARTS AGE
example-job-z4bbh 0/1 ContainerCreating 0 6s
[root@node1 manifest]# kubectl get pod
NAME READY STATUS RESTARTS AGE
example-job-z4bbh 0/1 Completed 0 14s
查看运行结果
eg5 CronJob.yaml
[root@node1 manifest]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: crontab
image: busybox
args:
- /bin/sh
- -c
- date; echo hello from k8s cluster
restartPolicy: OnFailure
```[root@node1 manifest]# kubectl apply -f cronjob.yaml
cronjob.batch/cronjob-example created
[root@node1 manifest]# kubectl get pod
No resources found in default namespace.
[root@node1 manifest]# kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob-example-1593152220-bvs5x 0/1 ContainerCreating 0 6s
每分钟创建一个
[root@node1 manifest]# kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob-example-1593152220-bvs5x 0/1 Completed 0 103s
cronjob-example-1593152280-849w9 0/1 Completed 0 42s