From f3e4e5e67c69af01805bb13b153689fc6254e019 Mon Sep 17 00:00:00 2001
From: bingoct <47520890+bingoct@users.noreply.github.com>
Date: Thu, 18 Jan 2024 20:03:29 +0800
Subject: [PATCH] Bcs ops bugfix 20240112 (#2897)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* bug-fix: baremetal ip获取前,先检查默认路由
* doc: 创建集群前推荐先预渲染配置文件
doc: 新增环境变量说明
---
bcs-ops/readme.md | 147 ++++++++++++++++++++++++++++++++------
bcs-ops/system/get_lan_ip | 11 ++-
2 files changed, 134 insertions(+), 24 deletions(-)
diff --git a/bcs-ops/readme.md b/bcs-ops/readme.md
index 2c473db77a..e84d94b393 100644
--- a/bcs-ops/readme.md
+++ b/bcs-ops/readme.md
@@ -77,8 +77,10 @@ set +x
### 集群创建与节点添加
-1. 在第一台主机(后称中控机)上启动集群控制平面:`./bcs-ops --instal master`,集群启动成功后会显示加入集群的指令
-2. 集群加入指令有效期为 1 小时,中控机执行 `./bcs-ops --render joincmd` 可再次渲染生成加入集群的指令,渲染结果如下所示
+1. 通过`set -a 命令`配置环境变量,环境变量配置见[`环境变量`](#环境变量)
+2. `./bcs-ops -r bcsenv` 在第一台主机(后称中控机)上渲染配置文件 `env/bcs.env`
+3. 在中控机上启动集群控制平面:`./bcs-ops --instal master`,集群启动成功后会显示加入集群的指令
+4. 集群加入指令有效期为 1 小时,中控机执行 `./bcs-ops --render joincmd` 可再次渲染生成加入集群的指令,渲染结果如下所示
```plaintext
======================
@@ -98,7 +100,9 @@ set +x
======================
```
-3. 添加控制平面节点(master node),以及添加工作节点(wroker node),执行第二步渲染生成的的加入集群指令
+5. 添加控制平面节点(master node),以及添加工作节点(wroker node),执行第二步渲染生成的的加入集群指令
+
+> `./bcs-ops -h`查看支持的命令
### 集群 node 节点移除
@@ -118,7 +122,100 @@ set +x
通过配置环境变量来设置集群相关的参数。在中控机创建集群前,通过 `set -a` 设置环境变量。 你可以执行 `system/config_envfile.sh -init` 查看默认的环境变量。
注意,当你要使用多个特性时,相关的环境变量都得申明
-### 示例:使用 containerd 作为容器运行时
+### host 环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| ----------------- | ----------- | -------------------------------------------------------------------------- |
+| `BK_HOME` | `/data/bcs` | 软件根路径 |
+| `K8S_IPv6_STATUS` | `Disable` | 集群 ipv6 状态
支持`SingleStack`( ipv6 单栈),`DualStack`双栈
|
+| `LAN_IP` | `""` | 主机 IP 地址,通过默认路由获取 |
+| `LAN_IPv6` | `""` | 主机 IPv6 地址,通过默认路由获取 |
+| `BCS_OFFLINE` | `""` | 离线安装,`1`为开启 |
+| `INSTALL_METHOD` | `yum` | 软件安装方式,默认`yum`。离线安装开启时此配置失效 |
+| `BCS_SYSCTL` | `1` | 系统调优,默认开启 |
+
+### 仓库地址 环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| ---------------- | ------------------------------------------------------- | ---------------------------------- |
+| `MIRROR_URL` | `https://mirrors.tencent.com` | yum 仓库镜像地址,默认腾讯镜像仓库 |
+| `REPO_URL` | `https://bkopen-1252002024.file.myqcloud.com/ce7/tools` | tool (yq/jq\) 工具下载地址 |
+| `MIRROR_IP` | | mirrors.tencentyun.com 解析地址 |
+| `REPO_MIRRORS` | `https://mirror.ccs.tencentyun.com` | 容器镜像源,默认腾讯云 |
+| `BK_PUBLIC_REPO` | `hub.bktencent.com` | 容器镜像默认 registry |
+| `BKREPO_URL` | `https://hub.bktencent.com/chartrepo/blueking
| 蓝鲸 helm chart 仓库 |
+
+### K8S 环境变量
+
+#### k8s 基础环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| ---------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `K8S_VER` | `1.20.15` | k8s 版本,现支持 `1.20.151.23.171.24.15` |
+| `ETCD_LIB` | `${BK_HOME}/lib/etcd` | 控制平面 etcd 根目录 |
+| `KUBELET_LIB` | `${BK_HOME}/lib/kubelet` | kubelet 根目录 |
+| `K8S_EXTRA_ARGS` | `allowed-unsafe-sysctls: 'net.ipv4.tcp_tw_reuse'` | [cluster sysctl](https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/) |
+| `BCS_CP_WORKER` | `0` | 是否单节点集群,`0`关闭,`1`开启,开启后控制平面污点取消 |
+
+#### k8s 网络配置
+
+| 环境变量 | 默认值 | 说明 |
+| ------------------ | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `K8S_CTRL_IP` | 控制平面默认是自身。
工作平面默认是中控机 ip,如果开启了 apiserver hpa,则是 VIP
| 访问控制平面 ip。
|
+| `K8S_SVC_CIDR` | `10.96.0.0/12` | 集群 svc ipv4 网段 |
+| `K8S_POD_CIDR` | `10.244.0.0/16` | 集群 pod ipv4 网段 |
+| `K8S_SVC_CIDRv6` | `fd00::1234:5678:1:0/112` | 集群 svc ipv6 网段(`K8S_IPv6_STATUS`不为`Disable`时有效) |
+| `K8S_POD_CIDRv6` | `fd00::1234:5678:0/104` | 集群 pod ipv6 网段(`K8S_IPv6_STATUS`不为`Disable`时有效) |
+| `K8S_MASK` | `24` | 集群 pod ipv4 掩码长度 |
+| `K8S_IPv6_MASK` | `120` | 集群 pod ipv6 掩码长度 |
+| `K8S_CNI` | `flannel` | CNI 插件,现仅支持 `flannel` |
+| `ENABLE_MULTUS_HA` | `true` | [MULTUS_CNI](https://k8snetworkplumbingwg.github.io/multus-cni/docs/quickstart.html) 默认启用 |
+
+#### CRI 环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| --------------------- | --------------------------- | ---------------------------------------------------------- |
+| `CRI_TYPE` | `docker` | 容器运行时,支持`docker` 和 `containerd` |
+| `INSECURE_REGISTRY` | `""` | 信任的 registry |
+| `DOCKER_VER` | `19.03.9` | 默认安装的 docker 版本 |
+| `DOCKER_LIB` | `${BK_HOME}/lib/docker` | docker root path |
+| `DOCKER_LIVE_RESTORE` | `false` | docker config `live-restore`,重启后容器状态恢复,默认关闭 |
+| `DOCKER_BRIDGE` | `""` | docker 网桥设备 |
+| `CONTAINERD_VER` | `1.6.21` | 默认安装的 containerd 版本 |
+| `CONTAINERD_LIB` | `${BK_HOME}/lib/containerd` | containerd 根路径 |
+
+#### CSI 环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| ----------------------- | -------------------- | ---------------------------------------------- |
+| `k8s_csi` | `""` | CSI 选择,现仅支持 `localpv` |
+| `localpv_dir` | `${BK_HOME}/localpv` | localpv mount source,被挂载路径 |
+| `localpv_dst_dir` | `/mnt/blueking` | localpv mount point,挂载路径 |
+| `localpv_count` | `20` | localpv 创建的目录数(影响节点挂载的 PV 数量) |
+| `localpv_reclaimpolicy` | `Delete` | localpv 的 PV 回收策略,默认删除 |
+
+#### apiserver ha 环境变量
+
+| 环境变量 | 默认值 | 说明 |
+| ------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `ENABLE_APISERVER_HA` | `false` | apiserver ha 模式,默认关闭。 |
+| `APISERVER_HA_MODE` | `bcs-apiserver-proxy` | 模式选择,支持 [bcs-apiserver-proxy](https://github.com/TencentBlueKing/bk-bcs/blob/625be3183d99ee3500123016a6dea99d78165565/docs/features/bcs-apiserver-proxy/bcs-apiserver-proxy.md#L1)`[kube-vip](https://kube-vip.io/)` |
+| `VIP` | | VIP 地址,可配置与集群内不冲突的 ip 地址 |
+| `VS_PORT` | `6443` | bap 代理端口 |
+| `APISERVER_PROXY_VERSION` | `v1.29.0-alpha.130-tencent` | bap 镜像版本 |
+| `PROXY_TOOL_PATH` | `/usr/bin` | bap 工具安装目录 |
+| `PERSIST_DIR` | `/root/.bcs` | bap 持久化目录 |
+| `LVS_SCHEDULER` | `rr` | bap 负载均衡策略 |
+| `MANAGER_INTERVAL` | `10` | bap 监听时间 |
+| `DEBUG_MODE` | `true` | bap DEBUG 模式 默认开启 |
+| `LOG_LEVEL` | `3` | bap 日志等级 |
+| `KUBE_VIP_VERSION` | `v0.5.12` | kube-vip 镜像版本 |
+| `BIND_INTERFACE` | `""` | kube-vip 绑定网卡名 |
+| `VIP_CIDR` | `32` | VIP CIDR 掩码长度 |
+
+### 示例
+
+#### a. 选择 `1.24.15` 的 k8s 版本 ,并使用 `containerd` 作为容器运行时
```bash
set -a
@@ -127,7 +224,7 @@ CRI_TYPE="containerd"
set +a
```
-### 示例:创建 ipv6 双栈集群
+#### b. 创建 ipv6 双栈集群
> k8s 1.23 ipv6 特性为稳定版,仅支持 >=1.23.x 版本开启 ipv6 特性
@@ -139,7 +236,7 @@ set +a
./bcs-ops -i master
```
-### 示例: 修改镜像 registry,并信任
+#### c. 修改镜像 registry,并信任
相关环境变量。镜像仓库默认为蓝鲸官方镜像仓库`hub.bktencent.com`,如果采用自己的镜像仓库,并且没有证书信任,需要添加下面两项环境变量
@@ -152,7 +249,7 @@ INSECURE_REGISTRY=""
set +a
```
-### 示例:离线安装
+#### d. 离线安装
离线安装资源清单见 `env/offline-manifest.yaml`。
@@ -165,22 +262,7 @@ K8S_VER="${VERSION}"
set +a
```
-#### 离线包制作
-
-离线包的制作依赖命令工具 [yq](https://github.com/mikefarah/yq) 和 [skopeo](https://github.com/containers/skopeo),请提前安装对应的工具。
-制作 bcs-ops 所支持的离线包版本。
-
-```bash
-make build_offline_pkg
-```
-
-如果你只想制作对应版本的离线包(该版本应该在`env/offline-manifest.yaml`中出现)。
-
-```bash
-./offline_package.sh env/offline-manifest.yaml
-```
-
-### 示例:开启 apiserver 高可用
+#### e. 开启 apiserver 高可用
APISERVER_HA_MODE 支持 [bcs-apiserver-proxy](https://github.com/TencentBlueKing/bk-bcs/blob/master/docs/features/bcs-apiserver-proxy/bcs-apiserver-proxy.md)(默认) 和 kube-vip。
@@ -241,6 +323,25 @@ hostNetwork: false
---
+# 编译打包
+
+## 离线包制作
+
+离线包的制作依赖命令工具 [yq](https://github.com/mikefarah/yq) 和 [skopeo](https://github.com/containers/skopeo),请提前安装对应的工具。
+制作 bcs-ops 所支持的离线包版本。
+
+```bash
+make build_offline_pkg
+```
+
+如果你只想制作对应版本的离线包(该版本应该在`env/offline-manifest.yaml`中出现)。
+
+```bash
+./offline_package.sh env/offline-manifest.yaml
+```
+
+---
+
# 集群操作
## 脚本
diff --git a/bcs-ops/system/get_lan_ip b/bcs-ops/system/get_lan_ip
index 0ce262eecd..d06116ff03 100755
--- a/bcs-ops/system/get_lan_ip
+++ b/bcs-ops/system/get_lan_ip
@@ -28,7 +28,7 @@ Usage:
[ -h --help -? show usage ]
[ -v -V --version show script version]
[ -4 get default route lan ipv4 addr]
- [ -6 get default route lan ipv6 addr]
+ [ -6 get default route lan ipv6 addr]
EOF
exit "$1"
}
@@ -68,15 +68,24 @@ _on_cloud() {
}
_on_baremetal() {
+ if ! ip route show | grep "default via"; then
+ echo "fail to obtain LAN_IP, default route missing"
+ exit 2
+ fi
LAN_IP=$(ip -4 -o route get 10/8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p')
if [[ -n $LAN_IP ]]; then
echo "$LAN_IP"
return 0
fi
+ echo "fail to obtain LAN_IP"
exit 1
}
_on_baremetal_v6() {
+ if ! ip -6 route show | grep "default via"; then
+ echo "fail to obtain LAN_IPv6, default route missing"
+ exit 2
+ fi
LAN_IPv6=$(ip -6 -o route get fd00::/8 | grep -Po '(?<=src) \K[^ ]+')
if [[ -n $LAN_IPv6 ]]; then
echo "$LAN_IPv6"