基础环境信息

系统:CentOS 7.9

IPCPU内存
10.44.81.1613296
10.44.81.1623296
10.44.81.1633296

k8s环境准备

安装docker ,docker版本要求:19.03 及更高

yum -y install wget 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y
wget -O /etc/yum.repos.d/docker-ce.repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce-20.10.20-3.el7

安装k8s 这里使用github上开源的一个ansible脚本来安装k8s

安装ansible环境


# 安装 git 命令行

yum install git -y

# 克隆本项目代码

git clone https://github.com/choerodon/kubeadm-ha.git

# 进入项目目录

cd kubeadm-ha

# 安装 ansible 环境

sudo ./ansible/install.sh

安装k8s集群


Plain Text 配置好 ansible inventory 文件,然后执行 ansible-playbook -i inventory.ini 90-init-cluster.yml 注: 1、更详细的说明,可以查看https://github.com/choerodon/kubeadm-ha.git 2、这个脚本的使用最主要的是配置inventory文件,以下我的inventory文件的内容

vim inventory.ini

[all] 10.44.81.161 ansible_port=22 ansible_user="root" ansible_ssh_pass="1234567" 10.44.81.162 ansible_port=22 ansible_user="root" ansible_ssh_pass="1234567" 10.44.81.163 ansible_port=22 ansible_user="root" ansible_ssh_pass="1234567"

[lb]

[etcd] 10.44.81.161 10.44.81.162 10.44.81.163

[kube-master] 10.44.81.161 10.44.81.162 10.44.81.163

[kube-worker] 10.44.81.161 10.44.81.162 10.44.81.163

[new-master]

[new-worker]

[new-etcd]

[del-worker]

[del-master]

[del-etcd]

[del-node]

[all:vars] skip_verify_node=false kube_version="1.20.0"

container_manager="docker"

lb_mode="nginx" lb_kube_apiserver_port="8443"

kube_pod_subnet="10.244.0.0/18" kube_service_subnet="10.244.64.0/18" kube_network_node_prefix="24"

kube_max_pods="400"

network_plugin="calico"

kubelet_root_dir="/data/kubelet" docker_storage_dir="/data/docker" containerd_storage_dir="/data/containerd" etcd_data_dir="/data/etcd"

部署NFS,并配置相应的存储类


Plain Text mkdir /data/nfs yum install -y nfs-utils echo '/data/nfs 10.44.81.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)' > /etc/exports sudo systemctl enable nfs-server sudo systemctl start nfs-server

helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/ helm repo update

helm upgrade --install nfs-client-provisioner c7n/nfs-client-provisioner \ --set rbac.create=true \ --set persistence.enabled=true \ --set storageClass.name=nfs-provisioner \ --set persistence.nfsServer=10.44.81.161 \ --set persistence.nfsPath=/data/nfs \ --version 0.1.1 \ --namespace kube-system

把存储类配置成默认存储类 kubectl patch storageclass nfs-provisioner -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"true"}}}'

安装其它依赖包


Plain Text yum install -y jq unzip uuid

部署基础套餐

下载所需的资源文件

注意

请确保完成了《安装蓝鲸下载脚本》章节,会在此处设置 $INSTALL_DIR 变量。

鉴于目前容器化的软件包数量较多且变动频繁,我们提供了下载脚本。

请在 中控机 使用如下命令下载文件到 $INSTALL_DIR 目录。


Shell bkdl-7.2-stable.sh -ur latest base demo nm_gse_full saas scripts

接下来的部署过程中,默认工作目录为 $INSTALL_DIR/blueking/

快速部署蓝鲸基础套餐

可选:配置 docker registry 地址

如果你在内网提供了 registry,可以提前配置环境变量,指示部署脚本使用。

在中控机执行:


Shell export REGISTRY=代理IP:端口

注意:请提前在 全部 k8s node 上为 containerd 处理 SSL 证书问题,可以参考 《调整 node 上的容器运行时》文档。

检查存储供应

先检查当前的存储提供者。在 中控机 执行:


Shell kubectl get sc

  • 如果 NAME 列存在带 (default) 后缀的条目(且只能存在一条),说明已经配置了默认存储类,检查 通过

  • 如果上述命令提示 No resources found,说明还没有配置存储类。请参考如下方式处理后 重新检查存储供应

    • 如果希望由 node 提供存储,可参考部署详解 直接创建 localpv

    • 自行配置其他 sc,并设置为默认。

版本补丁

修改 job 版本号为 0.6.6-beta.6


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 sed -i 's/bk-job:.*/bk-job: "0.6.6-beta.6"/' environments/default/version.yaml

部署基础套餐后台

“一键脚本”指的是scripts/setup_bkce7.sh,我们把一些连续的安装步骤封装到了脚本中,以节约时间。

