运维之扩容与升级

本文咱们将对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

相关文章
相关标签/搜索