RS与RC与Deployment关联
RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如
果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收
Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有
本质的不同,只是名字不一样,并且 RS 支持集合式的 selector
pull nginx镜像
docker pull nginx
#查看镜像
docker images#TAG是latest
建立演示文件
创建rs.yaml
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: nginx:latest
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 80
创建pod:
kubectl create -f rs.yaml
查看rs
[root@apiserver ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 3 3 3 21s
查看pod
这里要等一会
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
frontend-87wtq 1/1 Running 0 23s
frontend-r8kjt 1/1 Running 0 23s
frontend-w7n98 1/1 Running 0 23s
查看rs标签
[root@apiserver ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-87wtq 1/1 Running 0 2m39s tier=frontend
frontend-r8kjt 1/1 Running 0 2m39s tier=frontend
frontend-w7n98 1/1 Running 0 2m39s tier=frontend
修改pod标签
pod标签是pod的唯一标识符
将frontend-87wtq tier=frontend1
[root@apiserver ~]# kubectl label pod frontend-87wtq tier=frontend1
error: 'tier' already has a value (frontend), and --overwrite is false
[root@apiserver ~]# kubectl label pod frontend-87wtq tier=frontend1 --overwrite=true
pod/frontend-87wtq labeled
[root@apiserver ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-87wtq 1/1 Running 0 5m49s tier=frontend1
frontend-r8kjt 1/1 Running 0 5m49s tier=frontend
frontend-w7n98 1/1 Running 0 5m49s tier=frontend
frontend-wh4xx 1/1 Running 0 2s tier=frontend
查看rs
发现还是3个
[root@apiserver ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
frontend 3 3 3 24m
这时我们会发现rs的数量没有变,pod的数量多了一个,原因是rs replicas:3
是以标签tier=frontend
为准,当修改标签后。
会自动创建和原来标签一样的pod,当删除rs之后,还会存留tier=frontend1的pod
[root@apiserver ~]# kubectl delete rs --all
replicaset.extensions "frontend" deleted
[root@apiserver ~]#
[root@apiserver ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
frontend-87wtq 1/1 Running 0 29m tier=frontend1
RS与Deployment的关联
Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的
ReplicationController 来方便的管理应用。典型的应用场景包括:
- 定义Deployment来创建Pod和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续Deployment
1. 创建deployment.yaml
文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: ngin