RC主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数,即如果容器异常退出,会自动创建新的pod来替代;而如果异常多出来的容器也会自动回收
kubernetes官方建议使用RS替代RC进行部署,RS和RC没有本质的不同,只是名字不一样,并且RS支持集合式的selector
RS示例
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 2
selector: //选择标签
matchLabels: //匹配标签
app: frontend //标签名
template: //模板
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx
env: //注入环境变量
- name: GET_HOST_FROM
value: dns
ports:
- containerPort: 80
查看标签
[root@master yaml]# kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-8csz8 1/1 Running 0 106s app=frontend
frontend-w2twt 1/1 Running 0 106s app=frontend
RS与Deployment的关联
Deployment
Deployment为pod和ReplicaSet提供了一个声明式定义方法,用来替代以前的RC来方便的管理应用。典型的应用场景包括;
1,定义Deployment来创建pod和ReplicaSet
2,滚动升级和回滚应用
3,扩容和缩容
4,暂停和继续Deployment
示例 部署一个nginx应用
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
附加
kubectl create -f deployment.yaml --record
--record可以记录命令 可以很方便查看revision的变化
扩容
kubectl scale deployment 控制器名 --replicas 10
如果集群支持horizontal pod autoscaling的话,还可以为deployment设置自动扩展
kubectl autoscale deployment 控制器名 --min=10 --max=15 --cpu-percent=80
更新
kubectl set image deployment/控制器名 镜像名=镜像名:版本号
暂停更新
kubectl rollout pause deployment/控制器名
回滚
kubectl rollout undo deployment/控制器名
查看回滚状态
kubectl rollout status deployment/控制器名
指定回滚到某个版本
kubectl rollout undo deployment/控制器名 --to-revision=版本号
在线编辑yaml文件
[root@master yaml]# kubectl edit deployment //应用yaml文件
[root@master yaml]# kubectl edit svc/应用名 //应用svc的yaml文件
查看deployment保存的历史纪录
[root@master yaml]# kubectl rollout history deployment 服务名
deployment.extensions/web
REVISION CHANGE-CAUSE
2 <none>
3 <none>
Deployment更新策略
Deployment可以保证在升级时只有一定数量的pod是down的,默认的他会确保至少有比期望的pod数量上一个是up状态(最多一个不可用)
Deployment同时也可以确保只创建出超时期望数量的一定数量的Pod,默认的他会确保最多比期望的pod数量多一个的pod是up状态(最多一个surge)