建立容器服务的分批发布功能

1. 现状:

     当前容器服务已经支持支持分批发布,详细参考帮助文档:https://help.aliyun.com/document_detail/87370.html?spm=5176.10695662.1996646101.searchclickresult.2929602fIhXjHv

但是控制台功能有限,目前有以下局限:

  1. 控制台分批发布不能修改分批的批次数目,只能2批;
  2. 控制台分批发布不能设置拉取私有镜像的 imagePullSecret,目前的设置不能保存;
  3. 控制台分批发布不能设置关联服务到已有的服务,对于从 deployment 迁移到分批发布功能不能满足需求。
  4. 一个分批发布任务只支持一个服务,不能支持多个服务
以上问题可以通过 使用控制台结合kubectl 命令方式实现。
前提: 你已经安装 kubectl 并链接到容器服务集群。

2. 分批发布设置:

     2.1 控制台建立分批发布任务:

     使用阿里云容器服务建立分批发布任务,详细建立过程参考阿里云文档:
设置服务,如果想使用已有服务,因为控制台强制要求必须关联新建服务,可以建立一个内部访问的集群服务先,事后删除。

2.2 自定义设置分批批次:

命令操作如下:

## 查看指定命名空间的分批发布任务,不写 -n参数表示 default
kubectl get BatchRelease -n namespace
## 这时可以看到上一步建立的分批任务

## 修改分批批次数目
kubectl edit BatchRelease app-alpha-default-yunxiao

# vi 操作编辑以下内容
apiVersion: alicloud.com/v1beta1
kind: BatchRelease
metadata:
  annotations:
    aliyun.batchnum: "2"  ###修改批次数目
  name: app-alpha-default-yunxiao
  namespace: namespace
#修改完成 !wq 保存退出即可

2.3 设置ImagePullSecret

  • 方法1:
设置 StatefulSet secret (不推荐)
【有状态副本集】: 查看 yaml修改 yaml,增加 

imagePullSecrets:
        - name: *********-*** 
此种方法在批量发布更新时,该 secret设置会被覆盖丢失。

  • 方法2:
设置 ServiceAccount的 ImagePullSecret:

# 查看 ServiceAccount集合
kubectl get serviceaccount
##修改 ServiceAccount值:
kubectl edit serviceaccount default
##增加 imagePullSecret设置:
imagePullSecrets:
        - name: *********-*** 

2.4 定义分批发布指向已有服务


# 将已有服务的 yaml使用 base64加密字符串
kubectl get services sso-web-443 -o=yaml |base64
# 系统生成 base64加密字符串
# 获取加密串,编写 secret的 yaml
vi sso-web-secret.yaml
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: batchrelease-web-sso-443-svc.secret
data:
  yaml: YXBpVmVyc2lvbjogdjEKa2luZDogU2Vy
## 长加密字符串有换行注意去掉换行:
# 生成 secret:
kubectl create -f sso-web-secret.yaml
# 设置分批发布服务指向生成 secret的服务: ## 查看分批任务 kubectl get BatchRelease NAME AGE app-alpha-default-yunxiao 10d #​# 修改分批任务的 service指向上一步生成的 service secret kubectl edit BatchRelease app-alpha-default-yunxiao apiVersion: alicloud.com/v1beta1 kind: BatchRelease metadata: annotations: aliyun.batchnum: "3" creationTimestamp: 2018-09-30T02:18:08Z generation: 1 name: app-alpha-default-yunxiao namespace: default resourceVersion: "13884105" selfLink: /apis/alicloud.com/v1beta1/namespaces/default/batchreleases/wukong-alphago-default-aone uid: 12a06d8d-c457-11e8-b4bc-00163e0104d1 spec: serviceSecretName: batchrelease-web-sso-443-svc.secret statefulSetSecretName: batchrelease-web-sso-default-yunxiao.88916.secret status: control: {} release: progress: finished status: Success resources: Service: name: sso-web-443 ## 修改指向已有服务 namespace: default status: Success StatefulSet: name: batchrelease-sso-web-default-aone namespace: default status: Success # 设置原有服务指向新的分批发布的 app: ## 查看服务列表: kubectl get services ## 编辑原有服务的 app: kubectl edit services web-sso-443 ## 修改selector:-->app:指向新的分批发布 app apiVersion: v1 kind: Service metadata: creationTimestamp: 2018-08-16T03:53:47Z name: web-sso-443 namespace: default resourceVersion: "13881629" selfLink: /api/v1/namespaces/default/services/web-sso-443 uid: fa77c1b2-a107-11e8-8978-00163e010d3c spec: clusterIP: 172.27.4.19 externalTrafficPolicy: Cluster ports: - nodePort: 30576 port: 443 protocol: TCP targetPort: 9090 selector: aliyun.version: "8" app: web-sso-default-aone sessionAffinity: None type: LoadBalancer status: loadBalancer: ingress: - ip: 39.107.21.32

最后删除不再使用的原有 deployment,服务等,完成分批发布.

2.5. 设置多个服务到同一个分批任务

容器服务中增加服务,指向新建立的 app,或者使用类似步骤4的操作,修改老的服务指向该 app.


上一篇:字符串


下一篇:从零开始入门 K8s | 理解 RuntimeClass 与使用多容器运行时