tencent / bk-bcs Goto Github PK
View Code? Open in Web Editor NEW蓝鲸智云容器管理平台(BlueKing Container Service)
Home Page: http://bk.tencent.com
License: Other
蓝鲸智云容器管理平台(BlueKing Container Service)
Home Page: http://bk.tencent.com
License: Other
分支1.13.x发布测试版本1.13.2-alpha:
feature相关背景与描述
bcs支持腾讯云tke的k8s集群,管理多种类型的k8s集群。
解决方案描述
在bcs-api上,调用tke的API,获取tke集群地址和证书信息并绑定tke的lb。通过bcs-api接管tke集群
当集群中的机器存在大量异构机器的场景下,例如:16核cpu+64GMem,48核cpu+512GMem,集群中的容器调度有可能存在不均匀的情况。
deployment滚动升级时,每次滚动过程通常涉及到delete和create两步操作,在一定时间内,如果delete或者create没有达到目标则滚动升级会被挂起。
滚动升级被挂起之后,用户可以通过resume命令继续执行滚动升级。
目前resume的逻辑是:重新开始一次滚动过程。
目前存在不足是:如果上一次滚动过程执行到一半(例如delete成功,create挂起),resume之后不会继续当此滚动,而是新开启一次滚动,导致delete和create数量在过程中可能不一致。
优化方案:resume执行后,恢复进行中的滚动,严格按照一次次滚动进行升级过程。
具体实现方案: 挂起时,保留当前滚动过程的信息,当用户执行resume时,恢复当前滚动过程(需要重新执行之前未完成的create或者delete命令)
在取消滚动升级的操作时,会先判断滚动升级是否处于delete old taskgroup的过程中,如果在此过程中,则会尝试等待重试30s,但是前端在调用此接口设置timeout为20s,因此在某些特殊情况下存在超时的情况。
针对蓝盾流水线扫描函数复杂度结果进行重构修正。
目标:
当前状态:
为方便用户使用BCS,在产品白皮书中增加网络方案相关集成文档。
白皮书链接:https://docs.bk.tencent.com/bcs/
增加章节2.1.9:网络方案集成
完成bcs-process-executor模块代码迁移:
feature相关背景与描述
跨云环境下,bcs-k8s-watch通过zk获取的bcs-health的地址是无法直接访问的,需要通过代理才能访问。
解决方案描述
在bcs-k8s-watch的启动配置中,指定bcs-health的地址。当启动配置中指定了bcs-health的地址时,直接使用该地址,不再通过zk获取bcs-health地址。
feature相关背景与描述
(清晰描述相关问题,是否有关联的issue)
bcs-client针对Mesos集群不支持--all-namespace参数,如要获取单个集群内全量数据,操作较为复杂。
解决方案描述
bcs-client对接storage相关数据接口,完成当集群内全量数据list
完成bcs-consoleproxy代码迁移:
feature相关背景与描述
bcs-dns log的输出目录未对接coredns框架,不支持日志目录可配置。
社区版与企业版本日志目录需要进行可配置,方便运维统一部署。
解决方案描述
当前已经针对DNS log插件扩展对接了bcs日志框架,日志相关参数都采用了BCS的默认值。
考虑CoreDNS社区的log没有rotate功能,暂时不能清理bcs log扩展。
所以考虑采用环境变量实现日志目录参数注入。
其他可行性方案分析
暂无
其他补充信息
(其他信息补充,例如截图,性能对比数据等)
目前mesos资源限制只支持request方式,也就是cpu_shares方式。
但是有些业务需要quota方式的资源限制。
方案:
mesos资源限制支持两种模式:
request方式:cpu_shares限制,软限制
limit方式:cpu_quota限制,硬限制
feature相关背景与描述
bk-bcs即将支持service mesh相关功能,bcs-api作为bk-bcs的api网关需要有能够自动服务发现、URL路由mesh相关api接口的能力
在引用滚动更新的过程中,如果存在lost状态的容器,则滚动更新无法继续执行,需要业务自行确认处理。
策略:
滚动更新过程中,处理lost状态的容器,业务能够执行手动重新调度,进而滚动更新能够继续执行
完成bcs-process-daemon代码迁移:
发布1.13.3,分支1.13.x终结,该分支后续仅用于bug修复
1.13.3用于
feature相关背景与描述
目前调度层记录了taskgroup所在主机信息,但没有根据主机为key记录taskgroup的索引,不太方便根据主机查询运行在该主机上的taskgroup列表,希望增加相关实现
解决方案描述
调度层在zk上增加以主机ip为key的节点,在主机上创建taskgroup和删除taskgroup的时候,增加或者删除子节点来记录taskgroup的索引。
说明:1)增加子节点的方式可以避免对主机节点进行加锁操作;2)不记录taskgroup的状态和其他信息
其他可行性方案分析
(分析你已经考虑过的其他可行性方案,方案对比优劣等)
其他补充信息
(其他信息补充,例如截图,性能对比数据等)
提供对应的接口查询数据
业务自定义容器command命令,执行完毕后发现没有返回执行结果。
通过排查发现executor上报了执行结果,但是scheduler并没有存储到zk上面,导致执行结果丢失。
原因:
通过排查定位发现,是由于save task command结果时没有对command加锁,导致并发情况下存在脏数据。
方案:
save command时增加互斥锁
Adjust templates and keep updating for bcs community edition
与公司内部公共组件交互问题:
bcs-api对接tgw时,tgw探测real server的https端口时使用的是tcp探测,导致bcs-api不断输出刷屏日志:
I0529 14:51:02.834324 16745 blog.go:32] http: TLS handshake error from x.x.x.x:52493: read tcp x.x.x.x:30443->x.x.x.x:52493: read: connection reset by peer
I0529 14:51:03.762890 16745 blog.go:32] http: TLS handshake error from x.x.x.x:52052: read tcp x.x.x.x:30443->x.x.x.x:52052: read: connection reset by peer
update application时,如果taskgroup数量为0,取数组index 0会导致越界。
panic: runtime error: index out of range
goroutine 8450507 [running]:
bcs/bcs-scheduler/src/manager/sched/scheduler.(*Scheduler).RunUpdateApplication(0xc4200ba280, 0xc421fb8a00)
/data/landun/workspace/src/bcs/bcs-scheduler/src/manager/sched/scheduler/trans_updateapp.go:41 +0x1740
created by bcs/bcs-scheduler/src/manager/sched/backend.(*backend).UpdateApplication
/data/landun/workspace/src/bcs/bcs-scheduler/src/manager/sched/backend/update.go:99 +0xda0
feature相关背景与描述
当容器处于Failed或者Lost状态时,手动重新调度容器而又没有资源的情况下,taskgroup状态没有更新,难以判断当前容器处于什么状态。
解决方案描述
希望在容器重新调度没有资源的情况下,能够显示比较友好的提示信息
目前mesos的机制:mesos-master与mesos-slave之间保持一条tcp长链接,master使用心跳的方式判断mesos-slave的存活状态。当出现网络异常、mesos-slave退出或机器异常的情况下,这条tcp连接会断开,此时mesos-master会判断mesos-slave lost,并上报给bcs-scheduler。
当网络正常或mesos-slave正常后,mesos-master会恢复与slave的tcp连接,并继续心跳机制。
mesos对这种lost之后重新连接之后的slave,会采取直接shutdown的操作,杀掉上面所有的task容器,这种机制给业务带来了一些不太友好的体验,因为如果是网络异常,此时应该是恢复管控而不是杀掉
需要增加两类文档,放在 docs/features下,初步建议使用:
feature相关背景与描述
当前bcs-storage的event接口不支持结构化查询,且不支持模糊匹配。
解决方案描述
在event的filter tag中增加一类extra_contains,用于自定义结构化模糊匹配
前端开源了吗
首页文档更新,调整项目相关说明
根据蓝盾流水线的定期检查,完善代码重复率问题修正。
目标:
完成bcs-metriccollector代码迁移
在构建执行make命令时报错
if [[ ! -d ./vendor/github.com/sirupsen ]]; then ln -sf ./vendor/github.com/Sirupsen ./vendor/github.com/sirupsen; fi
/bin/sh: 1: [[: not found
if [[ ! -d ./vendor/github.com/Sirupsen ]]; then ln -sf ./vendor/github.com/sirupsen ./vendor/github.com/Sirupsen; fi
/bin/sh: 1: [[: not found
在Ubuntu系统中(默认/bin/sh -> dash)执行构建make
Makefile中使用了bash的内置[[,在dash中不支持,CentOS默认/bin/sh -> bash,但是Ubuntu(或者Debian)中/bin/sh -> dash,在Ubuntu中将/bin/sh -> bash则不报错,或者将[[
改成[
也不报错。
请提供以下信息:
Ubuntu 18.04.2 LTS
解决方案描述(description)
TARGET PRE in Makefile, calling some other scripts to do pre-check
In order to include "go vet" as a necessary pre-check in Makefile, we should fix the left issues in "go vet". There will be several commits for this.
feature相关背景与描述
创建application应用时,能够自定义的设置与部署、容器信息相关的环境变量,例如:namespace、appname、taskgroup id等
解决方案描述
bcs提供默认的系统变量例如:bcs.namespcae、bcs.appname等与部署相关的信息。
业务在定义application时,可以使用该变量赋值env等信息。启动容器时,会将该变量值赋值为具体的部署信息,例如:${bcs.appname} = bookinfo-v1
例如:
"env": [{
"name": "app_name",
"value": "${bcs.appname}"
},
{
"name": "pod_name",
"value": "${bcs.taskgroupname}"
}
]
针对BCS相关文档,提供英文版本。
1.13.x版本发布前必须完成
完成bcs-netservice模块代码迁移,合入开源版本,后续从开源版本进行维护
bk-bcs/bcs-mesos/bcs-container-executor/network/cni/cni.go
代码没有进行错误处理,导致cni插件如果返回error,executor会出现空指针错误,虽然executor有对runtime error的recover,但是会造成list taskgroup时显示bcs-executor is down,造成误解
func (plugin *CNIPlugin) addNetworkV2(runConf *libcni.RuntimeConf) (*current.Result, error) {
var err error
var r cnitypes.Result
if plugin.isCniList {
r, err = plugin.cniNet.AddNetworkList(plugin.netConfList, runConf)
} else {
r, err = plugin.cniNet.AddNetwork(plugin.netConf, runConf)
}
./bcs-container-executor --version 输出的内容:
Version :1.13.2-alpha-19.07.02
Tag :1.13.2-alpha
BuildTime: 2019-07-02T15:23:25+0800
GitHash: 9097082
2019/07/11 17:33:48 BcsExecutor init pod success.
2019/07/11 17:33:48 CNI plugin manager ADD pod c9e885877b25db3f35885b9dbcf4ad0927f2976d9fad0ae3a18bb84b6f717029 network with bcs-qcloud
2019/07/11 17:33:48 CNI plugin bcs-qcloud set conf {"ContainerID":"c9e885877b25db3f35885b9dbcf4ad0927f2976d9fad0ae3a18bb84b6f717029","NetNS":"/proc/15264/ns/net","IfName":"eth1","Args":[["IgnoreUnknown","true"]],"CapabilityArgs":null}
2019/07/11 17:33:48 Lauch panic: runtime error: invalid memory address or nil pointer dereference
2019/07/11 17:33:48 CNIPod prepare to stop 0 running containers
2019/07/11 17:33:48 CNIPod stop 0 running containers done
2019/07/11 17:33:48 Task 1562837627857764032.0.2.test.test.10000 Update Status TASK_FAILED, Message: bcs executor down
如题,如果有这个功能的话,使用起来会更加方便快捷
完成bcs-metricsservice代码迁移到github,完成:
对于一些有状态的服务,例如:需要调度到某台特定的机器上面或者需要指定的容器ip资源,在异常情况下,有些场景因为需要人为处理,恢复时间不可控,例如:机器故障修复。
从而导致重新调度时间超时,再异常恢复后,不能自动的完成重新调度工作,增加了人为处理的成本。
策略:增加重新调度超时时间为25hour
当docker仓库异常时,会导致docker拉去镜像卡很久,此时executor没有状态上报,从而容器状态为lost
feature相关背景与描述
开发支持腾讯云的通用cni插件
解决方案描述
将申请到的IP资源对接host-local这个ipam插件,采用路由策略来进行网络互联
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.