脚本需要填写如下参数:

  1. -i base:指定要安装的模块。关键词 base 表示基础套餐的后台部分。

  2. --domain BK_DOMAIN:指定蓝鲸的基础域名(下文也会使用 BK_DOMAIN 这个变量名指代)。

提示

当你的内网存在蓝鲸 V6 或更早版本的环境时,请勿复用基础域名。以免 Cookie 冲突,导致频繁提示登录,甚至循环提示登录。

示例:当 V6 环境使用了 bktencent.com 时,其访问地址为 paas.bktencent.com。V7 环境不能使用 bkce7.bktencent.combktencent.com 或者 xx.bkce7.bktencent.com 作为基础域名。

假设你用于部署蓝鲸的域名为 bkce7.bktencent.com,使用如下的命令开始部署:


Shell BK_DOMAIN=bkce7.bktencent.com # 请修改为你分配给蓝鲸平台的主域名 cd $INSTALL_DIR/blueking/ # 进入工作目录

# 检查域名是否符合k8s域名规范,要全部内容匹配才执行脚本,否则提示域名不符合。

patt_domain='[a-z0-9]([-a-z0-9]*[a-z0-9])(.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*' if grep -P "$patt_domain" <<< "$BK_DOMAIN"; then scripts/setup_bkce7.sh -i base --domain "$BK_DOMAIN" else echo "BK_DOMAIN($BK_DOMAIN) does not match pattern($patt_domain)." fi

视 CPU 性能及磁盘 IO 性能差异,脚本耗时 15 ~ 35 分钟,请耐心等待。部署成功会高亮提示如下:


Plain Text 时间略 [INFO] finish install blueking base-backend 时间略 [INFO] SHOW BKPANEL & BKREPO INITIAL PASSWORD helm status -n blueking bk-user helm status -n blueking bk-repo

提示

如果部署期间出错,请先查阅 《部署问题排查》文档。

问题解决后,可重新执行上面的命令。

更新 DNS

接下来的操作需要更新 coredns,并在中控机配置解析记录。

更新 coredns

我们需要确保 k8s 集群的 pod 能解析到蓝鲸域名。

注意

当 service 被删除,重建后 clusterIP 会变动,此时需更新 hosts 文件。

请继续补充配置如下域名,方便后续使用:


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 BK_DOMAIN=$(yq e '.domain.bkDomain' environments/default/custom.yaml) # 从自定义配置中提取, 也可自行赋值 IP1=$(kubectl get svc -A -l app.kubernetes.io/instance=ingress-nginx -o jsonpath='{.items[0].spec.clusterIP}') ./scripts/control_coredns.sh update "$IP1" bknodeman.$BK_DOMAIN job.$BK_DOMAIN jobapi.$BK_DOMAIN

配置中控机 DNS

请在中控机执行如下脚本更新 /etc/hosts 文件,可安全重复运行:


Shell ./scripts/dns-helper.sh lan | ./scripts/update-hosts-file.sh /etc/hosts /etc/hosts

准备 SaaS 运行环境

一共需要准备 3 项:

  1. 确保 node 能拉取 SaaS 镜像

  2. 推荐:上传 PaaS runtimes 到 bkrepo

  3. 可选:配置 SaaS 专用 node

确保 node 能拉取 SaaS 镜像

具体操作请查阅 《确保 node 能拉取 SaaS 镜像》 文档。

完成后,回到本文档继续操作。

推荐:上传 PaaS runtimes 到制品库

具体操作请查阅《上传 PaaS runtimes 到制品库》文档。

在如下场景下用到:

  1. 目前蓝鲸官方 SaaS 包格式为 image,如需部署 package 格式的 S-Mart 包,需要使用到编译工具。

  2. 用户通过 PaaS 自行开发 SaaS 时。

可选:配置 SaaS 专用 node

具体操作请查阅《配置 SaaS 专用 node》文档。

在资源充足的情况下,建议单独给 SaaS 分配单独的 node。因为 SaaS 部署时,编译会产生高 IO 和高 CPU 消耗,而原生 k8s 集群暂无 IO 隔离方案,会影响到所在 node 的其他 pod

部署基础套餐 SaaS

提示

你也可以跟随 《部署步骤详解 —— SaaS》文档,在浏览器中访问开发者中心部署这些 SaaS。

每个 SaaS 部署不超过 10 分钟,如果遇到问题请先查阅 《SaaS 部署问题案例》文档。

注意

本脚本设计为全新安装 SaaS,如 SaaS 已安装,会自动跳过。你可以给脚本加上 -f 参数强制重新安装,例如重新安装流程服务: scripts/setup_bkce7.sh -i itsm -f

部署流程服务(bk_itsm)

执行如下命令即可:


Shell scripts/setup_bkce7.sh -i itsm

