跳转至

蓝鲸智云7.0-安装篇

社区版7.0容器化部署(基础套餐)灰度交流贴 https://bk.tencent.com/s-mart/community/question/6449

产品截图

登录界面 image.png 工作台 image.png 开发者中心 image.png

观看视频推荐

蓝鲸智云7.0-安装篇01-简单介绍
蓝鲸智云7.0-安装篇02-服务器初始化
蓝鲸智云7.0-安装篇03-安装k8s-master节点
蓝鲸智云7.0-安装篇04-安装k8s-node节点
蓝鲸智云7.0-安装篇05-部署基础套餐01
蓝鲸智云7.0-安装篇06-部署基础套餐02
蓝鲸智云7.0-安装篇07-准备SaaS运行环境
蓝鲸智云7.0-安装篇08-部署流程服务
蓝鲸智云7.0-安装篇09-部署进程配置管理
蓝鲸智云7.0-安装篇10-部署标准运维
蓝鲸智云7.0-安装篇11-部署蓝鲸可视化平台
蓝鲸智云7.0-安装篇12-部署节点管理

蓝鲸智云7.0-快速入门篇01-节点管理
蓝鲸智云7.0-快速入门篇02-配置平台
蓝鲸智云7.0-快速入门篇03-进程配置管理
蓝鲸智云7.0-快速入门篇04-作业平台
蓝鲸智云7.0-快速入门篇05-用户管理
蓝鲸智云7.0-快速入门篇06-权限中心
蓝鲸智云7.0-快速入门篇07-标准运维
蓝鲸智云7.0-快速入门篇08-流程服务
蓝鲸智云7.0-快速入门篇09-制品库
蓝鲸智云7.0-快速入门篇10-可视化平台

服务器初始化

系统环境

系统版本:CentOS Linux release 7.6.1810 (Core)
系统内核:3.10.0-957.el7.x86_64
网络环境:要求服务器可以连通网络
规格大小:建议使用不小于1C1G
网卡数量:建议不小于1块网卡
系统盘:  建议使用不小于100GB的空间
数据盘:  建议使用不小于100GB的空间(可选)

配置YUM仓库

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum repolist

软件包安装

yum -y install ansible vim git

拉取远程代码

cd /root/
git clone https://gitee.com/chriscentos/system-init.git

复制模版信息

cd /root/system-init/
\cp group_vars/all-template group_vars/all
\cp hosts-example hosts

配置主机列表

vim hosts

cat >/root/system-init/hosts<<EOF
[nodes01]
192.168.1.225
192.168.1.226
192.168.1.227
192.168.1.228
192.168.1.229
192.168.1.230


