Replication Controller简称RC,它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩
它在k8s中的架构如图:
RC会在每个节点上创建Pod,Pod上如果有相应的Images可以直接创建,如果没有,则会拉取这个镜像再进行创建
一.下面直接来看下在RC中的常见操作:
1.编辑配置文件
vim rc.json
{
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": { #设置rc的元数据
"name": "nginx-rc"
},
"spec": { #设置rc的具体规格
"replicas": 2, #设置Pod的具体数量
"selector": { #通过selector来匹配相应的Pod的label
"name": "myservice"
},
"template": { #设置Pod的模板
"metadata": {
"labels": {
"name":"myservice"
}
},
"spec": {
"containers": [{
"name": "nginx",
"image": "nginx",
"imagePullPolicy": "IfNotPresent", #镜像拉取策略,分为Always,Never,IfNotPresent,默认是Always
"ports": [{
"containerPort": 80
}]
}]
}
}
}
}
2.创建RC
kubectl create -f rep.json
replicationcontroller "nginx-rc" created
3.查询rc
kubectl get rc nginx-rc
要求有2个,已经成功创建的也是两个
4.查询pod运行情况
kubectl get pod -l name #-l 指定selector的key
可以看到两个创建好的pod,已经在Running状态
5.当删除其中一个Pod或者删除全部Pod的时候,RC会自动再次创建Pod,直到满足配置文件中定义的个数
kubectl delete pod nginx-rc-lbb7m
pod "nginx-rc-lbb7m" deleted
kubectl get pod -l name
二.弹性伸缩
弹性伸缩就是在现有环境不能满足业务需求的时候,进行的扩容或缩容
1.缩容Pod
kubectl scale replicationcontroller nginx-rc --replicas=1
replicationcontroller "nginx-rc" scaled
kubectl get pod -l name
kubectl get rc nginx-rc
2.扩容Pod
kubectl scale replicationcontroller nginx-rc --replicas=3
replicationcontroller "nginx-rc" scaled
kubectl get pod -l name
kubectl get rc nginx-rc
3.判断当前Pod副本是否正确,并修改数量
kubectl scale rc nginx-rc --current-replicas=3 --replicas=1
判断当前副本数是否为3个,如果是,则更改为1个副本
三.滚动升级
在滚动升级/更新方面,有一种更简单的机制,Depolyment
1.创建Depolyment
vim nginx-deployment.yaml #配置文件基本一致,就是改个类型,这里就不赘述了
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: Never
ports:
- containerPort: 80
hostPort: 8181
2.带记录点的方式创建Depolyment,在这条命令下面将开始记录所有对Depolyment的操作
kubectl create -f nginx-deployment.yaml --record
3.查询创建的Depolyment
kubectl get deployment
4.查询当前所在的记录点
kubectl rollout history deployment nginx-deployment
5.升级/更新这个Depolyment
vim nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginxv2 #更换源Images
imagePullPolicy: Never
ports:
- containerPort: 80
hostPort: 8181
kubectl apply -f nginx-deployment.yaml
deployment "nginx-deployment" configured
6.如果发现更改错误,可以进行回滚操作
kubectl rollout undo deployment nginx-deployment --to-revision=1 #回到编号为1的操作
deployment "nginx-deployment" rolled back
7.删除Depolyment
kubectl delete -f nginx-deployment.yaml
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com