Skip to content

Commit

Permalink
Merge remote-tracking branch 'github-bk-bcs/master'
Browse files Browse the repository at this point in the history
* github-bk-bcs/master:
  bcs-monitor引用bcs-common打通上游trace id (TencentBlueKing#2512)
  Feat: bscp add vault sidecar (TencentBlueKing#2507)
  解决前端代码合并文件错误的问题 (TencentBlueKing#2510)
  Feat:bscp supports template and variable features (TencentBlueKing#2508)
  添加集群控制面替换脚本文档TencentBlueKing#2457 (TencentBlueKing#2502)
  • Loading branch information
wenxinlee2015 committed Sep 1, 2023
2 parents cb2a86f + 5c3e207 commit 92cbb2b
Show file tree
Hide file tree
Showing 306 changed files with 59,690 additions and 15,168 deletions.
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ bcs-scenarios: kourse gitops

kourse: gamedeployment gamestatefulset hook-operator

gitops: gitops-proxy gitops-manager
gitops: gitops-proxy gitops-manager

allpack: svcpack k8spack mmpack mnpack netpack
cd build && tar -czf bcs.${VERSION}.tgz bcs.${VERSION}
Expand Down Expand Up @@ -311,6 +311,10 @@ bscp:pre
cd bcs-services/bcs-bscp && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/bk-bscp-dataservice ./cmd/data-service
cd bcs-services/bcs-bscp && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/bk-bscp-feedserver ./cmd/feed-server
cd bcs-services/bcs-bscp && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/bk-bscp-cacheservice ./cmd/cache-service
cd bcs-services/bcs-bscp && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/bk-bscp-vaultserver ./cmd/vault-server
cd bcs-services/bcs-bscp/cmd/vault-server/vault && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/vault ./main.go
cd bcs-services/bcs-bscp/cmd/vault-server/vault-sidecar && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/vault-sidecar *.go
cd bcs-services/bcs-bscp/cmd/vault-server/vault-plugins && go mod tidy -compat=1.20 && CGO_ENABLED=0 go build -trimpath ${BSCP_LDFLAG} -o ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/hyper/bk-bscp-secret *.go
# alias docker image name to bk-bscp-hyper
touch ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/bk-bscp-hyper && chmod a+x ${WORKSPACE}/${PACKAGEPATH}/bcs-services/bcs-bscp/bk-bscp-hyper && ls -la ${PACKAGEPATH}/bcs-services/bcs-bscp/hyper

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions bcs-common/pkg/otel/trace/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import "go.opentelemetry.io/otel/attribute"
const (
// RequestIDKey xxx
RequestIDKey = "requestID"
Traceparent = "Traceparent"
TracerKey = "otel-go-contrib-tracer"
TracerName = "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
RequestIDHeaderKey = "X-Request-Id"
Expand Down
21 changes: 15 additions & 6 deletions bcs-common/pkg/otel/trace/gin/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,24 @@ func Middleware(server string, opts ...Option) gin.HandlerFunc {
}
}
c.Set(constants.TracerKey, tracer)

savedCtx := c.Request.Context()
defer func() {
c.Request = c.Request.WithContext(savedCtx)
}()
ctx := cfg.Propagators.Extract(savedCtx, propagation.HeaderCarrier(c.Request.Header))
requestID, _ := ctx.Value(constants.RequestIDHeaderKey).(string)
// 使用requestID当作TraceID
ctx = context.WithValue(ctx, constants.RequestIDKey, requestID)
ctx = utils.ContextWithRequestID(ctx, requestID)

// 判断Header 是否有放置Transparent
traceparent := c.Request.Header.Get(constants.Traceparent)
if traceparent != "" {
// 有则从上游解析Transparent
savedCtx = cfg.Propagators.Extract(savedCtx, propagation.HeaderCarrier(c.Request.Header))
} else {
// 没有则从request id截取生成
requestID := c.Request.Header.Get(constants.RequestIDHeaderKey)
// 使用requestID当作TraceID
savedCtx = context.WithValue(savedCtx, constants.RequestIDKey, requestID)
savedCtx = utils.ContextWithRequestID(savedCtx, requestID)
}

// 记录额外的信息
commonAttrs := semconv.NetAttributesFromHTTPRequest("tcp", c.Request)
Expand All @@ -98,7 +107,7 @@ func Middleware(server string, opts ...Option) gin.HandlerFunc {
spanName = fmt.Sprintf("HTTP %s route not found", c.Request.Method)
}

ctx, span := tracer.Start(ctx, spanName, opts...)
ctx, span := tracer.Start(savedCtx, spanName, opts...)
defer span.End()

// 记录query参数
Expand Down
170 changes: 99 additions & 71 deletions bcs-ops/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,14 @@ kubectl delete node $node_name

3. 当步骤 2 执行后,新的加入的 node 节点如果要添加`Persistentvolumes`资源,重新执行步骤 1、2,即可重启 localpv 的 pod 实现挂载。


## 环境变量

通过配置环境变量来设置集群相关的参数。在中控机创建集群前,通过 `set -a` 设置环境变量。

### 示例:创建 ipv6 双栈集群

> k8s 1.23 ipv6 特性为稳定版
```bash
set -a
K8S_VER="1.23.17"
Expand All @@ -82,9 +83,10 @@ set +a
./bcs-ops -i master
```


## IP 的获取方式

对于裸金属服务器,ipv4 通过 `10/8` 的默认路由源地址获取,ipv6 则通过 `fd00::/8` 的默认路由源地址获取。如果有多个网卡,可以手动配置该路由的源地址来选择

```bash
# 如果存在则先删除
ip route del 10/8
Expand All @@ -93,122 +95,148 @@ ip -6 route del fd00::/8
ip route add 10/8 via <next hop> dev <interface> src <lan_ipv4>
ip -6 route add fd00::/8 via <next hop> dev <interface> src <lan_ipv6>
```

> 注意:`fe80::/10` link-local 地址不能用于 k8s 的 node-ip。
---

# 集群操作

## 脚本

### 1. 集群控制面故障替换

1. 在正常 master 节点上执行`./bcs-ops --render joincmd`获取加入集群的指令
2. 在新控制面节点上加入集群的指令,加入集群
3. 在新节点上执行命令删除故障的 K8S 节点以及对应的 etcd 节点

```bash
kubectl delete node xxx
etcdctl member remove xxx
```

4.故障节点如果能够登录,执行`./bcs-ops -c master`清理节点

## 标准运维

### 1. 【BCS】K8S master replace

参数

1. master_ip 一个当前存在于集群的 master,且不是本次被替换的 master 的 ip
2. new_master_ip 本次将被替换进集群的 master 的 ip
3. unwanted_master_ip 本次将被替换出集群的 master 的 ip
4. unwanted_master_name 本次将被替换进集群的 master 的节点名
5. workspace 节点上的 bcs-ops 目录

功能描述

1. 扩容 new_master_ip 指定的 master 节点

2. 清理掉 unwanted_master_ip 指定的 master 节点上的 k8s 环境以及 unwanted_master_name 对应的 k8s 节点以及 etcd 节点

---

# etcd 操作

## 脚本

### 1. operate_etcd backup (etcd 备份)

参数
1. endpoint etcd实例IP
2. cacert 访问etcd的ca证书文件路径
3. cert 访问etcd的证书文件路径
4. key 访问etcd的key文件路径
参数

1. endpoint etcd 实例 IP
2. cacert 访问 etcd 的 ca 证书文件路径
3. cert 访问 etcd 的证书文件路径
4. key 访问 etcd 的 key 文件路径
5. backup_file 备份文件路径

功能描述

1. 请求endpoint指定的etcd实例,获取snapshot存储在backup_file指定的路径

1. 请求 endpoint 指定的 etcd 实例,获取 snapshot 存储在 backup_file 指定的路径

### 2. operate_etcd restore (etcd 恢复)
> 注意:etcd集群恢复时所有etcd节点都必须使用同一份snapshot文件恢复

参数
> 注意:etcd 集群恢复时所有 etcd 节点都必须使用同一份 snapshot 文件恢复
参数

1. backup_file 备份文件路径
2. data_dir 数据恢复路径
3. member_name 本机的etcd节点的名字
4. member_peer 本机的etcd节点的peer url
5. initial_cluster 此次恢复的etcd集群所有成员信息
3. member_name 本机的 etcd 节点的名字
4. member_peer 本机的 etcd 节点的 peer url
5. initial_cluster 此次恢复的 etcd 集群所有成员信息

功能描述

1. 根据member_name,member_peer,initial_cluster参数将数据从backup_file中恢复到data_dir
1. 根据 member_name,member_peer,initial_cluster 参数将数据从 backup_file 中恢复到 data_dir

### 3. operate_etcd new (etcd 新实例)

参数
1. name etcd集群名
2. data_dir 数据目录
3. peer_port etcd节点peer port
4. service_port etcd节点service port
5. metric_port etcd节点metric port
6. initial_cluster 此次恢复的etcd集群所有成员信息
7. cacert 访问etcd的ca证书文件路径
8. cert 访问etcd的证书文件路径
9. key 访问etcd的key文件路径
参数

1. name etcd 集群名
2. data_dir 数据目录
3. peer_port etcd 节点 peer port
4. service_port etcd 节点 service port
5. metric_port etcd 节点 metric port
6. initial_cluster 此次恢复的 etcd 集群所有成员信息
7. cacert 访问 etcd 的 ca 证书文件路径
8. cert 访问 etcd 的证书文件路径
9. key 访问 etcd 的 key 文件路径

功能描述

1. 根据参数基于原本kubeadm创建出来的etcd.yaml文件进行替换,并用静态pod的方式拉起新集群的本机节点


1. 根据参数基于原本 kubeadm 创建出来的 etcd.yaml 文件进行替换,并用静态 pod 的方式拉起新集群的本机节点

## 标准运维

### 1. 【BCS】etcd backup

参数
1. host_ip_list 需要进行备份的etcd节点ip,多个使用,隔开
2. cacert 访问etcd的ca证书文件路径
3. cert 访问etcd的证书文件路径
4. key 访问etcd的key文件路径
参数

1. host_ip_list 需要进行备份的 etcd 节点 ip,多个使用,隔开
2. cacert 访问 etcd 的 ca 证书文件路径
3. cert 访问 etcd 的证书文件路径
4. key 访问 etcd 的 key 文件路径
5. backup_file 备份文件路径
6. workspace 节点上的bcs-ops目录
6. workspace 节点上的 bcs-ops 目录

功能描述

1. 在各个etcd节点上,通过本机的endpoint获取snapshot到backup_file指定目录
1. 在各个 etcd 节点上,通过本机的 endpoint 获取 snapshot 到 backup_file 指定目录

### 2. 【BCS】etcd restore

参数
1. host_ip_list 需要进行备份的etcd节点ip,多个使用,隔开
参数

1. host_ip_list 需要进行备份的 etcd 节点 ip,多个使用,隔开
2. source_host 备份文件来源机器
3. source_file 备份文件路径
4. data_dir etcd数据目录
4. data_dir etcd 数据目录
5. clusterinfo_file 集群信息文件路径
6. workspace 节点上的bcs-ops目录
6. workspace 节点上的 bcs-ops 目录

功能描述

1. 将source_file备份文件从source_host传到各台etcd节点机器上后,根据clusterinfo_file中的信息将数据恢复到data_dir指定的目录
1. 将 source_file 备份文件从 source_host 传到各台 etcd 节点机器上后,根据 clusterinfo_file 中的信息将数据恢复到 data_dir 指定的目录

### 3. etcd new

参数
1. host_ip_list 新集群的etcd节点ip,多个使用,隔开
2. name etcd集群名
3. data_dir 数据目录
4. peer_port etcd节点peer port
5. service_port etcd节点service port
6. metric_port etcd节点metric port
7. initial_cluster 此次恢复的etcd集群所有成员信息
8. cacert 访问etcd的ca证书文件路径
9. cert 访问etcd的证书文件路径
10. key 访问etcd的key文件路径
11. workspace 节点上的bcs-ops目录

功能描述

1. 根据参数基于原本kubeadm创建出来的etcd.yaml文件进行替换,并用静态pod的方式拉起新集群的所有节点

参数


# 集群控制面故障替换
## 标准运维
### 1. 【BCS】K8S master replace

参数
1. master_ip 一个当前存在于集群的master,且不是本次被替换的master的ip
2. new_master_ip 本次将被替换进集群的master的ip
3. unwanted_master_ip 本次将被替换出集群的master的ip
4. unwanted_master_name 本次将被替换进集群的master的节点名
5. workspace 节点上的bcs-ops目录
1. host_ip_list 新集群的 etcd 节点 ip,多个使用,隔开
2. name etcd 集群名
3. data_dir 数据目录
4. peer_port etcd 节点 peer port
5. service_port etcd 节点 service port
6. metric_port etcd 节点 metric port
7. initial_cluster 此次恢复的 etcd 集群所有成员信息
8. cacert 访问 etcd 的 ca 证书文件路径
9. cert 访问 etcd 的证书文件路径
10. key 访问 etcd 的 key 文件路径
11. workspace 节点上的 bcs-ops 目录

功能描述

1. 扩容new_master_ip指定的master节点

2. 清理掉unwanted_master_ip指定的master节点上的k8s环境以及unwanted_master_name对应的k8s节点以及etcd节点
1. 根据参数基于原本 kubeadm 创建出来的 etcd.yaml 文件进行替换,并用静态 pod 的方式拉起新集群的所有节点
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@ func (c *Clb) createListner(region string, listener *networkextensionv1.Listener

// do create 4 layer listener
// (4 layer listener) --------> backend1
// |--> backend2
// |--> backend3
// |--> ...
//
// |--> backend2
// |--> backend3
// |--> ...
func (c *Clb) create4LayerListener(region string, listener *networkextensionv1.Listener) (string, error) {
// construct request for creating listener
req := tclb.NewCreateListenerRequest()
Expand Down Expand Up @@ -102,9 +103,10 @@ func (c *Clb) create4LayerListener(region string, listener *networkextensionv1.L

// do create 7 layer listener
// (7 layer listener) --------> rule1
// |--> rule2
// |--> rule3
// |--> ...
//
// |--> rule2
// |--> rule3
// |--> ...
//
// domain and url is different in different rules
func (c *Clb) create7LayerListener(region string, listener *networkextensionv1.Listener) (string, error) {
Expand Down
Loading

0 comments on commit 92cbb2b

Please sign in to comment.