[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass="P@sswd"
EOF

生成密钥对

检查是否存在密钥对

# ls -l /root/.ssh/id_rsa*
-rw------- 1 root root 1679 Dec  3 22:51 /root/.ssh/id_rsa
-rw-r--r-- 1 root root  403 Dec  3 22:51 /root/.ssh/id_rsa.pub
若已生成密钥对,则可以跳过此操作
# ssh-keygen    ## 执行此命令,然后一直回车即可

初始化变量

vim group_vars/all

# system init size percentage
ntp_server_host: 'ntp1.aliyun.com' #配置NTP地址
dns_server_host: '114.114.114.114' #配置DNS地址

# Safety reinforcement related configuration
auth_keys_file: '/root/.ssh/authorized_keys' #设置key文件地址
password_auth: 'yes' #是否开启密码登录,yes表示开启 no表示不开启
root_public_key: ''  #设置免密公钥
root_passwd: 'P@sswd'
公钥信息获取方式:cat /root/.ssh/id_rsa.pub

服务器检查

检查远程服务器的SSH连接状态

ansible -m ping nodes01
192.168.1.10 | SUCCESS => {

服务器优化

ansible-playbook playbooks/system_init.yml -e "nodes=nodes01"

挂载数据盘(可选)

如果服务器需要挂载数据盘,可使用以下快捷命令

cat >./disk_mount.sh<<EOF
mkfs.xfs -f /dev/sdb
mkdir -p /data
mount /dev/sdb /data/
 echo "/dev/sdb                                  /data                   xfs     defaults        0 0" >>/etc/fstab ; cat /etc/fstab |grep data
 echo
EOF

检查磁盘的挂载

cd /root/system-init/
ansible nodes01 -m copy -a "src=./disk_mount.sh dest=/tmp/disk_mount.sh"
ansible nodes01 -m shell -a "sh /tmp/disk_mount.sh"
ansible nodes01 -m shell -a "lsblk|grep data"

部署k8s集群

您需要一台机器执行部署操作。我们沿用惯例称其为“中控机”。

部署k8s-master节点

欢迎使用蓝鲸提供的 bcs.sh 脚本快速部署 k8s 集群。 请在 第一台 master 机器(下文称为 初始 master,新手用户建议复用 中控机)上执行此命令:

curl -fsSL https://bkopen-1252002024.file.myqcloud.com/ce7/bcs.sh | bash -s -- -i k8s

安装成功后可以检查:

[root@linux-bkce-node225 ~]# kubectl get node
NAME                   STATUS   ROLES                  AGE    VERSION
master-192-168-1-225   Ready    control-plane,master   105s   v1.20.11

这表示您成功部署了一个 k8s 集群,此时您可以使用 kubectl 命令了。接下来开始添加节点吧。

部署k8s-node节点

在 部署初始 master 章节,我们可以观察到脚本在结尾输出了 扩容控制平面 (即 master) 及 扩容节点 (即 node)的命令。 如果当时没有保存扩容命令,可以在 初始 master 机器上执行如下命令重新获取:

curl -fsSL https://bkopen-1252002024.file.myqcloud.com/ce7/bcs.sh | bash -s -- -i k8sctrl

masternode 机器的扩容命令不同,请勿混用。而同一类型的机器扩容命令相同。

登录到待扩容一批机器上粘贴对应的命令即可。假设我们要扩容 node,则需在 待扩容机器 上执行:

======================
  Kubernetes控制节点启动成功  
  扩容控制平面执行以下命令  
set -a 略
set +a
curl -fsSL https://bkopen-1252002024.file.myqcloud.com/ce7/bcs.sh | bash -s -- install k8s-control-plane
  扩容节点执行以下命令  
set -a 略
set +a
curl -fsSL https://bkopen-1252002024.file.myqcloud.com/ce7/bcs.sh | bash -s -- install k8s-node

[INFO]: LAN_IP: 192.168.1.225
  Welcome to BCS on bare-metal  

检查 k8s集群节点

中控机 上执行如下命令:

[root@linux-bkce-node225 ~]# kubectl get node
NAME                   STATUS   ROLES                  AGE    VERSION
master-192-168-1-225   Ready    control-plane,master   3m7s   v1.20.11
node-192-168-1-226     Ready    <none>                 48s    v1.20.11
node-192-168-1-227     Ready    <none>                 45s    v1.20.11
node-192-168-1-228     Ready    <none>                 42s    v1.20.11

当 STATUS 列的值为 Ready ,即表示此 node 已经成功加入集群且工作正常。 如需了解对应 node 的详情,可使用命令:

kubectl describe nodes NAME  # NAME参数为 kubectl get nodes输出的 NAME 列

部署基础套餐

为了便于您体验,我们封装了“一键部署” 脚本。

curl -Lo ~/setup_bkce7.sh http://bkopen-1252002024.file.myqcloud.com/ce7/setup_bkce7.sh && chmod +x ~/setup_bkce7.sh

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

yum -y install tmux
tmux new -s test01
~/setup_bkce7.sh --install base --domain bkce7.bktencent.com

此脚本耗时 15 ~ 30 分钟,请耐心等待。部署成功会高亮提示 install finished,clean pods in completed status

k8s 所有 node 机器均需保持网络畅通,可访问蓝鲸提供的镜像地址

卸载单个模块

如果安装到某个 charts 失败,需要重新安装,建议先卸载干净,然后重试。 以安装 paas-stack 为例,假设中途失败了: helm list -n blueking -a | grep bk-paas 会看到 failed 的一个 release。

卸载 release:

helm uninstall -n blueking bk-paas

删除和它相关的资源:

kubectl delete deploy,sts,cronjob,job,pod,svc,ingress,secret,cm,sa,role,rolebinding,pvc -n blueking -l app.kubernetes.io/instance=bk-paas

完全卸载蓝鲸

如果想完全卸载整个容器化蓝鲸平台,建议按以下步骤: 删除 coredns

BK_DOMAIN=bkce7.bktencent.com
IP=$(kubectl get pods -n blueking -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].status.hostIP}')

cd ~/bkhelmfile/blueking/ && ./scripts/control_coredns.sh del $IP bkrepo.$BK_DOMAIN $BK_DOMAIN bkapi.$BK_DOMAIN bkpaas.$BK_DOMAIN bkiam-api.$BK_DOMAIN 

通过 helm destroy 先删除 release:

helmfile -f ./base.yaml.gotmpl destroy

删除残留的资源:

kubectl delete namespace blueking

删除 serviceaccount:

kubectl delete sa bk-paasengine -n default

删除 rolebinding

kubectl delete clusterrolebinding bk-paasengine paasengin

删除部署 SaaS 创建的 namespace:

kubectl get ns | awk '/^bkapp-bk/ { print $1 }' | xargs kubectl delete ns

确定 pv 是否清干净:kubectl get pv (Available 状态可以忽略),如果有其他状态的,比如 Released,可以执行如下命令删除。

kubectl get pv  | awk '/blueking/ && /Released/ { print $1}' | xargs kubectl delete pv 


kubectl  config set-context --current --namespace=bcs-system
kubectl delete pvc data-bcs-api-gateway-etcd-0
kubectl delete pvc data-bcs-etcd-0 
kubectl delete pvc data-bcs-mysql-0
kubectl delete pvc data-bcs-rabbitmq-0
kubectl delete pvc data-bcs-services-stack-mariadb-0
kubectl delete pvc data-bcs-zookeeper-0
kubectl get pvc
kubectl delete pvc redis-data-bcs-services-stack-redis-master-0
kubectl  config set-context --current --namespace=default

kubectl get pv -ALL
kubectl get pvc -ALL
kubectl get pods -ALL

删除中控机相关目录 :~/bkhelmfile/blueking

\cp -rf ~/bkhelmfile/blueking /opt/
rm -fr ~/bkhelmfile/blueking

访问蓝鲸智云

蓝鲸设计为需要通过域名访问使用。所以您需先配置所在内网的 DNS 系统,或修改本机 hosts 文件。

请留意,这里指的不是 k8s 集群内部 所使用的 coredns

在中控机执行如下命令即可获得 hosts 文件的参考内容:

cd ~/bkhelmfile/blueking/  # 进入蓝鲸helmfile目录

# 获取 ingress-controller pod所在机器的公网ip,记为$IP1
IP1=$(kubectl get pods -n blueking -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].status.hostIP}')
# 获取外网ip
#IP1=$(ssh $IP1 'curl -sSf ip.sb')
# 获取 bk-ingress-controller pod所在机器的公网ip,记为$IP2,它负责SaaS应用的流量代理。
IP2=$(kubectl get pods -n blueking -l app.kubernetes.io/name=bk-ingress-nginx -o jsonpath='{.items[0].status.hostIP}')
# 获取外网ip
#IP2=$(ssh $IP2 'curl -sSf ip.sb')
BK_DOMAIN=$(yq e '.domain.bkDomain' environments/default/custom.yaml)
# 人工检查取值
echo "BK_DOMAIN=$BK_DOMAIN IP1=$IP1 IP2=$IP2"
# 输出hosts
cat <<EOF
$IP1 $BK_DOMAIN
$IP1 bkrepo.$BK_DOMAIN 
$IP1 bkpaas.$BK_DOMAIN 
$IP1 bkuser.$BK_DOMAIN
$IP1 bkuser-api.$BK_DOMAIN
$IP1 bkapi.$BK_DOMAIN 
$IP1 apigw.$BK_DOMAIN
$IP1 bkiam.$BK_DOMAIN
$IP1 bkiam-api.$BK_DOMAIN
$IP1 cmdb.$BK_DOMAIN 
$IP1 job.$BK_DOMAIN 
$IP1 jobapi.$BK_DOMAIN 
$IP2 apps.$BK_DOMAIN
EOF

