《Kubernetes设计与实现》
  • Introduction
  • 内容简介
  • 前言
  • [第二章:Kubernetes基础]
    • 2.3 Kubernetes API
  • [第三章:工作负载管理]
    • [3.1 Pod]
      • 3.1.1 Pod概述
      • 3.1.1 Pod初体验
    • [3.2 ReplicationController]
      • 3.2.1 ReplicationController概述
      • 3.2.2 ReplicationController初体验
    • [3.3 ReplicaSet]
      • 3.3.1 ReplicaSet概述
      • 3.3.2 ReplicaSet初体验
    • [3.4 Deployment]
      • 3.4.1 Deployment概述
      • 3.4.2 Deployment初体验
    • [3.5 DaemonSet]
      • 3.5.1 DaemonSet概述
      • 3.5.2 DaemonSet初体验
  • [第四章:服务]
    • [4.1 Service]
      • 4.1.1 Service概述
      • 4.1.1 Service上手体验
  • [第六章:配置管理]
    • [6.1 Secret--机密信息管理]
      • 6.1.1 Secret概述
  • [第七章:集群认证]
    • [7.1 证书]
      • 7.1.1 证书基础
      • 7.1.2 证书签发流程
  • [第九章:准入控制器]
    • [9.1 准入控制器概述]
      • 9.1.1 概述
      • [9.1.2 内置默认启动的插件]
        • 9.1.2.1 NamespaceLifecycle
        • 9.1.2.15 MutatingAdmissionWebhook
  • [第十章:ResourceQuota]
    • 10.1 ResourceQuota概述
  • [第十六章:API设计约定]
    • 16.1 字段可选性设计约定
    • 16.2 condition设计约定
    • 16.3 event设计约定
  • [第十九章:Kubernetes生态]
    • [19.1 Kind]
      • [19.1.1 Kind概述]
      • 19.1.2 映射端口到主机
      • 19.1.3 配置端口转发
由 GitBook 提供支持
在本页
  • 创建
  • 查看
  • 更新
  • 改变副本个数
  • 模拟Pod异常
  • 删除

这有帮助吗?

  1. [第三章:工作负载管理]
  2. [3.2 ReplicationController]

3.2.2 ReplicationController初体验

本节,我们通过一些例子来演示ReplicationController的创建、查看、更新、删除等操作。

创建

首先我们准备一个名为replication_controller_simple.yaml的配置文件,其内容如下所示:

[root@ecs-d8b6 manifests]# cat replication_controller_simple.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: replication-controller-runs-pod
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.0

该ReplicationController配置保证同时有3个Pod副本在运行。

使用kubectl create命令创建资源,如下所示:

[root@ecs-d8b6 manifests]# kubectl create -f replication_controller_simple.yaml 
replicationcontroller/replication-controller-runs-pod created

查看

我们先查看刚刚创建的ReplicationController资源:

[root@ecs-d8b6 manifests]# kubectl get replicationcontrollers 
NAME                              DESIRED   CURRENT   READY   AGE
replication-controller-runs-pod   3         3         3       3m4s

可以看到期望的Pod数量(DESIRED)为3,当前已创建的Pod数量(CURRENT)也为3,并且处于运行状态的Pod数量(READY)同样是3,正是我们所期望的状态。

接着,我们查看实际运行的Pod:

[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
replication-controller-runs-pod-gv4l6   1/1     Running   0          6m11s
replication-controller-runs-pod-pcpmb   1/1     Running   0          6m11s
replication-controller-runs-pod-qxrhz   1/1     Running   0          6m11s

可以看到Pod运行也是正常的。

最后,我们查看ReplicationController的详细信息:

[root@ecs-d8b6 manifests]# kubectl describe replicationcontrollers replication-controller-runs-pod 
Name:         replication-controller-runs-pod
Namespace:    default
Selector:     app=nginx
Labels:       app=nginx
Annotations:  <none>
Replicas:     3 current / 3 desired
Pods Status:  3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.19.0
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                    Message
  ----    ------            ----  ----                    -------
  Normal  SuccessfulCreate  10m   replication-controller  Created pod: replication-controller-runs-pod-gv4l6
  Normal  SuccessfulCreate  10m   replication-controller  Created pod: replication-controller-runs-pod-qxrhz
  Normal  SuccessfulCreate  10m   replication-controller  Created pod: replication-controller-runs-pod-pcpmb

通过最后部分的Events信息可知,上面显示的Pod确实是名为replication-controller-runs-pod的ReplicationController创建的。

更新

改变副本个数

我们把上面replication_controller_simple.yaml配置文件中的副本数由3改为5,然后使用kubectl apply提交更改:

[root@ecs-d8b6 manifests]# kubectl apply -f replication_controller_simple.yaml 
replicationcontroller/replication-controller-runs-pod configured

然后再次查看Pod,可以发现Pod数量也会相应地调整为5。

[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
replication-controller-runs-pod-gv4l6   1/1     Running   0          25m
replication-controller-runs-pod-pcpmb   1/1     Running   0          25m
replication-controller-runs-pod-qtd4b   1/1     Running   0          6s
replication-controller-runs-pod-qxrhz   1/1     Running   0          25m
replication-controller-runs-pod-zz6fj   1/1     Running   0          6s

同样地,当副本数变小时,多出的Pod会被删除。

模拟Pod异常

假定当前名为replication-controller-runs-pod的ReplicationController维护的Pod副本数为3,我们通过删除Pod的方式模拟Pod异常,如下所示:

[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
replication-controller-runs-pod-gv4l6   1/1     Running   0          30m
replication-controller-runs-pod-pcpmb   1/1     Running   0          30m
replication-controller-runs-pod-qxrhz   1/1     Running   0          30m
[root@ecs-d8b6 manifests]# 
[root@ecs-d8b6 manifests]# 
[root@ecs-d8b6 manifests]# 
[root@ecs-d8b6 manifests]# kubectl delete pods replication-controller-runs-pod-gv4l6 
pod "replication-controller-runs-pod-gv4l6" deleted
[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
replication-controller-runs-pod-4598b   1/1     Running   0          10s
replication-controller-runs-pod-pcpmb   1/1     Running   0          31m
replication-controller-runs-pod-qxrhz   1/1     Running   0          31m

可以看到,当我们删除了名为replication-controller-runs-pod-gv4l6的Pod后,新的Pod对象replication-controller-runs-pod-4598b马上被创建了出来,从而保证副本数维持不变。

删除

当删除ReplicationController对象时,由该对象创建的Pod默认也会被删除,如下所示:

[root@ecs-d8b6 manifests]# kubectl delete -f replication_controller_simple.yaml 
replicationcontroller "replication-controller-runs-pod" deleted
[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                    READY   STATUS        RESTARTS   AGE
replication-controller-runs-pod-ktrxr   0/1     Terminating   0          18s
replication-controller-runs-pod-rcdhk   0/1     Terminating   0          18s
replication-controller-runs-pod-sc9mj   0/1     Terminating   0          18s
[root@ecs-d8b6 manifests]# kubectl get pods
No resources found in default namespace.
上一页3.2.1 ReplicationController概述下一页[3.3 ReplicaSet]

最后更新于4年前

这有帮助吗?