基础环境信息
系统:CentOS 7.9
IP | CPU | 内存 |
---|---|---|
10.44.81.161 | 32 | 96 |
10.44.81.162 | 32 | 96 |
10.44.81.163 | 32 | 96 |
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
,我们把一些连续的安装步骤封装到了脚本中,以节约时间。
脚本需要填写如下参数:
-
-i base
:指定要安装的模块。关键词base
表示基础套餐的后台部分。 -
--domain BK_DOMAIN
:指定蓝鲸的基础域名(下文也会使用BK_DOMAIN
这个变量名指代)。
提示
当你的内网存在蓝鲸 V6 或更早版本的环境时,请勿复用基础域名。以免 Cookie 冲突,导致频繁提示登录,甚至循环提示登录。
示例:当 V6 环境使用了 bktencent.com
时,其访问地址为 paas.bktencent.com
。V7 环境不能使用 bkce7.bktencent.com
、 bktencent.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 项:
-
确保 node 能拉取 SaaS 镜像
-
推荐:上传 PaaS runtimes 到 bkrepo
-
可选:配置 SaaS 专用 node
确保 node 能拉取 SaaS 镜像
具体操作请查阅 《确保 node 能拉取 SaaS 镜像》 文档。
完成后,回到本文档继续操作。
推荐:上传 PaaS runtimes 到制品库
具体操作请查阅《上传 PaaS runtimes 到制品库》文档。
在如下场景下用到:
-
目前蓝鲸官方 SaaS 包格式为
image
,如需部署package
格式的S-Mart
包,需要使用到编译工具。 -
用户通过 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 其他集群容器日志采集步骤。
评论