Code Monkey home page Code Monkey logo

tencent / bk-bcs Goto Github PK

View Code? Open in Web Editor NEW
763.0 35.0 245.0 310.82 MB

蓝鲸智云容器管理平台(BlueKing Container Service)

Home Page: http://bk.tencent.com

License: Other

Makefile 0.43% Go 77.05% Dockerfile 0.20% Shell 0.93% Lua 0.38% HTML 0.74% Mustache 0.18% Python 0.06% Smarty 0.98% CSS 1.14% JavaScript 2.36% Vue 13.85% TypeScript 1.58% Jinja 0.08% Perl 0.02% Vim Script 0.01% Roff 0.01% HCL 0.01% SCSS 0.01%
container-management containers kubernetes mesos blueking

bk-bcs's Issues

[release]发布1.13.2-alpha版本

分支1.13.x发布测试版本1.13.2-alpha:

  • 更新相关文档
  • 完成自动化集成测试
  • 完成流水线任务扫描与编译

[feature]bcs支持管理腾讯云TKE的k8s集群

feature相关背景与描述
bcs支持腾讯云tke的k8s集群,管理多种类型的k8s集群。

解决方案描述
在bcs-api上,调用tke的API,获取tke集群地址和证书信息并绑定tke的lb。通过bcs-api接管tke集群

deployment滚动升级异常挂起,执行resume命令后精确恢复之前的滚动过程

deployment滚动升级时,每次滚动过程通常涉及到delete和create两步操作,在一定时间内,如果delete或者create没有达到目标则滚动升级会被挂起。
滚动升级被挂起之后,用户可以通过resume命令继续执行滚动升级。
目前resume的逻辑是:重新开始一次滚动过程。
目前存在不足是:如果上一次滚动过程执行到一半(例如delete成功,create挂起),resume之后不会继续当此滚动,而是新开启一次滚动,导致delete和create数量在过程中可能不一致。
优化方案:resume执行后,恢复进行中的滚动,严格按照一次次滚动进行升级过程。
具体实现方案: 挂起时,保留当前滚动过程的信息,当用户执行resume时,恢复当前滚动过程(需要重新执行之前未完成的create或者delete命令)

[bug] 取消deployment滚动升级存在超时的情况

问题描述

在取消滚动升级的操作时,会先判断滚动升级是否处于delete old taskgroup的过程中,如果在此过程中,则会尝试等待重试30s,但是前端在调用此接口设置timeout为20s,因此在某些特殊情况下存在超时的情况。

函数圈复杂度调整

针对蓝盾流水线扫描函数复杂度结果进行重构修正。
目标:

  • 平均圈复杂度<=3
  • 单函数圈复杂度最大值<=40

当前状态:

  • 平均圈复杂度 3.33
  • 单函数圈复杂度最大值 37

[feature]bcs-k8s-watch跨云环境下对于health可配置化支持

feature相关背景与描述
跨云环境下,bcs-k8s-watch通过zk获取的bcs-health的地址是无法直接访问的,需要通过代理才能访问。

解决方案描述
在bcs-k8s-watch的启动配置中,指定bcs-health的地址。当启动配置中指定了bcs-health的地址时,直接使用该地址,不再通过zk获取bcs-health地址。

[feature]bcs-client支持Mesos集群下all-namespace参数

feature相关背景与描述
(清晰描述相关问题,是否有关联的issue)
bcs-client针对Mesos集群不支持--all-namespace参数,如要获取单个集群内全量数据,操作较为复杂。

解决方案描述
bcs-client对接storage相关数据接口,完成当集群内全量数据list

[feature]bcs-dns日志目录支持参数化配置

feature相关背景与描述

bcs-dns log的输出目录未对接coredns框架,不支持日志目录可配置。
社区版与企业版本日志目录需要进行可配置,方便运维统一部署。

解决方案描述
当前已经针对DNS log插件扩展对接了bcs日志框架,日志相关参数都采用了BCS的默认值。
考虑CoreDNS社区的log没有rotate功能,暂时不能清理bcs log扩展。
所以考虑采用环境变量实现日志目录参数注入。

其他可行性方案分析
暂无

其他补充信息
(其他信息补充,例如截图,性能对比数据等)

