Giter VIP home page Giter VIP logo

tencent / bk-bcs Goto Github PK

View Code? Open in Web Editor NEW
750.0 35.0 239.0 306.1 MB

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

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

License: Other

Makefile 0.38% Go 69.15% Dockerfile 0.18% Shell 0.83% Lua 0.35% HTML 0.74% Mustache 0.17% Python 10.18% Smarty 0.58% CSS 1.07% JavaScript 2.19% Vue 12.37% TypeScript 1.34% Jinja 0.42% 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 Introduction

蓝鲸容器管理平台.png


licenseRelease Version BK Pipelines Status PRs Welcome

EnglishDocs

重要提示:

  • 本仓库将于2023年2月中旬迁移至 TencentBlueking,若您的代码中进行了包引用,请关注迁移进展并进行相应修正。
  • master 分支在开发过程中可能处于 不稳定或者不可用状态 ,请通过releases 而非 master 去获取稳定的二进制文件。

蓝鲸容器管理平台(Blueking Container Service)定位于打造云原生技术和业务实际应用场景之间的桥梁;聚焦于复杂应用场景的容器化部署技术方案的研发、整合和产品化;致力于为游戏等复杂应用提供一站式、低门槛的容器编排和服务治理服务。

Overview

使用BCS能做什么?

  • 图形化、表单化编排和治理你的微服务应用
  • 使用新的workload(GameStatefulSetGameDeployment)来部署和灰度更新你的复杂应用
  • 无缝纳管已有的k8s集群及运行之上的应用
  • 自动创建、销毁、更新、扩缩容你的k8s集群
  • 跨云统一管理分布在不同IaaS上的k8s集群

了解BCS更详细功能,请参考蓝鲸容器管理平台白皮书

Features

更多特性请参考doc/features

Experience

Getting Started

Contributing

对于项目感兴趣,想一起贡献并完善项目请参阅contributing

腾讯开源激励计划 鼓励开发者的参与和贡献,期待你的加入。

Support

FAQ

Blueking Community

  • BK-CI:蓝鲸持续集成平台是一个开源的持续集成和持续交付系统,可以轻松将你的研发流程呈现到你面前。
  • BK-CMDB:蓝鲸配置平台(蓝鲸CMDB)是一个面向资产及应用的企业级配置管理平台。
  • BK-PaaS:蓝鲸PaaS平台是一个开放式的开发平台,让开发者可以方便快捷地创建、开发、部署和管理SaaS应用。
  • BK-JOB:蓝鲸作业平台(Job)是一套运维脚本管理系统,具备海量任务并发处理能力。
  • BK-SOPS:标准运维(SOPS)是通过可视化的图形界面进行任务流程编排和执行的系统,是蓝鲸体系中一款轻量级的调度编排类SaaS产品

认证

蓝鲸智云容器管理平台通过**云计算开源产业联盟组织的可信云容器解决方案评估认证—— 认证证书

License

bk-bcs是基于MIT协议, 详细请参考LICENSE

bk-bcs's People

Contributors

abstractmj avatar adevjoe avatar alexai27 avatar alkaidchan avatar ambition9186 avatar bryanhe-bupt avatar dellkeji avatar developerjim avatar evanlixin avatar fireyun avatar hubuhito avatar ifooth avatar jamesgetx avatar lidollxf avatar linfang-canway avatar liuchenyiwork avatar luofann avatar lwxiang avatar maclon9573 avatar mrmgxxxx avatar narasux avatar okkervil avatar penglongli avatar silenceper avatar vhwweng avatar wenxinlee2015 avatar xcming avatar yuikill avatar zmberg avatar zup779 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bk-bcs's Issues

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

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

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

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

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

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

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

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

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

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

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

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

feature相关背景与描述

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

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

其他可行性方案分析
暂无

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

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

问题描述

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

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

方案:
save command时增加互斥锁

[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 异常日志

函数圈复杂度调整

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

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

当前状态:

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

[release]发布1.13.2-alpha版本

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

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

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

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

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

代码重复率修复

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

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

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

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

问题描述

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

[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支持管理腾讯云TKE的k8s集群

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

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

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

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

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

[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

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

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

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

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

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

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

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

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

提供对应的接口查询数据

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

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

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

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

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.