获取 PaaS 登录账户及密码

helm status bk-user -n blueking

工作台:登录账户名密码: admin/Blueking@2022
制品库:初始用户名/密码: admin/blueking

浏览器访问

浏览器访问 $BK_DOMAIN 所指向的域名。此域名可以在 中控机 执行如下命令获取:

准备SaaS运行环境

上传 PaaS runtime 到 bkrepo

中控机 获取需要执行的命令查询:

helm status bk-paas -n blueking

其输出如图所示: 在 中控机 执行所提示的命令即可运行 runtimes-download.sh 脚本:

kubectl run --rm \
--env="BKREPO_USERNAME=admin" \
--env="BKREPO_PASSWORD=略" \
--env="BKREPO_ENDPOINT=http://bkrepo.略" \
--env="BKREPO_PROJECT=bkpaas" \
--image="hub.bktencent.com/blueking/paas3-buildpack-toolkit:1.1.0-beta.70" \
-it bkpaas3-upload-runtime --command  -- /bin/bash runtimes-download.sh \
-n blueking

runtimes-download.sh 脚本的主要动作就是从蓝鲸官方资源库下载依赖 SaaS 必需的 runtime (运行时资源)并上传到私有化环境中的 bkrepo 仓库。要求 k8s node 能访问外网,如果因网络问题下载异常,可以重复运行此脚本。

