• 1. Pod伸缩
    • 1.1. 手动伸缩(scale)
    • 1.2. 自动伸缩(HPA)
      • 1.2.1. 通过kubectl autoscale创建
      • 1.2.2. 通过yaml配置文件创建
  • 2. Pod滚动升级
    • 2.1. 通过配置文件实现
    • 2.2. 通过kubectl rolling-update命令实现
    • 2.3. 升级回滚

    1. Pod伸缩

    k8s中RC的用来保持集群中始终运行指定数目的实例,通过RC的scale机制可以完成Pod的扩容和缩容(伸缩)。

    1.1. 手动伸缩(scale)

    1. kubectl scale rc redis-slave --replicas=3

    1.2. 自动伸缩(HPA)

    Horizontal Pod Autoscaler(HPA)控制器用于实现基于CPU使用率进行自动Pod伸缩的功能。HPA控制器基于Master的kube-controller-manager服务启动参数—horizontal-pod-autoscaler-sync-period定义是时长(默认30秒),周期性监控目标Pod的CPU使用率,并在满足条件时对ReplicationController或Deployment中的Pod副本数进行调整,以符合用户定义的平均Pod CPU使用率。Pod CPU使用率来源于heapster组件,因此需安装该组件。

    可以通过kubectl autoscale命令进行快速创建或者使用yaml配置文件进行创建。创建之前需已存在一个RC或Deployment对象,并且该RC或Deployment中的Pod必须定义resources.requests.cpu的资源请求值,以便heapster采集到该Pod的CPU。

    1.2.1. 通过kubectl autoscale创建

    例如:

    php-apache-rc.yaml

    1. apiVersion: v1
    2. kind: ReplicationController
    3. metadata:
    4. name: php-apache
    5. spec:
    6. replicas: 1
    7. template:
    8. metadata:
    9. name: php-apache
    10. labels:
    11. app: php-apache
    12. spec:
    13. containers:
    14. - name: php-apache
    15. image: gcr.io/google_containers/hpa-example
    16. resources:
    17. requests:
    18. cpu: 200m
    19. ports:
    20. - containerPort: 80

    创建php-apache的RC

    1. kubectl create -f php-apache-rc.yaml

    php-apache-svc.yaml

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: php-apache
    5. spec:
    6. ports:
    7. - port: 80
    8. selector:
    9. app: php-apache

    创建php-apache的Service

    1. kubectl create -f php-apache-svc.yaml

    创建HPA控制器

    1. kubectl autoscale rc php-apache --min=1 --max=10 --cpu-percent=50

    1.2.2. 通过yaml配置文件创建

    hpa-php-apache.yaml

    1. apiVersion: v1
    2. kind: HorizontalPodAutoscaler
    3. metadata:
    4. name: php-apache
    5. spec:
    6. scaleTargetRef:
    7. apiVersion: v1
    8. kind: ReplicationController
    9. name: php-apache
    10. minReplicas: 1
    11. maxReplicas: 10
    12. targetCPUUtilizationPercentage: 50

    创建hpa

    1. kubectl create -f hpa-php-apache.yaml

    查看hpa

    1. kubectl get hpa

    2. Pod滚动升级

    k8s中的滚动升级通过执行kubectl rolling-update命令完成,该命令创建一个新的RC(与旧的RC在同一个命名空间中),然后自动控制旧的RC中的Pod副本数逐渐减少为0,同时新的RC中的Pod副本数从0逐渐增加到附加值,但滚动升级中Pod副本数(包括新Pod和旧Pod)保持原预期值。

    2.1. 通过配置文件实现

    redis-master-controller-v2.yaml

    1. apiVersion: v1
    2. kind: ReplicationController
    3. metadata:
    4. name: redis-master-v2
    5. labels:
    6. name: redis-master
    7. version: v2
    8. spec:
    9. replicas: 1
    10. selector:
    11. name: redis-master
    12. version: v2
    13. template:
    14. metadata:
    15. labels:
    16. name: redis-master
    17. version: v2
    18. spec:
    19. containers:
    20. - name: master
    21. image: kubeguide/redis-master:2.0
    22. ports:
    23. - containerPort: 6371

    注意事项:

    1. RC的名字(name)不能与旧RC的名字相同
    2. 在selector中应至少有一个Label与旧的RC的Label不同,以标识其为新的RC。例如本例中新增了version的Label。

    运行kubectl rolling-update

    1. kubectl rolling-update redis-master -f redis-master-controller-v2.yaml

    2.2. 通过kubectl rolling-update命令实现

    1. kubectl rolling-update redis-master --image=redis-master:2.0

    与使用配置文件实现不同在于,该执行结果旧的RC被删除,新的RC仍使用旧的RC的名字。

    2.3. 升级回滚

    kubectl rolling-update加参数—rollback实现回滚操作

    1. kubectl rolling-update redis-master --image=kubeguide/redis-master:2.0 --rollback

    参考文章

    • 《Kubernetes权威指南》