Kubernetes入门实验:rc

561 阅读3分钟

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

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