運維之擴容與升級

本文咱們將對Kubernetes的經常使用運維操做擴容與升級作簡單說明。php

1.Node的擴容

Node的擴容簡單言之就是增長新的Node節點。在節點上安裝Kubelet,Kube-proxy及Docker, 並修改參數使其指向Master地址。基於Kuberlet的自動註冊機制,新的Node將會自動加入現有的Kubernetes集羣中。html

2.Pod的動態擴容和縮放

在實際運維過程當中,咱們經常須要對某個服務動態擴容以知足突增的流量,或者動態減小服務實例節約服務器資源。
下面咱們將動態增長redis-slave的pod副本由2個增長爲3個。
#kubectl scale rc redis-slave –replicas=3python

[root@CentOS7 python]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
frontend-02x2s       1/1       Running   1          1d
frontend-8xtuj       1/1       Running   1          1d
frontend-ko8b2       1/1       Running   1          1d
redis-master-2v6pp   1/1       Running   1          1d
redis-slave-5k126    1/1       Running   1          1d
redis-slave-9dqti    1/1       Running   1          1d
[root@CentOS7 python]# kubectl scale rc redis-slave --replicas=3 scaled
[root@CentOS7 python]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
frontend-02x2s       1/1       Running   1          1d
frontend-8xtuj       1/1       Running   1          1d
frontend-ko8b2       1/1       Running   1          1d
redis-master-2v6pp   1/1       Running   1          1d
redis-slave-0d33n    1/1       Running   0          59s
redis-slave-5k126    1/1       Running   1          1d
redis-slave-9dqti    1/1       Running   1          1d

一樣的咱們也能夠減小pod的副本,如下咱們將redis-slave由3個副本減爲1個。mysql

[root@CentOS7 python]# kubectl scale rc redis-slave --replicas=1  scaled
[root@CentOS7 python]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
frontend-02x2s       1/1       Running   1          1d
frontend-8xtuj       1/1       Running   1          1d
frontend-ko8b2       1/1       Running   1          1d
redis-master-2v6pp   1/1       Running   1          1d
redis-slave-0d33n    1/1       Running   0          2m

3.應用的滾動升級

在實際運維過程當中,如何不中止服務而進行升級將變得愈來愈常見,Kubernetes提供了Rolling-update的功能來解決上述場景。
咱們假設PHP的image有一個新的v2版本,咱們須要將現有PHP服務滾動升級爲v2。redis

3.1製做新鏡像

簡單起見,咱們經過docker commit來製做一個新鏡像,首先用原鏡像啓動一個新容器,你能夠在容器裏修改,而後退出。sql

 

[root@CentOS7 python]# docker run -it docker.io/kubeguide/guestbook-php-frontend /bin/bash
root@68b765a2b8db:/var/www/html# exit
exit
好,如今咱們用docker commit來保存剛纔咱們編輯過的容器,咱們把它命名爲guestbook-php-frontend:v2
[root@CentOS7 python]# docker commit 68b765a2b8db guestbook-php-frontend:v2
afa8c93501405642879a30d14ddeb087e48d8fb7a7a04dd2ab8f5556fd9db99b
[root@CentOS7 python]# docker images
REPOSITORY                                            TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
guestbook-php-frontend                                v2                  afa8c9350140        About a minute ago   509.6 MB
daocloud.io/daocloud/daocloud-toolset                 latest              01869b5aa54e        3 weeks ago          150.2 MB
docker.io/mysql                                       latest              4b95c7a7999d        4 weeks ago          374 MB
registry.access.redhat.com/rhel7/pod-infrastructure   latest              2b96d2bcbc46        6 weeks ago          428 MB
docker.io/kubeguide/guestbook-php-frontend            latest              38658844a359        8 months ago         509.6 MB
docker.io/kubeguide/redis-master                      latest              423e126c2ad4        8 months ago         419.1 MB
docker.io/kubeguide/guestbook-redis-slave             latest              00206e07dd92        9 months ago         109.5 MB
咱們看到新增長了一個鏡像guestbook-php-frontend,tag爲v2,接下來咱們將經過兩種方法來演示滾動升級。

3.2經過配置文件

建立 frontend-controller-v2.yamldocker

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend-v2
  labels:
    name: frontend
spec:
  replicas: 3
  selector:
    name: frontend-v2
  template:
    metadata:
      labels:
        name: frontend-v2
    spec:
      containers:
      - name: php-redis
        image: guestbook-php-frontend:v2
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

Kubectl的執行過程以下:api

 [root@CentOS7 kube-guestbook]#kubectl rolling-update frontend -f frontend-controller-v2.yaml
查看pods建立過程, 咱們看到新的POD副本從1開始增長,舊的POD副本從3逐步減小,最終舊的POD副本被刪除。這樣就完成了應用的升級。

3.3經過新版鏡像

另外一種方法是不使用配置文件,直接用kubectl rolling-update 加上–image參數指定新版鏡像名稱來滾動升級
kubectl rolling-update frontend –image=guestbook-php-frontend:v2bash

 

更新完成,查看RC,咱們看到與配置文件不一樣,Kubectl給rc增長了一個key爲」deployment」的label,固然這個名字能夠經過–deployment-label-key參數修改。服務器

[root@localhost ~]# kubectl get rc
CONTROLLER     CONTAINER(S)   IMAGE(S)                                    SELECTOR                                                    REPLICAS
frontend       php-redis      guestbook-php-frontend:v2                   deployment=cdb7f26e49a90eae43e257284310b1cf,name=frontend   3

若是在更新過程當中發現配置錯誤,能夠經過執行kubectl rolling-update –rollback完成回滾kubectl rolling-update frontend –image=guestbook-php-frontend:v2 –rollback

相關文章
相關標籤/搜索