美文网首页
kubernetes蓝绿发布

kubernetes蓝绿发布

作者: 我的喵叫初六 | 来源:发表于2019-05-07 15:59 被阅读0次

    蓝绿发布

    不关闭旧环境的情况下启动新环境,通过更新service将流量切换到新环境上。

    发布更新

    1、在原有的deployment运行基础上,新建deployment的yaml文件,文件内容为新版本标签及应用镜像‘

    2、启动新deployment的yaml

    3、更改原service的yaml

    4、通过命令更新启动新service

    此时新旧两个deployment都处于启动状态,但service发布的的新的deployment下pod

    回退更新

    通过命令指定service到旧版本

    验证

    具体操作

    ============================================================

    旧deployment如下

    #vim codeus-abc-deployment-v3.yaml

    apiVersion: extensions/v1beta1

    kind: Deployment

    metadata:

      name: codeus-abc-v3

      namespace: codeus

    spec:

      replicas: 3

      selector:

        matchLabels:

          project: codeus

          app: abc

          version: v3

      template:

        metadata:

          labels:

            project: codeus

            app: abc

            version: v3

        spec:

          imagePullSecrets:

          - name: registry-key

          containers:

          - name: abc

            image: xxxxx/codeus-abc/codeus-abc-k8s-cs:latest

            imagePullPolicy: Always

            ports:

            - containerPort: 8088

              name: web

              protocol: TCP

            resources:

              limits:

                cpu: 600m

                memory: 2Gi

              requests:

                cpu: 300m

                memory: 100Mi

            livenessProbe:

              httpGet:

                path: /

                port: 8088

              initialDelaySeconds: 180

              timeoutSeconds: 20

            readinessProbe:

              httpGet:

                path: /

                port: 8088

              initialDelaySeconds: 180

              timeoutSeconds: 20

            volumeMounts:

            - name: codes

              mountPath: /root/codes

            - name: host-time

              mountPath: /etc/localtime

          volumes:

          - name: codes

            hostPath:

              path: /data/codeus-abc/codes

          - name: host-time

            hostPath:

              path: /etc/localtime

    启动

    kubectl create -f codeus-abc-deployment-v3.yaml

    kubectl create -f codeus-abc-service-v3.yaml

    ===========================================================================

    检查一切没有问题后开始做更新操作

    ===========================================================================

    新deployment

    # cat codeus-abc-deployment-v4.yaml

    apiVersion: extensions/v1beta1

    kind: Deployment

    metadata:

      name: codeus-abc-v4              #这里发生变化

      namespace: codeus

    spec:

      replicas: 3

      selector:

        matchLabels:

          project: codeus

          app: abc

          version: v4             #这里发生变化

      template:

        metadata:

          labels:

            project: codeus

            app: abc

            version: v4          #还有这里发生变化

        spec:

          imagePullSecrets:

          - name: registry-key

          containers:

          - name: abc

            image: xxxxx/codeus-abc/codeus-abc-k8s-cs:latest

            imagePullPolicy: Always

            ports:

            - containerPort: 8088

              name: web

              protocol: TCP

            resources:

              limits:

                cpu: 600m

                memory: 2Gi

              requests:

                cpu: 300m

                memory: 100Mi

            livenessProbe:

              httpGet:

                path: /

                port: 8088

              initialDelaySeconds: 180

              timeoutSeconds: 20

            readinessProbe:

              httpGet:

                path: /

                port: 8088

              initialDelaySeconds: 180

              timeoutSeconds: 20

            volumeMounts:

            - name: codes

              mountPath: /root/codes

            - name: host-time

              mountPath: /etc/localtime

          volumes:

          - name: codes

            hostPath:

              path: /data/codeus-abc/codes

          - name: host-time

            hostPath:

              path: /etc/localtime

    启动新的deployment

    kubectl create -f codeus-abc-deployment-v4.yaml

    此时有新旧两套deployment在运行

    执行更新,将service切换到新的deployment上

    # kubectl -n codeus patch service abc -p '{"spec":{"selector":{"version":"v4"}}}'

    service/abc patched  有此输出表示更新完成

    -n codeus 用于指定命名空间

    回退更新

    # kubectl -n codeus patch service abc -p '{"spec":{"selector":{"version":"v3"}}}'

    service/abc patched

    运行一段时间后,确认新版本没有问题后删除旧版本,以节省NODE资源

    # kubectl -n codeus delete deploy codeus-abc-v3

    deployment.extensions "codeus-abc-v3" deleted

    更新结束。。。

    可以用jenkins发布

    下面是一段在jenkins中构建后操作的一部分

    整体流程就是:

    拉取代码 > 打包 > 发送包到指定位置 > 执行构建后操作

                                                                          > 制作镜像

                                                                          > 上传镜像

                                                                          > 通过更改后的yaml文件创建新pod

    cp $de_yaml codeus-deployment-$W_VERSION$BUILD_NUMBER.yaml

    sed -i "s/codeus-v1/codeus-$W_VERSION$BUILD_NUMBER/g" codeus-deployment-$W_VERSION$BUILD_NUMBER.yaml

    sed -i "s/version: v1/version: $W_VERSION$BUILD_NUMBER/g" codeus-deployment-$W_VERSION$BUILD_NUMBER.yaml

    sed -i "s#codeus-image#docker.wecode123.com/codeus_k8s/codeus-$W_VERSION$BUILD_NUMBER#g" codeus-deployment-$W_VERSION$BUILD_NUMBER.yaml

    /opt/kubernetes/bin/kubectl create -f codeus-deployment-$W_VERSION$BUILD_NUMBER.yaml

    相关文章

      网友评论

          本文标题:kubernetes蓝绿发布

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