在 PaaS 界面配置 Redis 资源池

需要添加 SaaS 使用的 Redis 资源池,访问蓝鲸 PaaS Admin: http://bkpaas.$BK_DOMAIN/backend/admin42/platform/pre-created-instances/manage

http://bkpaas.bkce7.bktencent.com/backend/admin42/platform/pre-created-instances/manage

共享资源池和独占资源池,各添加 10 个(如果复用则 json 一样)。如果部署 SaaS 时提示 “分配不到 redis”,需增大此处的设置。

中控机 执行如下命令可输出待填写的 json:

redis_json_tpl='{"host":"bk-redis-master.blueking.svc.cluster.local","port":6379,"password":"%s"}'
printf "$redis_json_tpl\n" $(kubectl get secret --namespace blueking bk-redis -o jsonpath="{.data.redis-password}" | base64 --decode) | jq .

命令输出如下:

部署SaaS应用环境

在前面部署蓝鲸套件里包含了 PaaS 平台 V3、配置平台、作业平台、gse 几个原子平台和用户管理、权限中心两个公共模块,其他社区版官方的 SaaS 应用,比如标准运维、节点管理、流程服务等通过开发者中心来自助部署

SaaS 应用采用 s-mart 包部署方式: 打开开发者中心,创建应用,选择 S-mart 应用 ,上传包然后部署到生产环境即可。

我们汇总整理了接下来需要下载的文件。

需要提前下载的资源

  1. SaaS 集合包 文件名:ce7_saas.tgz
  2. MD5:ad0f2bea16e52c496c5ec70f2097e5eb
  3. 下载地址:http://bkopen-1252002024.file.myqcloud.com/ce7/ce7_saas.tgz
  4. GSE Agent 集合包 文件名:gse_client_ce_3.6.16.zip
  5. MD5:9a2d4f3d0034ea37a6c5cb8f7c4e399a
  6. 下载地址:http://bkopen-1252002024.file.myqcloud.com/ce7/gse_client_ce_3.6.16.zip
  7. Python 3.6 文件名:py36.tgz
  8. MD5:7f9217b406703e3e3ee88681dd903bd1
  9. 下载地址:http://bkopen-1252002024.file.myqcloud.com/common/py36.tgz

各 SaaS 安装及配置说明

部署流程服务(bk_itsm)

SaaS 包名:bk_itsm_xxx.tar.gz

无需配置额外环境变量,工作台进入开发者中心,直接创建应用,上传 S-mart 包部署即可。

