diff --git a/README.md b/README.md index 9110b2abe4e7d04a8c99fd82de840b6147410f5a..a5fc6263430489a832987a27516b6158d9a6dc98 100644 --- a/README.md +++ b/README.md @@ -207,11 +207,9 @@ Gala提供了集成式部署工具[Gala-Deploy-Tools](./deploy)以便用户快 ### 约束限制 -1. 当前本工具仅支持如下OS版本:openEuler 20.03 LTS SP1(x86)、openEuler 22.03 LTS、openEuler 22.03 LTS SP1、Kylin V10(x86) +1. 当前本工具仅支持如下OS版本:openEuler 20.03 LTS SP1(x86)、openEuler 22.03 LTS、openEuler 22.03 LTS SP1、Kylin V10 SP1(x86)、Kylin V10 SP3(x86) 2. 在线部署模式下,本工具运行过程中会从openEuler repo源安装rpm或者从外网下载源码资源,因此内网环境在使用工具前需要提前配置好代理,便于访问外网环境,工具使用结束后建议将代理取消。 -3. 在线部署模式下,gala-gopher、gala-ops组件支持rpm包部署以及容器部署两种方式,其中gala-ops组件的rpm包部署方式仅支持openEuler 22.03 LTS SP1 版本。 4. 离线部署模式下,离线安装包及其依赖包需要从外网下载,因此内网环境需要提前配置好代理,便于访问外网环境,工具使用结束后建议将代理取消。 -5. 离线部署模式下,gala-gopher组件支持rpm包部署以及容器部署两种方式,gala-ops组件支持容器部署方式。 ### 环境准备说明 @@ -246,7 +244,7 @@ sh download_offline_res.sh middleware [os_arch] - os_arch: 指定下载该架构的安装包。未配置该项时,使用当前系统架构。支持架构列表:aarch64 x86_64 -注:由于kafka运行依赖java,因此下载kafka安装包时也会同时下载java-1.8.0-openjdk及其依赖包;arangodb组件需要下载容器镜像tar包,因此下载机器上需要安装docker组件。* +注:由于kafka运行依赖java,因此下载kafka安装包时也会同时下载java-1.8.0-openjdk及其依赖包;arangodb组件需要下载容器镜像tar包,因此下载机器上需要安装docker组件。 2. 工具一键部署 @@ -269,53 +267,51 @@ sh deploy.sh middleware -K <部署节点管理IP> -P -p -S <离线安装包所在目录> ``` -2. gala-gopher容器镜像方式部署 -```xml -sh deploy.sh gopher -K -p -S <离线安装包所在目录> --docker + +- K8S daemonset方式部署(适用于集群) + +``` +sh deploy.sh gopher -K -p -S <离线安装包所在目录> --k8s ``` 选项详细说明: -| 选项 | 参数说明 | 是否必配 | -| :-------------: |:-----------------------------------------------------------------------------------------:| :------------: | -| -K\|--kafka | 指定gala-gopher上报采集数据的目标kakfa服务器地址(一般来说是管理节点的IP),当不配置该选项时,kafka服务器地址使用localhost | 否 | +| 选项 | 参数说明 | 是否必配 | +| :-------------: | :----------------------------------------------------------: | :------------: | +| -K\|--kafka | 指定gala-gopher上报采集数据的目标kakfa服务器地址(一般来说是管理节点的IP),当不配置该选项时,kafka服务器地址使用localhost | 否 | | -p\|--pyroscope | 指定gala-gopher开启火焰图功能后火焰图上传到的pyroscope服务器地址(用于对接前端界面显示)(一般来说是管理节点的IP),当不配置该选项时,pyroscope服务器地址使用localhost | 否 | -| -S\|--srcdir | 离线部署时使用该选项来指定gala-gopher以及其依赖包所在的目录 | 离线部署时必配 | -| --docker | 指定以 docker 方式部署 gala-gopher | 否 | +| -S\|--srcdir | 离线部署时使用该选项来指定gala-gopher以及其依赖包所在的目录 | 离线部署时必配 | +| --k8s | 指定以daemonset方式在k8s集群内部署 gala-gopher | 否 | #### 管理节点:部署gala-ops @@ -405,18 +401,20 @@ sh deploy.sh middleware -K <部署节点管理IP> -P -p ``` -2. 容器镜像方式: +2. K8S daemonset方式部署(适用于集群) ```css -sh deploy.sh gopher -K -p --docker +sh deploy.sh gopher -K -p --k8s ``` +**注:daemonset方式需要在k8s集群的master节点执行** + #### 管理节点:部署gala-ops gala-ops组件支持rpm、容器镜像两种部署方式,部署时需要指定kafka、prometheus、arangodb服务器地址,当不指定时,这些中间件的地址默认使用localhost。 diff --git a/deploy/comm.sh b/deploy/comm.sh index b1da3d10775fbb6cab053313700cc8c8b9f164c9..fd22d09a06d6c3e6562809bd9b687e87a8c80e2d 100644 --- a/deploy/comm.sh +++ b/deploy/comm.sh @@ -6,6 +6,29 @@ DASHBOARD_LIST=( "JVM Metrics.json" "System Flame.json" ) +function config_docker() { + if ! grep "^INSECURE_REGISTRY" /etc/sysconfig/docker | grep -q "${DOCKER_HUB}" ; then + cat >> /etc/sysconfig/docker << EOF +INSECURE_REGISTRY='--insecure-registry ${DOCKER_HUB}' +EOF + systemctl daemon-reload + systemctl restart docker || echo_err_exit "Error: fail to configure docker" + fi +} + +function docker_pull_image() { + tag_name="$1" + + if ! docker --version >/dev/null 2>&1 ; then + echo_warn "Docker cmd not found, try installing docker firstly" + yum install docker -y + [ $? -ne 0 ] && echo_err_exit "Error: fail to install docker" + fi + config_docker + docker pull ${DOCKER_HUB_TAG_PREFIX}/"${tag_name}" + [ $? -ne 0 ] && echo_err_exit "Error: failed to pull docker image:" $tag_name +} + function yum_download() { rpm="$@" repo_path="" @@ -33,9 +56,11 @@ download_grafana_dashboard() { download_dir=$1 for ele in "${DASHBOARD_LIST[@]}" do - echo $ele + echo $ele wget "https://gitee.com/openeuler/gala-docs/raw/master/grafana/dashboard/${ele}" \ -O "${download_dir}/${ele}" --no-check-certificate [ $? -ne 0 ] && echo_err_exit "Failed to download ${ele}" done -} \ No newline at end of file +} + + diff --git a/deploy/deploy.sh b/deploy/deploy.sh index cb5ef71d354be60401aec79e99202bb12ed240fa..23ac143a7459da2e30b820f63fd6261db9af17e9 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -35,6 +35,13 @@ ARANGODB_ADDR="localhost:${ARANGODB_PORT}" PYROSCOPE_ADDR="localhost:${PYROSCOPE_PORT}" PROMETHEUS_SCRAPE_LIST="" +GOPHER_PROBES_INIT=' +baseinfo {"cmd":{"probe":["cpu","mem","nic","net","disk","fs","proc","host"]},"snoopers":{"proc_name":[{"comm":"^java$","cmdline":""}]},"params":{"report_event":1,"report_period":60},"state":"running"} +tcp {"cmd":{"probe":["tcp_abnormal","tcp_rtt","tcp_windows","tcp_srtt","tcp_rate","tcp_stats","tcp_delay"]},"snoopers":{"proc_name":[{"comm":"^java$","cmdline":""}]},"params":{"report_event":1,"report_period":60},"state":"running"} +io {"cmd":{"probe":["io_trace","io_err","io_count","page_cache"]},"params":{"report_event":1,"report_period":30},"state":"running"} +socket {"cmd":{"probe":["tcp_socket","udp_socket"]},"snoopers":{"proc_name":[{"comm":"java$","cmdline":""}]},"params":{"report_event":1,"report_period":30},"state":"running"} +proc {"cmd":{"probe":["base_metrics","proc_syscall","proc_fs","proc_io","proc_dns","proc_pagecache"]},"snoopers":{"proc_name":[{"comm":"^java$","cmdline":""}]},"params":{"report_period":30},"state":"running"} +jvm {"cmd":{},"snoopers":{"proc_name":[{"comm":"^java$","cmdline":""}]},"params":{"report_period":30},"state":"running"}' #=======Common Utils========# function echo_err_exit() { @@ -57,8 +64,7 @@ function print_usage() { echo " gopher|ops|middleware|opengauss|grafana" echo "" echo "gopher options:" - echo " [-K|--kafka ] [-p|--pyroscope ] [--docker]" - echo " [--proxy]" + echo " [-K|--kafka ] [-p|--pyroscope ] [--k8s]" echo "" echo "ops options:" echo " [-K|--kafka ] [-P|--prometheus ] [-A|--arangodb ]" @@ -185,17 +191,6 @@ function install_rpm() { fi } -function config_docker() { - if ! grep "^INSECURE_REGISTRY" /etc/sysconfig/docker | grep -q "${DOCKER_HUB}" ; then - cat >> /etc/sysconfig/docker << EOF -INSECURE_REGISTRY='--insecure-registry ${DOCKER_HUB}' -EOF - systemctl daemon-reload - systemctl restart docker || echo_err_exit "Error: fail to configure docker" - fi -} - - function docker_load_image_file() { image_tarfile="$1" @@ -205,15 +200,6 @@ function docker_load_image_file() { [ $? -ne 0 ] && echo_err_exit "Error: failed to load docker image:" $image_tarfile } -function docker_pull_image() { - tag_name="$1" - - docker --version >/dev/null 2>&1 || echo_err_exit "Error: Docker cmd not found, please install docker firstly" - config_docker - docker pull ${DOCKER_HUB_TAG_PREFIX}/"${tag_name}" - [ $? -ne 0 ] && echo_err_exit "Error: failed to pull docker image:" $tag_name -} - #=======openGauss Server Deployment=======# OPNEGAUSS_DEPLOY_SCRIPT='./opengauss/create_master_slave.sh' @@ -340,18 +326,17 @@ function deploy_opengauss_server() { #=======Gopher Deployment=======# GOPHER_CONF='/etc/gala-gopher/gala-gopher.conf' -GOPHER_APP_CONF='/etc/gala-gopher/gala-gopher-app.conf' -PG_STAT_CONF='/etc/gala-gopher/extend_probes/pg_stat_probe.conf' -STACKPROBE_CONF='/etc/gala-gopher/extend_probes/stackprobe.conf' function parse_arg_gopher() { - ARGS=`getopt -a -o K:p:S: --long kafka:,pyroscope:,docker,srcdir: -- "$@"` + GALA_DEPLOY_MODE="docker" + KAFKA_ADDR="localhost" + ARGS=`getopt -a -o K:p:S: --long kafka:,pyroscope:,k8s,srcdir: -- "$@"` [ $? -ne 0 ] && (print_usage; exit 1) eval set -- "${ARGS}" while true do case $1 in -K|--kafka) - KAFKA_ADDR=$(addr_add_port $2 ${KAFKA_PORT}) + KAFKA_ADDR=$2 shift;; -p|--pyroscope) PYROSCOPE_ADDR=$(addr_add_port $2 ${PYROSCOPE_PORT}) @@ -360,8 +345,8 @@ function parse_arg_gopher() { DEPLOY_TYPE="local" LOCAL_DEPLOY_SRCDIR=$(realpath $2) shift;; - --docker) - GALA_DEPLOY_MODE="docker" + --k8s) + GALA_DEPLOY_MODE="k8s" ;; --) shift @@ -374,182 +359,71 @@ function parse_arg_gopher() { done } -download_gopher_deps() { - DOWNLOAD_DIR=$1 - - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-20.03-LTS-SP3/update/${OS_ARCH}/Packages/libbpf-0.3-4.oe1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/flamegraph-1.0-1.oe2203sp1.noarch.rpm ${DOWNLOAD_DIR} - gala_wget http://121.36.84.172/dailybuild/openEuler-20.03-LTS-SP1/openEuler-20.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/cadvisor-0.37.0-2.oe1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP1/everything/${OS_ARCH}/Packages/cjson-1.7.15-1.oe2203sp1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget http://121.36.84.172/dailybuild/openEuler-20.03-LTS-SP1/openEuler-20.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/python3-libconf-2.0.1-1.oe1.noarch.rpm ${DOWNLOAD_DIR} -} - -download_gopher() { - echo_info "- Download gala-gopher rpm" - DOWNLOAD_DIR=$1 - - if ! cat /etc/yum.conf | grep -q 'sslverify=false' ; then - echo 'sslverify=false' >> /etc/yum.conf - fi +function deploy_gopher_docker() { + container_name="gala-gopher" + gopher_tag="gala-gopher-${OS_ARCH}:${GOPHER_DOCKER_TAG}" - if [ "$OS_VERSION" == "openEuler-22.03-LTS-SP1" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2203sp1/openeuler-22.03_LTS_SP1-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe2203sp1.*${OS_ARCH}.rpm) - elif [ "$OS_VERSION" == "openEuler-22.03-LTS" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2203/openeuler-22.03_LTS_SP1-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe2203.*${OS_ARCH}.rpm) - elif [ "$OS_VERSION" == "openEuler-20.03-LTS-SP1" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2003sp1/openeuler-20.03_LTS_SP3-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe1.*${OS_ARCH}.rpm) - download_gopher_deps ${DOWNLOAD_DIR} - elif [ "$OS_VERSION" == "kylin" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-kylin/openeuler-20.03_LTS_SP3-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*ky10.*${OS_ARCH}.rpm) - download_gopher_deps ${DOWNLOAD_DIR} - else - echo_err_exit "Unsupported openEuler version, aborting!" - fi + echo -e "\n[2] Creating gala-gopher container" + docker stop ${container_name} 2>/dev/null ; docker rm ${container_name} 2>/dev/null + GOPHER_PROBES_INIT="${GOPHER_PROBES_INIT}"' +flamegraph {"cmd":{"probe":["oncpu"]},"snoopers":{"proc_name":[{"comm":"^java$","cmdline":""}]},"params":{"pyroscope_server":"'${PYROSCOPE_ADDR}'","multi_instance":1},"state":"running"} +' + docker run -d --name ${container_name} --privileged \ + -v /:/host -v /etc/localtime:/etc/localtime:ro -v /sys:/sys \ + -v /usr/lib/debug:/usr/lib/debug -v /var/lib/docker:/var/lib/docker \ + -e GOPHER_KAKFA_SERVER="${KAFKA_ADDR}" -e GOPHER_HOST_PATH="/host" \ + -e GOPHER_PROBES_INIT="${GOPHER_PROBES_INIT}" \ + --pid=host --network=host ${DOCKER_HUB_TAG_PREFIX}/"${gopher_tag}" + [ $? -ne 0 ] && echo_err_exit "Error: fail to run gala-gopher container" } -function deploy_gopher_rpm() { - echo -e "[1] Installing gala-gopher" - if [ "$DEPLOY_TYPE" == "local" ]; then - install_rpm_local_repo gala-gopher +GOPHER_DAEMONSET_YAML="${WORKING_DIR}/gala-gopher-daemonset.yaml" +function deploy_gopher_daemonset() { + echo_warn "NOTE: You MUST be on master node of k8s cluster!" + echo -e "\n[2] Downloading template of gala-gopher daemonset yaml" + if [ "$DEPLOY_TYPE" == "local" ] ; then + [ ! -f "$LOCAL_DEPLOY_SRCDIR/daemonset.yaml.tmpl" ] && echo_err_exit "Failed to find daemonset yaml template" + mv -f ./daemonset.yaml.tmpl ${GOPHER_DAEMONSET_YAML} else - mkdir -p ${WORKING_DIR}/gala-gopher-rpms - download_gopher ${WORKING_DIR}/gala-gopher-rpms - if [ "$OS_VERSION" == "openEuler-22.03-LTS-SP1" ] || [ "$OS_VERSION" == "openEuler-22.03-LTS" ] ; then - install_rpm_remote_repo $gopher_local_rpm - else - install_rpm log4cplus - install_rpm python3-requests - install_rpm python3-psycopg2 - install_rpm python3-yaml - install_rpm librdkafka - install_rpm libmicrohttpd - yum install ${WORKING_DIR}/gala-gopher-rpms/python3-libconf-2.0.1-1.oe1.noarch.rpm \ - ${WORKING_DIR}/gala-gopher-rpms/cadvisor-0.37.0-2.oe1.${OS_ARCH}.rpm \ - ${WORKING_DIR}/gala-gopher-rpms/flamegraph-1.0-1.oe2203sp1.noarch.rpm \ - ${WORKING_DIR}/gala-gopher-rpms/libbpf-0.3-4.oe1.${OS_ARCH}.rpm \ - $gopher_local_rpm -y + if [ ! -f ./daemonset.yaml.tmpl ] ; then + wget https://gitee.com/openeuler/gala-gopher/raw/dev/k8s/daemonset.yaml.tmpl --no-check-certificate + [ $? -ne 0 ] && echo_err_exit "Error: fail to download daemonset yaml template from official website, check proxy!" fi + mv -f ./daemonset.yaml.tmpl ${GOPHER_DAEMONSET_YAML} fi - echo -e "\n[2] Configuring gala-gopher" - # kafka broker - sed -i "s#kafka_broker =.*#kafka_broker = \"${KAFKA_ADDR}\"#g" ${GOPHER_CONF} - - # pg_stat_probe.conf - line=$(grep -n ' -' ${PG_STAT_CONF} | head -1 | cut -f1 -d':') - sed -i "$((line+1)),\$d" ${PG_STAT_CONF} - cat >> ${PG_STAT_CONF} << EOF - ip: "172.11.0.101" - port: "5432" - dbname: "postgres" - user: "opengauss_exporter" - password: "opengauss_exporter123" -EOF - - # add guassdb to app whitelist - if ! grep -q 'comm = "gaussdb"' ${GOPHER_APP_CONF} ; then - sed -i "/^(/a\ \t{\n\t\tcomm = \"gaussdb\",\n\t\tcmdline = \"\";\n\t}," ${GOPHER_APP_CONF} - fi - - # stackprobe.conf - sed -i "/name = \"stackprobe\"/{n;n;n;s/switch =.*/switch = \"on\"/g;}" ${GOPHER_CONF} - sed -i "s/pyroscope_server.*/pyroscope_server = \"${PYROSCOPE_ADDR}\";/g" ${STACKPROBE_CONF} - - echo -e "\n[3] Starting gala-gopher service" - systemctl restart gala-gopher || echo_err_exit "Error: fail to start gala-gopher.service" -} - -function prepare_docker_gopher_conf() { - mkdir -p /opt/gala/gopher_conf/extend_probes - - if [ "$DEPLOY_TYPE" != "local" ] ; then - wget https://gitee.com/openeuler/gala-gopher/raw/master/config/gala-gopher.conf \ - -O /opt/gala/gopher_conf/gala-gopher.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher.conf" - - wget https://gitee.com/openeuler/gala-gopher/raw/master/config/gala-gopher-app.conf \ - -O /opt/gala/gopher_conf/gala-gopher-app.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher-app.conf" - - wget https://gitee.com/openeuler/gala-gopher/raw/master/src/probes/extends/ebpf.probe/src/stackprobe/conf/stackprobe.conf \ - -O /opt/gala/gopher_conf/extend_probes/stackprobe.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher stackprobe.conf" - else - \cp -f $LOCAL_DEPLOY_SRCDIR/gala-gopher.conf /opt/gala/gopher_conf/gala-gopher.conf - \cp -f $LOCAL_DEPLOY_SRCDIR/gala-gopher-app.conf /opt/gala/gopher_conf/gala-gopher-app.conf - \cp -f $LOCAL_DEPLOY_SRCDIR/stackprobe.conf /opt/gala/gopher_conf/extend_probes/stackprobe.conf - fi + echo -e "\n[3] Configuring gala-gopher daemonset yaml" + sed -i "s/{{KAFKA_SERVER}}/${KAFKA_ADDR}/g" ${GOPHER_DAEMONSET_YAML} + sed -i "s/{{ARCH}}/${OS_ARCH}/g" ${GOPHER_DAEMONSET_YAML} + sed -i "s/{{TAG}}/${GOPHER_DOCKER_TAG}/g" ${GOPHER_DAEMONSET_YAML} + + echo_warn "\n[4] Executing following steps manually" + echo_warn "1) Upload docker image: ${DOCKER_HUB_TAG_PREFIX}/gala-gopher-${OS_ARCH}:${GOPHER_DOCKER_TAG} to your own hub" + echo_warn "2) Edit "image" in ${GOPHER_DAEMONSET_YAML} according to the result of step 1)" + echo_warn "3) Edit <> in ${GOPHER_DAEMONSET_YAML} based on the situation of your cluster, or you can simply edit it to \"default\"" + echo_warn "4) (optional) Customize ${GOPHER_DAEMONSET_YAML} refering to guide: https://gitee.com/openeuler/gala-gopher/tree/dev/k8s#%E5%AE%9A%E5%88%B6daemonset-yaml%E6%96%87%E4%BB%B6" + echo_warn "5) Running command:\"kubectl apply -f ${GOPHER_DAEMONSET_YAML}\"" } -function deploy_gopher_docker() { - container_name="gala-gopher" - gopher_tag="gala-gopher-${OS_ARCH}:${GOPHER_DOCKER_TAG}" +function deploy_gopher() { + echo_info "======Deploying gala-gopher(${GALA_DEPLOY_MODE})======" if [ "$DEPLOY_TYPE" == "local" ] ; then docker_load_image_file "$LOCAL_DEPLOY_SRCDIR/gala-gopher-${OS_ARCH}:${GOPHER_DOCKER_TAG}.tar" else echo -e "[1] Pulling/Loading gala-gopher docker image for ${GOPHER_DOCKER_TAG}" - docker_pull_image "${gopher_tag}" - fi - - echo -e "\n[2] Configuring gala-gopher" - prepare_docker_gopher_conf - # kafka broker - sed -i "s#kafka_broker =.*#kafka_broker = \"${KAFKA_ADDR}\"#g" /opt/gala/gopher_conf/gala-gopher.conf - - # pg_stat_probe.conf - cat > /opt/gala/gopher_conf/extend_probes/pg_stat_probe.conf << EOF -servers: - - - ip: "172.11.0.101" - port: "5432" - dbname: "postgres" - user: "opengauss_exporter" - password: "opengauss_exporter123" -EOF - # add guassdb to app whitelist - if ! grep -q 'comm = "gaussdb"' /opt/gala/gopher_conf/gala-gopher-app.conf ; then - sed -i "/^(/a\ \t{\n\t\tcomm = \"gaussdb\",\n\t\tcmdline = \"\";\n\t}," /opt/gala/gopher_conf/gala-gopher-app.conf + docker_pull_image "gala-gopher-${OS_ARCH}:${GOPHER_DOCKER_TAG}" fi - # stackprobe.conf - sed -i "/name = \"stackprobe\"/{n;n;n;s/switch =.*/switch = \"on\"/g;}" /opt/gala/gopher_conf/gala-gopher.conf - sed -i "s/pyroscope_server.*/pyroscope_server = \"${PYROSCOPE_ADDR}\";/g" /opt/gala/gopher_conf/extend_probes/stackprobe.conf - - echo -e "\n[3] Creating gala-gopher container" - # Stop gala-gopher service to prevent port conflict - systemctl stop gala-gopher 2>/dev/null - docker stop ${container_name} 2>/dev/null ; docker rm ${container_name} 2>/dev/null - docker run -d --name ${container_name} --privileged \ - -v /etc/os-release:/etc/os-release:ro -v /etc/localtime:/etc/localtime:ro \ - -v /sys:/sys -v /boot:/boot:ro -v /usr/lib/debug:/usr/lib/debug \ - -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker \ - -v /opt/gala/gopher_conf/:/gala-gopher/user_conf/ -v /:/host \ - --pid=host --network=host ${DOCKER_HUB_TAG_PREFIX}/"${gopher_tag}" - [ $? -ne 0 ] && echo_err_exit "Error: fail to run gala-gopher container" -} - -function deploy_gopher() { - echo_info "======Deploying gala-gopher(${GALA_DEPLOY_MODE})======" - if [ "x${GALA_DEPLOY_MODE}" == "xrpm" ] ; then - deploy_gopher_rpm - elif [ "x${GALA_DEPLOY_MODE}" == "xdocker" ] ; then + if [ "x${GALA_DEPLOY_MODE}" == "xdocker" ] ; then deploy_gopher_docker + elif [ "x${GALA_DEPLOY_MODE}" == "xk8s" ] ; then + deploy_gopher_daemonset else echo_err_exit "Unsupported deploy mode, must be rpm or docker" fi - echo_info "======Deploying gala-gopher Done!======" } - #=======Ops Deployment=======# ANTEATER_CONF='/etc/gala-anteater/config/gala-anteater.yaml' SPIDER_CONF='/etc/gala-spider/gala-spider.yaml' @@ -638,7 +512,7 @@ function deploy_ops_docker() { echo -e "[1] Pulling gala-spider/gala-inference/gala-anteater docker image" spider_tag="gala-spider-${OS_ARCH}:1.0.1" infer_tag="gala-inference-${OS_ARCH}:1.0.1" - anteater_tag="gala-anteater-${OS_ARCH}:1.0.1" + anteater_tag="gala-anteater-${OS_ARCH}:latest" if [ "$DEPLOY_TYPE" == "local" ] ; then docker_load_image_file "$LOCAL_DEPLOY_SRCDIR/gala-spider-${OS_ARCH}.tar" @@ -699,6 +573,7 @@ function deploy_ops() { #=======Middleware Deployment=======# middleware_deploy_list="" +middleware_install_dir="/opt" function parse_arg_middleware() { ARGS=`getopt -a -o K:P:E:S:Ap --long kafka:,prometheus:,elastic:,arangodb,pyroscope,srcdir: -- "$@"` [ $? -ne 0 ] && (print_usage; exit 1) @@ -740,7 +615,7 @@ function parse_arg_middleware() { } KAFKA_VERSION='kafka_2.13-2.8.2' -KAFKA_WORKDIR="/opt/${KAFKA_VERSION}/" +KAFKA_WORKDIR="${middleware_install_dir}/${KAFKA_VERSION}/" function deploy_kafka() { echo -e "[-] Deploy kafka" echo -e "Installing..." @@ -759,7 +634,7 @@ function deploy_kafka() { [ $? -ne 0 ] && echo_err_exit "Error: fail to download kafka tarball from official website, check proxy!" fi fi - tar xzf ${KAFKA_LOCAL_TARBALL} -C /opt + tar xzf ${KAFKA_LOCAL_TARBALL} -C ${middleware_install_dir} fi echo -e "Configuring..." @@ -824,7 +699,7 @@ EOF systemctl restart prometheus.service || echo_err_exit "Error: fail to start prometheus.service" } -function deploy_arangodb_docker() { +function deploy_arangodb() { container_name="gala-arangodb" if [ $(getconf PAGE_SIZE) -gt 4096 ] ; then echo_err_exit "Arangodb not supported on systems whose PAGE SIZE larger than 4096" @@ -849,36 +724,6 @@ function deploy_arangodb_docker() { [ $? -ne 0 ] && echo_err_exit "Error: fail to run arangodb container" } -ARANGODB_CONF='/etc/arangodb3/arangod.conf' -function deploy_arangodb() { - echo -e "[-] Deploy arangodb" - if [ "${GALA_DEPLOY_MODE}" == "docker" ] || [ "$DEPLOY_TYPE" == "local" ] ; then - deploy_arangodb_docker - return - fi - - if [ ${OS_ARCH} != 'x86_64' ] ; then - echo_err_exit "Arangodb only available on x86_64 in rpm mode, try deploying with docker" - deploy_arangodb_docker - return - fi - - if [ "$OFFICIAL_RELEASE" == "no" ] ; then - echo_warn "arangodb deployment in rpm mode is not supported on $OS_VERSION, try deploying with docker" - deploy_arangodb_docker - return - fi - - echo -e "Installing..." - install_rpm arangodb3 - - echo -e "Configuring..." - sed -i 's/authentication =.*/authentication = false/g' ${ARANGODB_CONF} - - echo -e "Starting..." - systemctl restart arangodb3.service || echo_err_exit "Error: fail to start arangodb3 service" -} - function deploy_elasticsearch() { echo_info "======Deploying Elasticsearch======" echo -e "[1] Downloading es tarball" @@ -1036,7 +881,7 @@ function deploy_pyroscope() { fi if which pyroscope >/dev/null; then - nohup pyroscope server & + nohup PYROSCOPE_RETENTION=72h pyroscope server & return fi @@ -1052,9 +897,7 @@ function deploy_pyroscope() { fi yum install ${PYROSCOPE_LOCAL_RPM} -y || echo_err_exit "Error: fail to install $PYROSCOPE_LOCAL_RPM" - - export PYROSCOPE_RETENTION=72h - nohup pyroscope server & + nohup PYROSCOPE_RETENTION=72h pyroscope server & } function deploy_middleware() { @@ -1339,6 +1182,42 @@ function detect_openEuler_version() { fi } +function detect_kylin_version() { + [ ${OS_ARCH} != "x86_64" ] && echo_err_exit "Unsupported on Kylin aarch64" + + OS_VERSION="$OS_TYPE" + OFFICIAL_RELEASE="no" + kylin_milestone=$(cat /etc/.kyinfo | grep '^milestone=' | awk -F "=" '{print $2}') + if [[ "$kylin_milestone" =~ "10-SP1" ]] ; then + REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS" + GOPHER_DOCKER_TAG="kylin-v10-sp1" + elif [[ "$kylin_milestone" =~ "10-SP3" ]] ; then + REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS-SP3" + GOPHER_DOCKER_TAG="kylin-v10-sp3" + else + echo_err_exit "Unsupported Kylin version, aborting!" + fi +} + +function detect_euleros_version() { + OS_VERSION="$OS_TYPE" + OFFICIAL_RELEASE="no" + + eulerversion=$(cat /etc/euleros-latest | grep '^eulerversion=' | awk -F "=" '{print $2}') + if [[ "$eulerversion" =~ "V200R008" ]] ; then + REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS-SP1" + GOPHER_DOCKER_TAG="euleros-v2r8" + elif [[ "$eulerversion" =~ "V200R009" ]] ; then + REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS-SP1" + GOPHER_DOCKER_TAG="euleros-v2r9" + elif [[ "$eulerversion" =~ "V200R010" ]] ; then + REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS-SP1" + GOPHER_DOCKER_TAG="euleros-v2r10" + else + echo_err_exit "Unsupported euleros version, aborting!" + fi +} + function detect_os() { OS_TYPE=$(cat /etc/os-release | grep '^ID=' | awk -F '\"' '{print $2}') [ -z "$OS_TYPE" ] && echo_err_exit "Unsupport OS type, aborting!" @@ -1346,15 +1225,9 @@ function detect_os() { if [ "x$OS_TYPE" == "xopenEuler" ] ; then detect_openEuler_version elif [ "x$OS_TYPE" == "xkylin" ] ; then - [ ${OS_ARCH} != "x86_64" ] && echo_err_exit "Unsupported on Kylin aarch64" - OS_VERSION="$OS_TYPE" - REMOTE_REPO_PREFIX="$REMOTE_REPO_PREFIX/openEuler-20.03-LTS" - OFFICIAL_RELEASE="no" - GOPHER_DOCKER_TAG="kylin-v10" + detect_kylin_version elif [ "x$OS_TYPE" == "xeuleros" ] ; then - # TODO: support euleros - OS_VERSION="$OS_TYPE" - echo_err_exit "Unsupport OS type, aborting" + detect_euleros_version else echo_err_exit "Unsupport OS type, aborting" fi diff --git a/deploy/download_offline_res.sh b/deploy/download_offline_res.sh index 501df1192c934ba694182425680b8d06c1aed943..6a6674162b5c20f8dd68cda2bee837c87626ef3c 100755 --- a/deploy/download_offline_res.sh +++ b/deploy/download_offline_res.sh @@ -18,7 +18,6 @@ REMOTE_REPO_PREFIX="" REMOTE_ALIYUN_REPO_PREFIX="http://mirrors.aliyun.com/openeuler" EPOL_REPO="" EPOL_UPDATE_REPO="" -GOPHER_DOWNLOAD_MODE="rpm" function echo_err_exit() { echo -e "\e[31m $@ \e[0m" @@ -77,38 +76,14 @@ function install_rpm() { [ $? -ne 0 ] && echo_err_exit "Error: failed to install $rpm, please check repo!" } -function config_docker() { - if ! grep "^INSECURE_REGISTRY" /etc/sysconfig/docker | grep -q "${DOCKER_HUB}" ; then - cat >> /etc/sysconfig/docker << EOF -INSECURE_REGISTRY='--insecure-registry ${DOCKER_HUB}' -EOF - systemctl daemon-reload - systemctl restart docker || echo_err_exit "Error: fail to configure docker" - fi -} - -function docker_pull_image() { - tag_name="$1" - - if ! docker --version >/dev/null 2>&1 ; then - echo_warn "Docker cmd not found, try installing docker firstly" - yum install docker -y - [ $? -ne 0 ] && echo_err_exit "Error: fail to install docker" - fi - config_docker - docker pull ${DOCKER_HUB_TAG_PREFIX}/"${tag_name}" - [ $? -ne 0 ] && echo_err_exit "Error: failed to pull docker image:" $tag_name -} - - download_ops_image() { echo_info "- Download gala-anteater docker image" if [ ! -f ${DOWNLOAD_DIR}/gala-anteater-${OS_ARCH}.tar ] ; then echo " [1] Executing \"docker pull ${DOCKER_HUB_TAG_PREFIX}/gala-anteater-${OS_ARCH}\"" - docker_pull_image "gala-anteater-${OS_ARCH}:1.0.1" + docker_pull_image "gala-anteater-${OS_ARCH}:latest" - echo " [2] Executing \"docker save -o ${DOWNLOAD_DIR}/gala-anteater-${OS_ARCH}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-anteater-${OS_ARCH}:1.0.1\"" - docker save -o ${DOWNLOAD_DIR}/gala-anteater-${OS_ARCH}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-anteater-${OS_ARCH}:1.0.1 + echo " [2] Executing \"docker save -o ${DOWNLOAD_DIR}/gala-anteater-${OS_ARCH}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-anteater-${OS_ARCH}:latest\"" + docker save -o ${DOWNLOAD_DIR}/gala-anteater-${OS_ARCH}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-anteater-${OS_ARCH}:latest fi echo_info "- Download gala-spider docker image" @@ -216,59 +191,6 @@ download_grafana_image() { download_grafana_dashboard ${DOWNLOAD_DIR} } -download_gopher_deps() { - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-20.03-LTS-SP3/update/${OS_ARCH}/Packages/libbpf-0.3-4.oe1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/flamegraph-1.0-1.oe2203sp1.noarch.rpm ${DOWNLOAD_DIR} - gala_wget http://121.36.84.172/dailybuild/openEuler-20.03-LTS-SP1/openEuler-20.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/cadvisor-0.37.0-2.oe1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget https://mirrors.aliyun.com/openeuler/openEuler-22.03-LTS-SP1/everything/${OS_ARCH}/Packages/cjson-1.7.15-1.oe2203sp1.${OS_ARCH}.rpm ${DOWNLOAD_DIR} - gala_wget http://121.36.84.172/dailybuild/openEuler-20.03-LTS-SP1/openEuler-20.03-LTS-SP1/EPOL/main/${OS_ARCH}/Packages/python3-libconf-2.0.1-1.oe1.noarch.rpm ${DOWNLOAD_DIR} - yum_download log4cplus \ - python3-requests \ - python3-psycopg2 \ - python3-pyyaml \ - librdkafka \ - libmicrohttpd \ - net-tools \ - bpftool \ - libconfig -} - -download_gopher() { - echo_info "- Download gala-gopher rpm" - gopher_local_rpm="" - - if ! cat /etc/yum.conf | grep -q 'sslverify=false' ; then - echo 'sslverify=false' >> /etc/yum.conf - fi - - if [ "$OS_VERSION" == "openEuler-22.03-LTS-SP1" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2203sp1/openeuler-22.03_LTS_SP1-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe2203sp1.*${OS_ARCH}.rpm) - yum_download $gopher_local_rpm - elif [ "$OS_VERSION" == "openEuler-22.03-LTS" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2203/openeuler-22.03_LTS_SP1-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe2203.*${OS_ARCH}.rpm) - yum_download $gopher_local_rpm - elif [ "$OS_VERSION" == "openEuler-20.03-LTS-SP1" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-oe2003sp1/openeuler-20.03_LTS_SP3-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*oe1.*${OS_ARCH}.rpm) - download_gopher_deps - elif [ "$OS_VERSION" == "kylin" ] ; then - yumdownloader --repofrompath="gala_eur,https://eur.openeuler.openatom.cn/results/Vchanger/gala-kylin/openeuler-20.03_LTS_SP3-${OS_ARCH}/" gala-gopher \ - --destdir=${DOWNLOAD_DIR} -b - gopher_local_rpm=$(ls ${DOWNLOAD_DIR}/gala-gopher*ky10.*${OS_ARCH}.rpm) - download_gopher_deps - else - echo_err_exit "Unsupported openEuler version, aborting!" - fi - - install_rpm createrepo - createrepo ${DOWNLOAD_DIR} -} - # get gopher image tag by os_version get_gopher_image_tag() { if [ "x$OS_TYPE" == "xopenEuler" ] ; then @@ -279,8 +201,8 @@ get_gopher_image_tag() { else #openEuler-20.03-LTS-SP1 echo "20.03-lts-sp1" fi - else #kylin - echo "kylin-v10" + else + echo "${OS_VERSION}" fi } @@ -293,20 +215,9 @@ download_gopher_image() { echo " [2] Executing \"docker save -o ${DOWNLOAD_DIR}/gala-gopher-${OS_ARCH}:${tag}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-gopher-${OS_ARCH}:${tag}\"" docker save -o ${DOWNLOAD_DIR}/gala-gopher-${OS_ARCH}:${tag}.tar ${DOCKER_HUB_TAG_PREFIX}/gala-gopher-${OS_ARCH}:${tag} - - echo " [3] download gala-gopher conf file" - wget https://gitee.com/openeuler/gala-gopher/raw/master/config/gala-gopher.conf \ - -O ${DOWNLOAD_DIR}/gala-gopher.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher.conf" - - wget https://gitee.com/openeuler/gala-gopher/raw/master/config/gala-gopher-app.conf \ - -O ${DOWNLOAD_DIR}/gala-gopher-app.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher-app.conf" - - wget https://gitee.com/openeuler/gala-gopher/raw/master/src/probes/extends/ebpf.probe/src/stackprobe/conf/stackprobe.conf \ - -O ${DOWNLOAD_DIR}/stackprobe.conf --no-check-certificate - [ $? -ne 0 ] && echo_err_exit "Failed to download gala-gopher stackprobe.conf" fi + + gala_wget https://gitee.com/openeuler/gala-gopher/raw/dev/k8s/daemonset.yaml.tmpl ${DOWNLOAD_DIR} } # use OS_TYPE OS_VERSION config yum repo @@ -323,8 +234,14 @@ function config_remote_repo() { fi elif [ "x$OS_TYPE" == "xkylin" ] ; then [ ${OS_ARCH} != "x86_64" ] && echo_err_exit "Unsupported on Kylin aarch64" - - OS_VERSION="$OS_TYPE" + if [ "$OS_VERSION" == "kylin-v10-sp1" ] ; then + REMOTE_REPO_PREFIX="$REMOTE_ALIYUN_REPO_PREFIX/openEuler-20.03-LTS-SP1" + elif [ "$OS_VERSION" == "kylin-v10-sp3" ] ; then + REMOTE_REPO_PREFIX="$REMOTE_ALIYUN_REPO_PREFIX/openEuler-22.03-LTS-SP3" + else + echo_err_exit "Unsupported Kylin version, aborting!" + fi + elif [ "x$OS_TYPE" == "xeuleros" ] ; then REMOTE_REPO_PREFIX="$REMOTE_ALIYUN_REPO_PREFIX/openEuler-20.03-LTS-SP1" else echo_err_exit "Unsupport OS type, aborting" @@ -342,13 +259,18 @@ function detect_os() { function config_os_version_type() { os_version="$1" - os_arch="$2" + os_arch="${2:-$(uname -m)}" - if [ $os_version == "kylin" ];then + if [[ $os_version =~ "kylin" ]] ; then OS_TYPE="kylin" - else + elif [[ $os_version =~ "openEuler" ]] ; then OS_TYPE="openEuler" + elif [[ $os_version =~ "euleros" ]] ; then + OS_TYPE="euleros" + else + echo_err_exit "Unsupport OS type, aborting" fi + OS_VERSION=$os_version if [ $os_arch == "aarch64" ] || [ $os_arch == "x86_64" ]; then @@ -358,28 +280,12 @@ function config_os_version_type() { fi } -# download gopher have four param format -# 1. download gopher -# 2. download gopher docker -# 3. download gopher version arch -# 4. download gopher version arch docker function parse_arg_gopher() { - if [ $# -gt 4 ];then + if [ $# -gt 3 ];then echo_err_exit "download gopher param err" fi - if [ $2 != "docker" ] ;then - if [ $# -eq 3 ] ; then - config_os_version_type $2 $3 - elif [ $# -eq 4 ] && [ $4 == "docker" ] ; then - config_os_version_type $2 $3 - GOPHER_DOWNLOAD_MODE="docker" - else - echo_err_exit "download gopher param err" - fi - else - GOPHER_DOWNLOAD_MODE="docker" - fi + config_os_version_type $2 $3 config_remote_repo } @@ -451,9 +357,5 @@ if [[ "${DOWNLOAD_COMPONENT_LIST}" =~ "ops" ]] ; then fi if [[ "${DOWNLOAD_COMPONENT_LIST}" =~ "gopher" ]] ; then - if [ $GOPHER_DOWNLOAD_MODE == "rpm" ] ; then - download_gopher - else - download_gopher_image - fi + download_gopher_image fi