k8s rc 实验。
注:本文为笔者实验记录,非教程,另会不定时更新。
环境
# kubectl get node
NAME STATUS ROLES AGE VERSION
edge-node Ready <none> 15m v1.17.0
edge-node2 Ready <none> 16m v1.17.0
ubuntu Ready master 67d v1.17.0
rc
Replication Controller(简称rc)用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
技术总结
创建yaml文件,指定数量。
测试扩容、缩容。
测试滚动升级。
测试yaml文件
# vim busybox-rc.yaml
apiVersion: v1
kind: ReplicationController # 声明RC
metadata:
name: busybox
labels:
app: busybox
spec:
replicas: 2 # !! 此处为2个副本
selector:
app: busybox
template:
metadata:
labels:
app: busybox ## 指定标签,与selector要一致
spec:
containers:
- name: busybox
image: latelee/busybox # 镜像名称,真实存在
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
创建:
kubectl create -f busybox-rc.yaml
查看:
# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-gng75 0/1 ContainerCreating 0 6s
busybox-wh9g5 0/1 ContainerCreating 0 6s
# kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-gng75 1/1 Running 0 24s
busybox-wh9g5 1/1 Running 0 24s
另外有命令:
kubectl get pod -o wide # 有pod运行的节点
kubectl get pod -o yaml # 更详细的信息
kubectl get pod -l app=busybox # 标签配套
kubectl get rc # 获取RC信息,可加 -o wide 或 -o yaml,注:rc为replicationcontrollers缩写
测试:可删除其中一个pod,会自动创建,保持2个副本。
获取RC:
# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
busybox 2 2 2 9m41s busybox latelee/busybox name=busybox
扩容:
kubectl scale rc busybox --replicas=5
过程信息:
NAME READY STATUS RESTARTS AGE
busybox-79vhg 1/1 Running 0 10m
busybox-94plm 0/1 ContainerCreating 0 2s
busybox-gng75 1/1 Running 0 13m
busybox-lsxk4 1/1 Running 0 2s
busybox-zxsm7 0/1 ContainerCreating 0 2s
注:2台从,可验证其分配。
缩容:
kubectl scale rc busybox --replicas=2
过程信息:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
busybox-79vhg 1/1 Running 0 12m 10.244.4.4 edge-node2 <none> <none>
busybox-94plm 1/1 Terminating 0 2m21s 10.244.1.4 edge-node <none> <none>
busybox-gng75 1/1 Running 0 15m 10.244.1.3 edge-node <none> <none>
busybox-lsxk4 1/1 Terminating 0 2m21s 10.244.4.5 edge-node2 <none> <none>
busybox-zxsm7 1/1 Terminating 0 2m21s 10.244.1.5 edge-node <none> <none>
滚动升级
场合1:仅是镜像升级。
kubectl rolling-update busybox --image=latelee/busybox:1.1
输出信息:
Command "rolling-update" is deprecated, use "rollout" instead
Created busybox-1ccc8111eb780500bbe058944dc46e2e
Scaling up busybox-1ccc8111eb780500bbe058944dc46e2e from 0 to 2, scaling down busybox from 2 to 0 (keep 2 pods available, don't exceed 3 pods)
Scaling busybox-1ccc8111eb780500bbe058944dc46e2e up to 1
另起终端查看pod:
正在升级:
busybox-1ccc8111eb780500bbe058944dc46e2e-x2wrd 0/1 ContainerCreating 0 80s
busybox-79vhg 1/1 Running 1 84m
busybox-gng75 1/1 Running 1 87m
升级后:
NAME READY STATUS RESTARTS AGE
busybox-1ccc8111eb780500bbe058944dc46e2e-lqbtp 1/1 Running 4 4h20m
busybox-1ccc8111eb780500bbe058944dc46e2e-x2wrd 1/1 Running 4 12h
验证(查看版本):
# kubectl exec -it busybox-1ccc8111eb780500bbe058944dc46e2e-lqbtp cat version
v1.1
结论:新的运行,旧的消逝。
停止:
kubectl delete -f busybox-rc.yaml
TODO
镜像改变,传入参数改变,如何升级?