[feature] mesos资源限制支持request、limit两种模式

目前mesos资源限制只支持request方式,也就是cpu_shares方式。
但是有些业务需要quota方式的资源限制。

方案:
mesos资源限制支持两种模式:
request方式:cpu_shares限制,软限制
limit方式:cpu_quota限制,硬限制

处于更新状态的应用,允许手动重新调度其中的容器

在引用滚动更新的过程中,如果存在lost状态的容器,则滚动更新无法继续执行,需要业务自行确认处理。

策略:
滚动更新过程中,处理lost状态的容器,业务能够执行手动重新调度,进而滚动更新能够继续执行

[feature]mesos 调度层记录每台主机上的taskgroup索引并提供查询

feature相关背景与描述
目前调度层记录了taskgroup所在主机信息,但没有根据主机为key记录taskgroup的索引,不太方便根据主机查询运行在该主机上的taskgroup列表,希望增加相关实现

解决方案描述
调度层在zk上增加以主机ip为key的节点,在主机上创建taskgroup和删除taskgroup的时候,增加或者删除子节点来记录taskgroup的索引。
说明:1)增加子节点的方式可以避免对主机节点进行加锁操作;2)不记录taskgroup的状态和其他信息

其他可行性方案分析
(分析你已经考虑过的其他可行性方案,方案对比优劣等)

其他补充信息
(其他信息补充,例如截图,性能对比数据等)

提供对应的接口查询数据

[bug] 容器自定义command命令执行结果没有保存

问题描述

业务自定义容器command命令,执行完毕后发现没有返回执行结果。
通过排查发现executor上报了执行结果,但是scheduler并没有存储到zk上面,导致执行结果丢失。

原因:
通过排查定位发现,是由于save task command结果时没有对command加锁,导致并发情况下存在脏数据。

方案:
save command时增加互斥锁

[bug]外部健康检查探测api SSL端口导致日志激增

问题描述

与公司内部公共组件交互问题:
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

[bug]update application时,如果该application下无任何taskgroup,会导致scheduler服务异常

问题描述

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

在网络异常或机器异常后,容器lost后无法自动恢复

目前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容器,这种机制给业务带来了一些不太友好的体验,因为如果是网络异常,此时应该是恢复管控而不是杀掉

[feature]bcs-storage查询event支持模糊匹配message

feature相关背景与描述
当前bcs-storage的event接口不支持结构化查询,且不支持模糊匹配。

解决方案描述
在event的filter tag中增加一类extra_contains,用于自定义结构化模糊匹配

代码重复率修复

根据蓝盾流水线的定期检查,完善代码重复率问题修正。
目标:

  • 平均代码重复率<=10%
  • 单文件代码重复率最大值<=10%

[bug]Makefile中使用了bash内置[[导致在/bin/sh指向dash时报错

问题描述

在构建执行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则不报错,或者将[[改成[也不报错。
请提供以下信息:

  • bk-bcs 版本:
    Version :bf46118-19.06.27
    Tag :bf46118
    BuildTime: 2019-06-27T02:02:40+0000
    GitHash: bf46118
  • 操作系统 : Ubuntu 18.04.2 LTS
  • bk-bcs 异常日志

[feature] 容器环境变量赋值支持bcs系统常量

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}"
}
]

executor调用cni插件时没有进行错误判断,导致cni调用失败时触发executor异常[bug]

问题描述

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)
}

重现方法

  • 调用cni插件返回错误时,可以耗尽IP地址,也可以将cni的conf文件修改成错的

./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

有状态服务某些情况下重新调度超时

对于一些有状态的服务,例如:需要调度到某台特定的机器上面或者需要指定的容器ip资源,在异常情况下,有些场景因为需要人为处理,恢复时间不可控,例如:机器故障修复。
从而导致重新调度时间超时,再异常恢复后,不能自动的完成重新调度工作,增加了人为处理的成本。

策略:增加重新调度超时时间为25hour

[feature]腾讯云网络对接插件

feature相关背景与描述
开发支持腾讯云的通用cni插件

解决方案描述
将申请到的IP资源对接host-local这个ipam插件,采用路由策略来进行网络互联

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.