Kubernetes入门实验:rc

作者注:本文仅为笔者学习记录,不具任何参考意义。

k8s rc 实验。
注:本文为笔者实验记录,非教程,另会不定时更新。

环境

1
2
3
4
5
# 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文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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"

创建:

1
kubectl create -f busybox-rc.yaml 

查看:

1
2
3
4
5
6
7
8
9
# 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

另外有命令:

1
2
3
4
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:

1
2
3
# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
busybox 2 2 2 9m41s busybox latelee/busybox name=busybox

扩容:

1
2
3
4
5
6
7
8
9
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台从,可验证其分配。

缩容:

1
2
3
4
5
6
7
8
9
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:仅是镜像升级。

1
kubectl rolling-update busybox --image=latelee/busybox:1.1

输出信息:

1
2
3
4
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:

1
2
3
4
5
6
7
8
9
正在升级:
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

验证(查看版本):

1
2
# kubectl exec -it busybox-1ccc8111eb780500bbe058944dc46e2e-lqbtp cat version
v1.1

结论:新的运行,旧的消逝。

停止:

1
kubectl delete -f busybox-rc.yaml 

TODO

镜像改变,传入参数改变,如何升级?