在之前,使用kubectl run的pod中,当pod被删除后会自动创建。而在kubectl create使用-f指定yaml文件时候,在删除则不会被创建。在kubectl run的pod是被控制器管理的,pod控制会严格管控pod资源符合用户期望的目标状态,如:定义了3个pod资源,一旦缺少必然会重建补全,多余也会杀死终止,一旦故障尝试重启或者编排。倘若希望减少是可以用命令定义缩减。然而使用create -f NAME.yaml的方式清晰简单,可定义想要的方式
ReplicaSet
replicaset:代用户创建指定的pod副本,并确保pod副本一直满足与用户期望的状态,并且支持扩展和缩容。replicaset由三个部分组成,分别是"用户期望副本数","标签选择器"(选择和管理副本),"pod资源模板"。当用户创建副本后,标签选择根据信息创建pod副本,一旦pod副本缺少或者超出,则使用第三个组成部分"pod资源模板",根据pod资源模板进行扩展或者缩容create一个模板
[root@linuxea linuxea]# cat replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: linuxea.com
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: linuxea.com
release: v1
template:
metadata:
name: linuxea.com-pod
labels:
app: linuxea.com
release: v1
spec:
containers:
- name: linuxea-container
image: marksugar/nginx:1.14.b
imagePlull:
ports:
- name: http
containerPort: 80
这里使用逻辑域,加上matchLabels字段。selector必须匹配有app标签,name必须是linuxea.com,有release表情,那么值必须是v1template的labels字段最好和selector中一样
[root@linuxea linuxea]# kubectl describe pods linuxea.com-8fkl2
Name: linuxea.com-8fkl2
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: linuxea.node-2.com/10.10.240.203
Start Time: Thu, 30 Aug 2018 13:41:01 +0100
Labels: app=linuxea.com
release=v1
Annotations: <none>
Status: Running
IP: 172.16.2.28
Controlled By: ReplicaSet/linuxea.com
[root@linuxea linuxea]# curl 172.16.2.28
linuxea-linuxea.com-8fkl2.com-127.0.0.1/8 172.16.2.28/24
[root@linuxea linuxea]# curl 172.16.2.28/linuxea.html
linuxea-linuxea.com-8fkl2.com ▍ b9415aba0478a ▍version number 2.0
倘若此刻删除则会补全这个pod
[root@linuxea linuxea]# kubectl delete pods linuxea.com-v4l9h
pod "linuxea.com-v4l9h" deleted
[root@linuxea linuxea]# kubectl get pods -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE LABELS
client-linuxea 1/1 Running 0 6d 172.16.2.252 linuxea.node-2.com <none> run=client-linuxea
linuxea.com-8fkl2 1/1 Running 0 9m 172.16.2.28 linuxea.node-2.com <none> app=linuxea.com,release=v1
linuxea.com-bbzf2 1/1 Running 0 3m 172.16.3.32 linuxea.node-3.com <none> app=linuxea.com,release=v1
此刻若要扩展编辑yaml文件即可
[root@linuxea linuxea]# kubectl get rs
NAME DESIRED CURRENT READY AGE
linuxea.com 2 2 2 27m
nginx-linuxea-5786698598 3 3 3 4d
使用 kubectl edit rs linuxea.com编辑,修改replicas数量即可
spec:
replicas: 5
如下,此刻已经被扩展
[root@linuxea linuxea]# kubectl edit rs linuxea.com
replicaset.extensions/linuxea.com edited
[root@linuxea linuxea]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
client-linuxea 1/1 Running 0 6d 172.16.2.252 linuxea.node-2.com <none>
linuxea.com-8fkl2 1/1 Running 0 27m 172.16.2.28 linuxea.node-2.com <none>
linuxea.com-bbzf2 1/1 Running 0 22m 172.16.3.32 linuxea.node-3.com <none>
linuxea.com-httpget 1/1 Running 2 3d 172.16.2.12 linuxea.node-2.com <none>
linuxea.com-httpget-readiness 1/1 Running 0 2d 172.16.3.30 linuxea.node-3.com <none>
linuxea.com-l9vwg 1/1 Running 0 9s 172.16.2.29 linuxea.node-2.com <none>
linuxea.com-mml4h 1/1 Running 0 9s 172.16.3.33 linuxea.node-3.com <none>
linuxea.com-vsn5l 1/1 Running 0 9s 172.16.1.33 linuxea.node-1.com <none>
倘若需要修改image的版本,也可以如此
spec:
containers:
- image: marksugar/nginx:1.14.a
[root@linuxea linuxea]# kubectl get rs -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
linuxea.com 5 5 5 38m linuxea-container marksugar/nginx:1.14.a app=linuxea.com,release=v1
不过,这里修改的v1,只有重新创建才会生效,并不会立刻生效此刻删除一个则会生效
[root@linuxea linuxea]# kubectl delete pods linuxea.com-l9vwg
pod "linuxea.com-l9vwg" deleted
[root@linuxea linuxea]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
client-linuxea 1/1 Running 0 6d 172.16.2.252 linuxea.node-2.com <none>
linuxea.com-8f7b8 1/1 Running 0 45s 172.16.2.30 linuxea.node-2.com <none>
在去curl已经完成修改
[root@linuxea linuxea]# curl 172.16.2.30/linuxea.html
linuxea-linuxea.com-8f7b8.com ▍ e58a6cb7d33c3 ▍version number 1.0
这就类似与灰度更新,倘若使用标签选择器进行修改和多次i修改即可变成蓝绿发布类型,但是其中必然涉及到太多的设计与参与,那么Deployment就可以,Deployment在下篇