本文咱們將對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