部署标准运维(bk_sops)

执行如下命令即可:


Shell scripts/setup_bkce7.sh -i sops

部署配置平台 SaaS(bk_cmdb_saas)

执行如下命令即可:


Shell scripts/setup_bkce7.sh -i bk_cmdb_saas

部署节点管理(bk_nodeman)

执行如下命令部署 bk-nodeman release,给 admin 桌面添加应用,并上传 Agent 和插件包:


Shell scripts/setup_bkce7.sh -i nodeman

整个过程耗时 5 ~ 10 分钟。

访问蓝鲸

配置本地 pc 的 hosts 文件

你从哪访问蓝鲸,就需要确保对应设备可以解析蓝鲸域名。最快捷的办法就是修改 hosts 文件。

更多复杂场景,可以阅读《部署步骤详解 —— 后台》 文档 的 “配置用户侧的 DNS” 章节。

在中控机生成 hosts 文件内容

请参考连接方式在中控机执行脚本,获取 hosts 内容。

  • 当你能直接访问到 ingress-nginx 的内网 IP 时,使用如下参数生成 hosts 文件:

Shell ./scripts/dns-helper.sh lan

  • 当你从公网访问,或者办公区到机房有统一的访问网关时,需要指定 IP:

Shell ./scripts/dns-helper.sh ingress-nginx的公网IP或者代理IP

在 pc 上修改 hosts 文件

请在本地 pc 上以管理员权限打开 hosts 文件,粘贴上面生成的内容。

具体操作可自行搜索 “hosts文件怎么修改”。

注意

当保存 hosts 文件后,如果浏览器访问提示 无法解析域名(Chrome 浏览器提示的错误码: dns_probe_finished_nxdomain),请刷新本地 DNS 缓存,具体操作请自行搜索 “刷新dns缓存命令”。

浏览器访问

中控机 执行如下命令获取访问地址及登录信息:


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 BK_DOMAIN=$(yq e '.domain.bkDomain' environments/default/custom.yaml) # 从自定义配置中提取, 也可自行赋值 echo "访问地址: http://$BK_DOMAIN (如浏览器报错 NXDOMAIN,请配置hosts)"; \ kubectl get cm -n blueking bk-user-api-general-envs -o go-template='用户: {{.data.INITIAL_ADMIN_USERNAME}}{{"\n"}}密码: {{ .data.INITIAL_ADMIN_PASSWORD }}{{"\n"}}'

浏览器访问上述地址即可。

部署监控日志套餐

监控平台

启动监控存储服务

请在 中控机 执行:


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 helmfile -f monitor-storage.yaml.gotmpl sync # 部署监控依赖的存储

推荐:对接容器管理平台

容器监控功能依赖 容器管理平台 (BCS),请先完成 部署容器管理平台


Shell ./scripts/config_monitor_bcs_token.sh # 获取bcs token,写入监控和日志的 custom-values 文件。

部署监控

部署监控后台和 saas 以及监控数据链路组件:


Shell helmfile -f 04-bkmonitor.yaml.gotmpl sync

约等待 5 ~ 10 分钟,期间 bk-monitor-consul pod 可能 Error 且自动重启。

添加桌面图标

提示

目前 “故障自愈” 已经整合到了监控平台,如果需要访问,可以一并添加桌面图标。

在 admin 桌面添加应用,也可以登录后自行添加。同时设置为默认应用,所有新登录的用户都会自动添加此应用到桌面。


Shell

# 监控

# 在admin桌面添加应用,也可以登录后手动添加。如果未曾打开过桌面,则会提示 user(admin) not exists,可忽略。

scripts/add_user_desktop_app.sh -u "admin" -a "bk_monitorv3"

# 设为默认应用。

scripts/set_desktop_default_app.sh -a "bk_monitorv3"

# 故障自愈

# 在admin桌面添加应用,也可以登录后手动添加。如果未曾打开过桌面,则会提示 user(admin) not exists,可忽略。

scripts/add_user_desktop_app.sh -u "admin" -a "bk_fta_solution"

# 设为默认应用。

scripts/set_desktop_default_app.sh -a "bk_fta_solution"

推荐:容器监控数据上报

容器监控数据由 bkmonitor-operator release 采集,它提供了 daemonset 工作负载,在所有 k8s node (包括 master )运行。数据上报由这些主机的 gse-agent 完成,故请先在 “节点管理” 中完成 agent 安装并确保状态正常。


Shell helmfile -f 04-bkmonitor-operator.yaml.gotmpl sync # 部署 k8s operator 提供容器监控数据

访问监控平台

需要配置域名 bkmonitor.$BK_DOMAIN,操作步骤已经并入 《部署步骤详解 —— 后台》 文档 的 “配置用户侧的 DNS” 章节。