部署 gsekit(进程配置管理)

SaaS 包名:bk_gsekit-xxx.tar.gz

无环境变量,直接部署,参考流程服务的部署

部署标准运维(bk_sops)

SaaS 包名:bk_sops-xxx.tar.gz

无环境变量直接部署,注意:有四个模块依次部署,default 需要先部署,其他的无顺序要求。

部署蓝鲸可视化平台(bk_lesscode)

SaaS 包名:bk_lesscode-ee-xxx.tar.gz

上传 S-mart 包,参考流程服务 saas 部署。 配置环境变量: 注意环境变量的作用范围,可以直接选所有环境

PRIVATE_NPM_REGISTRY http://bkrepo.bkce7.bktencent.com/npm/bkpaas/npm/
PRIVATE_NPM_USERNAME bklesscode
PRIVATE_NPM_PASSWORD blueking
BKAPIGW_DOC_URL  http://apigw.bkce7.bktencent.com/docs

在应用推广-发布管理中,将应用市场的访问地址类型设置为:主模块生产环境独立域名

最终配置界面如下图所示: 3. 部署应用到所需的环境 4. 配置独立域名,推荐使用: lesscode.BK_DOMAIN 。 目前 bk_lesscode 只支持通过独立域名来访问,在 bk_lesscode 应用页中, 点击 「应用引擎」-「访问入口」中配置独立域名并保存。 如果没有配置公网 DNS 解析,则在本地 hosts 需要加上 1.1.1.1( bk-ingress-controller pod 所在机器的公网 IP) lesscode.BK_DOMAIN 在应用推广-发布管理中,将应用市场的访问地址类型设置为:主模块生产环境独立域名

lesscode.bkce7.bktencent.com

部署节点管理(bk_nodeman)

注意:节点管理 SaaS 分了 2 个模块,default 和 backend,需要分别部署(先部署 default,后部署 backend)! 步骤比较多,注意操作顺序。

SaaS 包名:bk_nodeman-xxx.tar.gz

在部署之前,均需要在各自模块提前配置以下 3 个环境变量 (注意: 配置一次default模块的变量后,backend的变量可以从default模块导入) 。 Ps:环境变量的作用范围,可以直接选所有环境。

STORAGE_TYPE BLUEKING_ARTIFACTORY
BKAPP_RUN_ENV ce
BKAPP_NODEMAN_CALLBACK_URL http://apps.bkce7.bktencent.com/prod--backend--bk--nodeman/backend

部署成功后,按以下指引做部署后配置:

下载 agent 合集包:下载 http://bkopen-1252002024.file.myqcloud.com/ce7/gse_client_ce_3.6.16.zip 本机解压 zip 包后,

