0
点赞
收藏
分享

微信扫一扫

k8s基本使用入门-了解ReplicationController

两岁时就很帅 2021-09-24 阅读 20
日记本

刚刚默认创建的 pod 就只有一个,那么如何创建多个 pod,以及动态扩容呢。
我们进行如下操作之前,先将之前启动的 nginx 的 pod 删掉,使用如下指令:

[root@kube-node01 yaml]$ kubectl delete -f pod_nginx.yml
pod "nginx" deleted

[root@kube-node01 yaml]$ kubectl get pods
No resources found.

1、ReplicationController

现在来看一个新的 yaml 文件:

[root@kube-node01 yaml]$ cat rc_nginx.yml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3    #这是一个ReplicaSet类型的,下边又可以看到定义的数字是 3,也就是启动 3 个 pod
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

现在开始创建:

[root@kube-node01 yaml]$ kubectl create -f rc_nginx.yml
replicationcontroller "nginx" created

[root@kube-node01 yaml]$ kubectl get pods
NAME          READY     STATUS              RESTARTS   AGE
nginx-2qzvm   1/1       Running             0          7s
nginx-c5nk4   0/1       ContainerCreating   0          7s
nginx-r2zcm   0/1       ContainerCreating   0          7s

这里可以看到已经有三个了,其中有两个的状态还是启动中的,那么等待一会儿,就也 running 起来了。

这个时候还可以使用另外一个命令来查看状态:

[root@kube-node01 yaml]$ kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
nginx     3         3         3         1m

此时,我们尝试一下删除其中的一个 pod,看看会有什么效果

[root@kube-node01 yaml]$ kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
nginx-2qzvm   1/1       Running   0          4m
nginx-c5nk4   1/1       Running   0          4m
nginx-r2zcm   1/1       Running   0          4m

[root@kube-node01 yaml]$ kubectl delete pods nginx-2qzvm
pod "nginx-2qzvm" deleted

[root@kube-node01 yaml]$ kubectl get pods
NAME          READY     STATUS              RESTARTS   AGE
nginx-c5nk4   1/1       Running             0          5m
nginx-qlwl2   0/1       ContainerCreating   0          2s
nginx-r2zcm   1/1       Running             0          5m

删除了一个,然后再次查看的时候,发现又有一个新的 pod 在生成中了,也就是说,当 pod 以这种kind: ReplicationController方式启动的时候,会维持住 3 个这个数目。这就是他的特性,因此在启动一个 pod 的时候,是推荐使用这种方式的,即便数目是 1 个,那么即便这个 pod 会在某个时刻某个原因退出了,仍旧会被自动创建恢复出来。

在动态扩容管理方面,我们需要引入到另外一个参数scale。

依旧是先看下用法:

[root@kube-node01 yaml]$ kubectl scale --help
为Deployment,ReplicaSet,Replication Controller或StatefulSet设置新大小。
 
Scale还允许用户为缩放操作指定一个或多个前提条件。
 
如果指定了--current-replicas或--resource-version,则在尝试扩展之前验证它,并且它是
保证在将比例发送到服务器时前提条件成立。
 
例子:
  #将名为'foo'的复制集缩放为3。
  kubectl scale --replicas = 3 rs / foo
 
  #将由“foo.yaml”中指定的类型和名称标识的资源缩放为3。
  kubectl scale --replicas = 3 -f foo.yaml
 
  #如果名为mysql当前大小的部署为2,则将mysql扩展为3。
  kubectl scale --current-replicas = 2 --replicas = 3 deployment / mysql
 
  #缩放多个复制控制器。
  kubectl scale --replicas = 5 rc / foo rc / bar rc / baz
 
  #将名为'web'的statefulset缩放为3。
  kubectl scale --replicas = 3 statefulset / web
 
选项:
      --all = false:选择指定资源类型的命名空间中的所有资源
      --current-replicas = -1:当前大小的前提条件。要求资源的当前大小与此匹配
价值以便扩大规模。
  -f, - filename = []:标识要设置新大小的资源的文件的文件名,目录或URL
      --include-extended-apis = true:如果为true,则通过调用API服务器包含新API的定义。 [默认为true]
  -o, - output ='':输出模式。使用“-o name”表示较短的输出(资源/名称)。
      --record = false:在资源注释中记录当前kubectl命令。如果设置为false,请不要记录
命令。如果设置为true,则记录该命令。如果未设置,则默认仅更新现有注释值
已经存在。
  -R, - recursive = false:递归处理-f, - filename中使用的目录。在您想要管理时很有用
在同一目录中组织的相关清单。
      --replicas = -1:新的所需副本数。需要。
      --resource-version ='':资源版本的前提条件。要求当前资源版本与此匹配
价值以便扩大规模。
  -l, - selector ='':要过滤的选择器(标签查询),支持'=','=='和'!='。(例如-l key1 = value1,key2 = value2)
      --timeout = 0s:放弃缩放操作之前等待的时间长度,零表示不等待。任何其他
值应包含相应的时间单位(例如1s,2m,3h)。
 
用法:
  kubectl scale [--resource-version = version] [ - current-replicas = count] --replicas = COUNT(-f FILENAME | TYPE NAME)
[选项]
 
使用“kubectl options”获取全局命令行选项列表(适用于所有命令)

现在,我想把刚刚启动的 nginx 的 3 个 pod 变成两个,可如下操作:

[root@kube-node01 yaml]$ kubectl scale rc nginx --replicas=2
replicationcontroller "nginx" scaled

[root@kube-node01 yaml]$ kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
nginx-c5nk4   1/1       Running   0          13m
nginx-r2zcm   1/1       Running   0          13m

[root@kube-node01 yaml]$ kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
nginx     2         2         2         14m

这时看到已经剩下两个了。那么扩容也是一样的,直接扩容就行了

[root@kube-node01 yaml]$ kubectl scale rc nginx --replicas=4
replicationcontroller "nginx" scaled

[root@kube-node01 yaml]$ kubectl get pods
NAME          READY     STATUS              RESTARTS   AGE
nginx-99nns   0/1       ContainerCreating   0          2s
nginx-c5nk4   1/1       Running             0          42m
nginx-fjnrn   0/1       ContainerCreating   0          2s
nginx-r2zcm   1/1       Running             0          42m

[root@kube-node01 yaml]$ kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
nginx     4         4         3         42m

就这样,非常方便的就实现了扩容等操作了

举报

相关推荐

0 条评论