配置成功后,即可在桌面打开 “监控平台” 应用了。

提示

刚部署完成时,访问监控如果出现 HTTP 503 报错,请耐心等待界面准备完成。在后台初始化任务完成前,首页可能出现报错。

后续浏览器中遇到的报错或者异常,可先查阅 《产品界面使用问题案例》文档。

主机基础监控数据上报由 bkmonitorbeat 插件提供,之前安装 agent 时会默认安装。

提示

  • 为 Agent 安装并启动 bkmonitorbeat 插件后,大概等 2 ~ 5 分钟, “观测场景” —— “主机监控” 界面的主机采集状态会变为 “正常”。此时点击 IP 进入主机详情界面,稍等 1 ~ 2 分钟可以看到监控图表。插件安装步骤见《配置节点管理及安装 Agent》文档。

  • 完成 “容器监控数据上报” 章节后,访问监控平台 “观测场景” —— “Kubernetes” 界面可能依旧显示 “开启 Kubernetes 监控” 的提示,请稍等 1 ~ 11 分钟,然后刷新页面,即可显示集群信息,稍后会更新监控数据图表。

提示

主机详情界面在刷新后,会导致图表数据自动刷新失效,需要重新设置一次。

日志平台

配置 ElasticSearch

提示

为了快速部署,我们默认使用了蓝鲸共享的 bk-elasticsearch 单副本集群。 建议你自备多副本集群,并根据采集的原始日志量配置充足的存储。

目前由监控统一定时创建 ElasticSearch 索引,每 10 分钟执行一次。如果 es 自动创建了 write_ 开头的索引,则会导致搜索时找不到预期的索引,因此需要禁止此行为。

可以在 中控机 执行如下命令配置蓝鲸预置 es 服务:


Shell kubectl exec -it -n blueking bk-elastic-elasticsearch-master-0 -- curl -X PUT -u elastic:blueking http://127.0.0.1:9200/_cluster/settings -H 'Content-Type: application/json' -d '{"persistent":{"action":{"auto_create_index":"-write__,_"}}}'

提示

如果已经自动创建了 write_ 开头的索引,可以使用如下命令删除:


Shell kubectl exec -it -n blueking bk-elastic-elasticsearch-master-0 -- curl -u elastic:blueking -X DELETE 'http://localhost:9200/write_*'

推荐:对接容器管理平台

之前在部署监控时已经写过配置文件了。可以检查下:


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 yq e '.configs.bcsApiGatewayToken' environments/default/bklog-search-custom-values.yaml.gotmpl

如果显示 null,请先 部署监控平台启用容器监控

部署日志采集器

bklog-collector release 定义了 CR: bklogconfigs.bk.tencent.com,并提供了 daemonset 工作负载,在所有 k8s node (包括 master )运行。日志上报经由这些主机的 gse-agent 传递,故请先在 “节点管理” 中完成 agent 安装并确保状态正常。


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 helmfile -f 04-bklog-collector.yaml.gotmpl sync

如果启动失败,请在节点管理中检查 k8s 各 node 上的 GSE Agent 状态是否正常。

部署日志平台

提示

请先确保 监控平台 正常运行,才能继续部署日志平台。

请在 中控机 执行:


Shell cd $INSTALL_DIR/blueking/ # 进入工作目录 helmfile -f 04-bklog-search.yaml.gotmpl sync # 部署

# 在admin桌面添加应用,也可以登录后手动添加。如果未曾打开过桌面,则会提示 user(admin) not exists,可忽略。

scripts/add_user_desktop_app.sh -u "admin" -a "bk_log_search"

# 设为默认应用。

scripts/set_desktop_default_app.sh -a "bk_log_search" ```

### 访问日志平台

需要配置域名 `bklog.$BK_DOMAIN`,操作步骤已经并入 《部署步骤详解 —— 后台》 文档 的 “配置用户侧的 DNS” 章节。

配置成功后,即可在桌面打开 “日志平台” 应用了。

此时位于 “检索” 界面,如果左上角 “索引集” 下拉列表为空。可以:

- 启用蓝鲸各平台预置的日志采集项

1. 完成下文的 “蓝鲸各平台容器日志上报” 章节。

- 采集主机日志

1. 在节点管理中,为待采集主机安装 `bkunifylogbeat` 插件。
    
2. 在日志平台的 “管理” —— “日志采集” 界面添加采集项。
    

- 采集容器环境日志 (需要完成 “对接容器管理平台” 章节)
    
- 蓝鲸集群(BCS-K8S-00000)
    
    1. 完成 “部署容器日志采集器” 章节。
        
    2. 在日志平台的 “管理” —— “日志采集” 界面添加采集项。
        
- 其他集群
    
    1. TODO 其他集群容器日志采集步骤。