1. 现状:
当前容器服务已经支持支持分批发布,详细参考帮助文档:https://help.aliyun.com/document_detail/87370.html?spm=5176.10695662.1996646101.searchclickresult.2929602fIhXjHv
但是控制台功能有限,目前有以下局限:
- 控制台分批发布不能修改分批的批次数目,只能2批;
- 控制台分批发布不能设置拉取私有镜像的 imagePullSecret,目前的设置不能保存;
- 控制台分批发布不能设置关联服务到已有的服务,对于从 deployment 迁移到分批发布功能不能满足需求。
- 一个分批发布任务只支持一个服务,不能支持多个服务
以上问题可以通过 使用控制台结合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.