k8s基本使用入門-了解ReplicationController

剛剛默認(rèn)創(chuàng)建的 pod 就只有一個(gè),那么如何創(chuàng)建多個(gè) pod,以及動(dòng)態(tài)擴(kuò)容呢。
我們進(jìn)行如下操作之前,先將之前啟動(dòng)的 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

現(xiàn)在來(lái)看一個(gè)新的 yaml 文件:

[root@kube-node01 yaml]$ cat rc_nginx.yml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3    #這是一個(gè)ReplicaSet類型的,下邊又可以看到定義的數(shù)字是 3,也就是啟動(dòng) 3 個(gè) pod
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

現(xiàn)在開始創(chuàng)建:

[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

這里可以看到已經(jīng)有三個(gè)了,其中有兩個(gè)的狀態(tài)還是啟動(dòng)中的,那么等待一會(huì)兒,就也 running 起來(lái)了。

這個(gè)時(shí)候還可以使用另外一個(gè)命令來(lái)查看狀態(tài):

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

此時(shí),我們嘗試一下刪除其中的一個(gè) pod,看看會(huì)有什么效果

[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

刪除了一個(gè),然后再次查看的時(shí)候,發(fā)現(xiàn)又有一個(gè)新的 pod 在生成中了,也就是說(shuō),當(dāng) pod 以這種kind: ReplicationController方式啟動(dòng)的時(shí)候,會(huì)維持住 3 個(gè)這個(gè)數(shù)目。這就是他的特性,因此在啟動(dòng)一個(gè) pod 的時(shí)候,是推薦使用這種方式的,即便數(shù)目是 1 個(gè),那么即便這個(gè) pod 會(huì)在某個(gè)時(shí)刻某個(gè)原因退出了,仍舊會(huì)被自動(dòng)創(chuàng)建恢復(fù)出來(lái)。

在動(dòng)態(tài)擴(kuò)容管理方面,我們需要引入到另外一個(gè)參數(shù)scale。

依舊是先看下用法:

[root@kube-node01 yaml]$ kubectl scale --help
為Deployment,ReplicaSet,Replication Controller或StatefulSet設(shè)置新大小。
 
Scale還允許用戶為縮放操作指定一個(gè)或多個(gè)前提條件。
 
如果指定了--current-replicas或--resource-version,則在嘗試擴(kuò)展之前驗(yàn)證它,并且它是
保證在將比例發(fā)送到服務(wù)器時(shí)前提條件成立。
 
例子:
  #將名為'foo'的復(fù)制集縮放為3。
  kubectl scale --replicas = 3 rs / foo
 
  #將由“foo.yaml”中指定的類型和名稱標(biāo)識(shí)的資源縮放為3。
  kubectl scale --replicas = 3 -f foo.yaml
 
  #如果名為mysql當(dāng)前大小的部署為2,則將mysql擴(kuò)展為3。
  kubectl scale --current-replicas = 2 --replicas = 3 deployment / mysql
 
  ??s放多個(gè)復(fù)制控制器。
  kubectl scale --replicas = 5 rc / foo rc / bar rc / baz
 
  #將名為'web'的statefulset縮放為3。
  kubectl scale --replicas = 3 statefulset / web
 
選項(xiàng):
      --all = false:選擇指定資源類型的命名空間中的所有資源
      --current-replicas = -1:當(dāng)前大小的前提條件。要求資源的當(dāng)前大小與此匹配
價(jià)值以便擴(kuò)大規(guī)模。
  -f, - filename = []:標(biāo)識(shí)要設(shè)置新大小的資源的文件的文件名,目錄或URL
      --include-extended-apis = true:如果為true,則通過(guò)調(diào)用API服務(wù)器包含新API的定義。 [默認(rèn)為true]
  -o, - output ='':輸出模式。使用“-o name”表示較短的輸出(資源/名稱)。
      --record = false:在資源注釋中記錄當(dāng)前kubectl命令。如果設(shè)置為false,請(qǐng)不要記錄
命令。如果設(shè)置為true,則記錄該命令。如果未設(shè)置,則默認(rèn)僅更新現(xiàn)有注釋值
已經(jīng)存在。
  -R, - recursive = false:遞歸處理-f, - filename中使用的目錄。在您想要管理時(shí)很有用
在同一目錄中組織的相關(guān)清單。
      --replicas = -1:新的所需副本數(shù)。需要。
      --resource-version ='':資源版本的前提條件。要求當(dāng)前資源版本與此匹配
價(jià)值以便擴(kuò)大規(guī)模。
  -l, - selector ='':要過(guò)濾的選擇器(標(biāo)簽查詢),支持'=','=='和'!='。(例如-l key1 = value1,key2 = value2)
      --timeout = 0s:放棄縮放操作之前等待的時(shí)間長(zhǎng)度,零表示不等待。任何其他
值應(yīng)包含相應(yīng)的時(shí)間單位(例如1s,2m,3h)。
 
用法:
  kubectl scale [--resource-version = version] [ - current-replicas = count] --replicas = COUNT(-f FILENAME | TYPE NAME)
[選項(xiàng)]
 
使用“kubectl options”獲取全局命令行選項(xiàng)列表(適用于所有命令)

現(xiàn)在,我想把剛剛啟動(dòng)的 nginx 的 3 個(gè) pod 變成兩個(gè),可如下操作:

[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

這時(shí)看到已經(jīng)剩下兩個(gè)了。那么擴(kuò)容也是一樣的,直接擴(kuò)容就行了

[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

就這樣,非常方便的就實(shí)現(xiàn)了擴(kuò)容等操作了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容