fischer-agentkit/deploy/offline/scripts/install.sh

69 lines
2.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# install.sh — 离线安装 AgentKit加载镜像 + helm install
# 用法bash install.sh [DIST_DIR] [NAMESPACE] [RELEASE_NAME]
# 前置:已将 dist/ 拷贝到离线集群节点,节点已安装 docker + helm + kubectl。
set -euo pipefail
DIST_DIR="${1:-dist}"
NAMESPACE="${2:-agentkit}"
RELEASE="${3:-agentkit}"
SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "${SCRIPT_DIR}"
echo "==> 检查依赖"
for cmd in docker helm kubectl; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "ERROR: ${cmd} 未安装" >&2
exit 1
fi
done
if [ ! -d "${DIST_DIR}" ]; then
echo "ERROR: 产物目录不存在:${DIST_DIR}" >&2
echo " 请先在联网环境执行 make all并将 dist/ 拷贝到本节点。" >&2
exit 1
fi
# 1) 加载镜像 tarball
IMAGE_TARBALL="$(ls "${DIST_DIR}"/agentkit-image-*.tar.gz 2>/dev/null | head -1 || true)"
if [ -z "${IMAGE_TARBALL}" ]; then
echo "ERROR: 镜像 tarball 未找到(${DIST_DIR}/agentkit-image-*.tar.gz" >&2
exit 1
fi
echo "==> 加载镜像:${IMAGE_TARBALL}"
gunzip -c "${IMAGE_TARBALL}" | docker load
# 列出刚加载的镜像(便于校验 tag
LOADED_IMAGE="$(docker images --format '{{.Repository}}:{{.Tag}}' | grep agentkit | head -1)"
echo " 已加载:${LOADED_IMAGE}"
# 2) helm install
CHART_TGZ="$(ls "${DIST_DIR}"/agentkit-*.tgz 2>/dev/null | grep -v agentkit-image | head -1 || true)"
if [ -z "${CHART_TGZ}" ]; then
echo "ERROR: chart tgz 未找到(${DIST_DIR}/agentkit-*.tgz" >&2
exit 1
fi
echo "==> 创建 namespace${NAMESPACE}"
kubectl get namespace "${NAMESPACE}" >/dev/null 2>&1 || \
kubectl create namespace "${NAMESPACE}"
echo "==> helm install${RELEASE} (namespace=${NAMESPACE})"
helm upgrade --install "${RELEASE}" "${CHART_TGZ}" \
--namespace "${NAMESPACE}" \
--set image.repository="$(echo "${LOADED_IMAGE}" | cut -d: -f1)" \
--set image.tag="$(echo "${LOADED_IMAGE}" | cut -d: -f2)" \
--set image.pullPolicy=Never # 离线本地镜像Never 强制使用已加载的本地镜像
echo "==> 等待 rollout"
# DEPLOY-1: 用标签选择器定位 Deployment — fullname 在 release 名包含 chart 名时
# 仅返回 release 名(如 release=agentkit → Deployment=agentkit其他情况返回
# release-chart如 release=myprod → myprod-agentkit。硬编码 "${RELEASE}-agentkit"
# 在默认 release=agentkit 时拼出不存在的 agentkit-agentkit。改用 instance 标签。
kubectl rollout status deployment -l app.kubernetes.io/instance="${RELEASE}" -n "${NAMESPACE}" --timeout=300s || \
echo "WARN: rollout 未在 300s 内完成,请检查 pod 状态kubectl get pods -n ${NAMESPACE}"
echo "==> 完成。验证:"
echo " kubectl get pods -n ${NAMESPACE}"
echo " kubectl get ingress -n ${NAMESPACE}"
echo " helm status ${RELEASE} -n ${NAMESPACE}"