美文网首页
kubernetes之deployment

kubernetes之deployment

作者: 小小小笑呵 | 来源:发表于2019-06-27 08:40 被阅读0次

    水平扩展和伸缩

    正值流量高峰期,如何快速添加一个或几个web服务器呢?流量高峰期过去以后,又如何减少几个web服务器呢?

    假设目前只有两台服务器,一台部署了web服务器,一台部署了其他业务,如何保证web服务器崩溃以后,还能够提供web服务呢?

    在本文中,tomcat服务指的是一个pod中只有一个tomcat容器,在kubernetes集群中,deployment对象就是用来做这样一件事情。以tomcat服务为例子,deployment可以保证tomcat服务的个数,集群中某一部署tomcat服务的服务器崩溃了,集群中tomcat服务的个数依然不变。

    假设,我们创建创建了一个要求tomcat的pod的个数为2的deployment对象。如下图所示。此时,kubernetes就会定时检测集群中tomcat的pod的状态,比如pod中tomcat是否正常运行,tomcat所在主机是否正常。然后根据返回的结果,进行下一步操作。若woker1上的tomcat出现问题,则deployment就会在合适的节点上重新开启一个tomcat的pod。(重新开启的意思是将worker1上的tomcat的pod删除,然后再worker3上新建一个)

    deployment.png
    # 保持集群中tomcat的个数为2
    # 集群环境 一个master两个worker
    [root@master deployment]# cat deployment1.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: deployment-tomcat
      template:
        metadata:
          labels:
            app: deployment-tomcat
        spec:
          containers:
          - name: tomcat
            image: tomcat
            ports:
            - containerPort: 8080
    # kubectl get deployments -o wide
    NAME                READY   UP-TO-DATE   AVAILABLE
    tomcat-deployment   2/2     2            2 
    # kubectl get pods -o wide
    NAME                                 READY   STATUS               RESTARTS   AGE     IP           NODE
    tomcat-deployment-74d7b749f7-tvszz   1/1     Running              0          2m4s    10.44.0.32   worker1
    tomcat-deployment-74d7b749f7-cjnt8   1/1     Running              0          2m4s    10.36.0.2    compute1
    # kubectl delete pod tomcat-deployment-74d7b749f7-tvszz   # 删除一个tomcat的pod,看看集群中tomcat的pod个数
    # kubectl get pods -o wide  # 发现又有一个新的被创建了
    NAME                                 READY   STATUS               RESTARTS   AGE     IP           NODE
    tomcat-deployment-74d7b749f7-n7mtb   1/1     Running              0          4m49s   10.44.0.32   worker1
    tomcat-deployment-74d7b749f7-cjnt8   1/1     Running              0          2m4s    10.36.0.2    compute1
    
    

    滚动更新

    对于水平伸缩和扩展的功能,replica set和replica controller就可以完成了(自行百度),而 deployment对象通过对replicat set上进一步封装,实现了滚动更新的能力

    上一个案例中,tomcat默认拉取的是最新版本的镜像,现在发现有漏洞,我们要立即将降低的tomcat的版本,该怎么办呢?

    我们可以帮deployment的yaml文件执行kubectl delete -f deployment.yaml把tomcat服务给删除,然后重现编写旧版本的tomcat就可以了。所付出的代价就是稍微停止那么一下下web服务

    现在要做的就是修改目前deployment中tomcat的版本,就可以完成下降tomcat的版本,对于用户来说该访问的web服务继续可以访问。

    如下图所示,在执行滚动更新的时候,worker上的tomcat由版本下降到tomcat:7x版本的时候(下降版本指的是将之前的pod给删除掉,然后创建一个新的pod),此时所有对tomcat的请求都会由worker2上的来负责。当worker2上的tomcat版本下降的时候,此时的请求又会由worker1上已经更新后的tomcat负责。最后两个tomcat都完成更新。


    deployment.jpg
    # 对上面的版本进行更新
    [root@master deployment]# cat deployment.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: deployment-tomcat
      template:
        metadata:
          labels:
            app: deployment-tomcat
        spec:
          containers:
          - name: tomcat
            image: tomcat:7.0.92
            ports:
            - containerPort: 8080
    # kubectl apply -f deployment3.yaml 
    deployment.apps/tomcat-deployment configured
    [root@master deployment]# kubectl get deployment -o wide
    NAME                READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES          SELECTOR
    tomcat-deployment   2/2     1            2           14m   tomcat       tomcat:7.0.92   app=deployment-tomcat
    # 可以看到UP-TO-DATE字段为1表示的是已经完成更新的pod的数量,在本例子中为2则完成更新
    # kubectl describe deployment tomcat-deployment
    RollingUpdateStrategy:  25% max unavailable, 25% max surge  # 这个字段表示更新的策略
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  14m   deployment-controller  Scaled up replica set tomcat-deployment-74d7b749f7 to 2
      Normal  ScalingReplicaSet  38s   deployment-controller  Scaled up replica set tomcat-deployment-785f4d6fc9 to 1
      Normal  ScalingReplicaSet  3s    deployment-controller  Scaled down replica set tomcat-deployment-74d7b749f7 to 1
      Normal  ScalingReplicaSet  3s    deployment-controller  Scaled up replica set tomcat-deployment-785f4d6fc9 to 2
    # 发现deployment是对replica set对象做的操作
    # kubectl get pods -o wide
    NAME                                 READY   STATUS               RESTARTS   AGE     IP           NODE
    tomcat-deployment-74d7b749f7-r9db4   0/1     Terminating          0          14m     10.36.0.2    compute1
    tomcat-deployment-785f4d6fc9-77hzb   1/1     Running              0          17s     10.44.0.32   worker1
    tomcat-deployment-785f4d6fc9-nzfds   1/1     Running              0          52s     10.36.0.4    compute1
    # kubectl describe pod tomcat-deployment-785f4d6fc9-77hzb
        Image:          tomcat:7.0.92
    # 通过对pod的终止,然后创建新的tomcat镜像的pod完成了更新操作
    # kubectl get deployment
    NAME                READY   UP-TO-DATE   AVAILABLE   AGE
    tomcat-deployment   2/2     2            2           16m
    # up-to-date字段为2表示目前已经完成更新操作
    

    相关文章

      网友评论

          本文标题:kubernetes之deployment

          本文链接:https://www.haomeiwen.com/subject/cfdqcctx.html