分别上传 agent 包到 bkrepo 中(bkrepo.$BK_DOMAIN 登陆账号密码可以通过: helm status -n blueking bk-repo 获取。先找到 bksaas-addons 项目,节点管理对应的目录(public-bkapp-bk_nod-x > data > bkee > public > bknodeman > download),

每次只能上传一个包,需要分多次上传。
下载 py36 解释器包,部署 gse proxy 安装 gse p-agent 需要用到:http://bkopen-1252002024.file.myqcloud.com/common/py36.tgz 上传到和第一步 agent 的同级目录。 上传基础插件包(bknodeman 的页面上传),文件名为 bk_nodeman-*.tar.gz 。 点击全局配置->gse 环境管理->默认接入点->编辑,相关信息需要用以下命令行获取

zookeeper集群地址:nodePort=32181 参考 kubectl get pod -n blueking -o wide|grep zookeeper 对应的node IP。
zookeeper用户名和密码:helm get values bk-gse-ce -n blueking | grep token
Btserver,dataserver,taskserver的地址,先都填入 127.0.0.1 即可。后台任务一分钟后,根据zk的地址刷新真实的gse 后台服务的地址。
外网回调地址:http://apps.bkce7.bktencent.com/prod--backend--bk--nodeman/backend
agent url: 将默认的 http://bkrepo.$BK_DOMAIN/ 部分换成 http://<node_ip>:30025/(任意node) 后面目录路径保持不变。30025是bkrepo的默认gateway暴露的NodePort,这样可以使用ip来下载,无需配置agent端的域名解析。

域名的方式
http://bkrepo.bkce7.bktencent.com/generic/bksaas-addons/public-bkapp-bk_nod-4/data/bkee/public/bknodeman/download

IP的方式
http://192.168.1.225:30025/generic/bksaas-addons/public-bkapp-bk_nod-4/data/bkee/public/bknodeman/download

C:\WINDOWS\system32\drivers\etc

image-20220330141227881

image-20220330141129728

节点管理安装成功后,可以给蓝鲸集群的 node 机器安装 gse_agent。

(可选)如果存在,则先停掉 gse 部署时自动安装的 gse_agent daemonset 资源 kubectl delete daemonsets.apps bk-gse-agent -n blueking 节点管理上,通过直连区域安装 gse_agent。如果 node 机器上,无法解析 apps.BK_DOMAIN和bkrepo.BK_DOMAIN域名,则需要在 node 机器上配置/etc/hosts 的解析。 apps.BK_DOMAIN 解析到 bk-ingress-controller pod 所在 node 机器 bkrepo.BK_DOMAIN 解析到 ingress-controller pod 所在 node 机器

192.168.1.227 apps.bkce7.bktencent.com
192.168.1.228 bkrepo.bkce7.bktencent.com
192.168.1.228 bkce7.bktencent.com

本地镜像导入

docker save  $(docker images|awk '{print $1":"$2}'|grep -v REPOSITORY|xargs) >/data/master.tar.gz
docker save  $(docker images|awk '{print $1":"$2}'|grep -v REPOSITORY|xargs) >/data/node01.tar.gz
docker save  $(docker images|awk '{print $1":"$2}'|grep -v REPOSITORY|xargs) >/data/node02.tar.gz
docker save  $(docker images|awk '{print $1":"$2}'|grep -v REPOSITORY|xargs) >/data/node03.tar.gz

scp 192.168.1.216:/data/master.tar.gz .
scp 192.168.1.217:/data/node01.tar.gz .
scp 192.168.1.218:/data/node02.tar.gz .
scp 192.168.1.219:/data/node03.tar.gz .


yum -y install sshpass
cat >/root/.ssh/config<<EOF
Host *
    Port 22
    User root
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/nul
EOF

sshpass -p P@sswd scp master.tar.gz 192.168.1.225:/data/
sshpass -p P@sswd scp node01.tar.gz 192.168.1.226:/data/
sshpass -p P@sswd scp node02.tar.gz 192.168.1.227:/data/
sshpass -p P@sswd scp node03.tar.gz 192.168.1.228:/data/

sshpass -p P@sswd ssh 192.168.1.225 "docker load < /data/master.tar.gz"
sshpass -p P@sswd ssh 192.168.1.226 "docker load < /data/node01.tar.gz"
sshpass -p P@sswd ssh 192.168.1.227 "docker load < /data/node02.tar.gz"
sshpass -p P@sswd ssh 192.168.1.228 "docker load < /data/node03.tar.gz"

常用排查命令

kubectl describe pod bk-cmdb-adminserver-54ff698869-vf27t -n blueking
kubectl logs bk-cmdb-adminserver-54ff698869-vf27t -n blueking

[root@linux-bkce-node225 ~]# kubectl get pod bk-user-api-web-854f58b595-dtssg  -n blueking -o yaml >bk-user-api-web.yaml
[root@linux-bkce-node225 ~]# kubectl replace --force -f bk-user-api-web.yaml 
pod "bk-user-api-web-854f58b595-dtssg" deleted
pod/bk-user-api-web-854f58b595-dtssg replaced




节点管理需要检查zk.
kubectl exec -it -n blueking bk-zookeeper-0 -- zkCli.sh
addauth digest bkzk:N9m8iQR11j0K

N9m8iQR11j0K

ls 看看 key:
ls /gse/config/server/btfiles/all
ls /gse/config/server/taskserver/all
ls /gse/config/server/dataserver/all