大量更新
This commit is contained in:
228
999-部署模板/视频流媒体-helm-2604/deploy.sh
Normal file
228
999-部署模板/视频流媒体-helm-2604/deploy.sh
Normal file
@@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CMII Live Services (Merged) Helm 部署脚本
|
||||
# 特性: WVP + ZLM + ZLM-OSS 合并部署,使用 HostNetwork 模式访问
|
||||
# live-op | live-proxy | live-helper node port 模式访问
|
||||
# ============================说明=====================================
|
||||
# 如果你不需要使用此脚本文件,直接使用 helm install/upgrade ${release_name} . -n ${namespace_name} 启动
|
||||
# 或者 kubectl apply -f templates/** 创建
|
||||
# =====================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量 (***配置namespace & releaseName)
|
||||
RELEASE_NAME="helm-live"
|
||||
NAMESPACE="uavcloud-live-test"
|
||||
CHART_PATH="$(cd "$(dirname "$0")" && pwd)"
|
||||
VALUES_FILE="${CHART_PATH}/values.yaml"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
echo_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
echo_step() {
|
||||
echo -e "${BLUE}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查前置条件
|
||||
check_prerequisites() {
|
||||
echo_step "检查前置条件..."
|
||||
|
||||
# 检查 kubectl
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo_error "kubectl 未安装,请先安装 kubectl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 helm
|
||||
if ! command -v helm &> /dev/null; then
|
||||
echo_error "helm 未安装,请先安装 helm 3.x"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 Kubernetes 连接
|
||||
if ! kubectl cluster-info &> /dev/null; then
|
||||
echo_error "无法连接到 Kubernetes 集群,请检查 kubeconfig 配置"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_info "前置条件检查通过"
|
||||
}
|
||||
|
||||
# 创建命名空间
|
||||
create_namespace() {
|
||||
echo_step "创建命名空间: ${NAMESPACE}"
|
||||
kubectl create namespace ${NAMESPACE} --dry-run=client -o yaml | kubectl apply -f -
|
||||
}
|
||||
|
||||
# 验证配置文件
|
||||
validate_config() {
|
||||
echo_step "验证配置文件..."
|
||||
|
||||
if [ ! -f "${VALUES_FILE}" ]; then
|
||||
echo_error "配置文件不存在: ${VALUES_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查必要配置 - 外部依赖必须填写
|
||||
for field in "external.database.host" "external.redis.host" "external.minio.endpoint" "external.rabbitmq.host"; do
|
||||
if grep -q "${field}: \"\"" "${VALUES_FILE}" || grep -q "${field}: ''" "${VALUES_FILE}"; then
|
||||
echo_error "请在 values.yaml 中配置 ${field}"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo_info "配置文件验证通过"
|
||||
}
|
||||
|
||||
# 渲染模板(用于调试)
|
||||
render_templates() {
|
||||
echo_step "渲染 Helm 模板..."
|
||||
helm template ${RELEASE_NAME} "${CHART_PATH}" -n ${NAMESPACE} -f "${VALUES_FILE}" > /tmp/rendered-merged.yaml
|
||||
echo_info "模板已渲染到: /tmp/rendered-merged.yaml"
|
||||
}
|
||||
|
||||
# 安装或升级
|
||||
install_or_upgrade() {
|
||||
echo_step "部署服务..."
|
||||
|
||||
# 检查是否已存在 release
|
||||
if helm status ${RELEASE_NAME} -n ${NAMESPACE} &> /dev/null; then
|
||||
echo_info "检测到已存在的 release,执行升级..."
|
||||
helm upgrade ${RELEASE_NAME} "${CHART_PATH}" \
|
||||
--namespace "${NAMESPACE}" \
|
||||
--values "${VALUES_FILE}" \
|
||||
--timeout 10m
|
||||
else
|
||||
echo_info "执行全新安装..."
|
||||
helm install "${RELEASE_NAME}" "${CHART_PATH}" \
|
||||
--namespace "${NAMESPACE}" \
|
||||
--values "${VALUES_FILE}" \
|
||||
--timeout 10m \
|
||||
--create-namespace
|
||||
fi
|
||||
|
||||
echo_info "部署完成!"
|
||||
}
|
||||
|
||||
# 等待 Pod 就绪
|
||||
wait_for_pods() {
|
||||
echo_step "等待 Pod 就绪..."
|
||||
|
||||
echo_info "等待 Media Suite Pod (包含 WVP + ZLM + ZLM-OSS)..."
|
||||
kubectl wait --for=condition=ready pod \
|
||||
-l app=media-suite \
|
||||
-n "${NAMESPACE}" \
|
||||
--timeout=600s || {
|
||||
echo_warn "Media Suite Pod 可能未就绪,请手动检查"
|
||||
}
|
||||
|
||||
echo_info "等待其他服务 Pod..."
|
||||
kubectl wait --for=condition=ready pod \
|
||||
-l release="${RELEASE_NAME}" \
|
||||
-n "${NAMESPACE}" \
|
||||
--timeout=300s || {
|
||||
echo_warn "部分 Pod 可能未就绪,请手动检查"
|
||||
}
|
||||
}
|
||||
|
||||
# 显示状态
|
||||
show_status() {
|
||||
echo_step "服务状态:"
|
||||
echo ""
|
||||
helm status "${RELEASE_NAME}" -n "${NAMESPACE}"
|
||||
echo ""
|
||||
echo_info "Pod 列表:"
|
||||
kubectl get pods -n "${NAMESPACE}" -l release="${RELEASE_NAME}"
|
||||
echo ""
|
||||
echo_info "Service 列表:"
|
||||
kubectl get svc -n "${NAMESPACE}" -l release="${RELEASE_NAME}"
|
||||
echo ""
|
||||
|
||||
# 获取节点 IP
|
||||
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' 2>/dev/null || echo "<NODE_IP>")
|
||||
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "服务访问地址"
|
||||
echo_info "========================================="
|
||||
echo_info "Media Suite (HostNetwork 模式):"
|
||||
echo " WVP HTTP: http://${NODE_IP}:$(grep 'http:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " WVP SIP: ${NODE_IP}:$(grep 'sip:' "${VALUES_FILE}" | head -1 | awk '{print $2}')/UDP"
|
||||
echo " ZLM HTTP: http://${NODE_IP}:$(grep 'http:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM RTMP: rtmp://${NODE_IP}:$(grep 'rtmp:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM RTSP: rtsp://${NODE_IP}:$(grep 'rtsp:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM-OSS: http://${NODE_IP}:$(grep 'port:' "${VALUES_FILE}" | grep -A1 'zlmOss' | tail -1 | awk '{print $2}')"
|
||||
echo ""
|
||||
echo_info "其他服务 (NodePort 模式):"
|
||||
echo " Live Operator: http://${NODE_IP}:$(grep 'liveOpNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
echo " Live Proxy: http://${NODE_IP}:$(grep 'liveProxyNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
echo " Live Helper: http://${NODE_IP}:$(grep 'liveHelperNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
}
|
||||
|
||||
# 显示日志查看命令
|
||||
show_log_commands() {
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "日志查看命令"
|
||||
echo_info "========================================="
|
||||
echo_info "Media Suite 容器日志:"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c wvp"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c zlm"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c zlm-oss"
|
||||
echo ""
|
||||
echo_info "其他服务日志:"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-op -n ${NAMESPACE}"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-proxy -n ${NAMESPACE}"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-helper -n ${NAMESPACE}"
|
||||
}
|
||||
|
||||
# 显示卸载命令
|
||||
show_uninstall_command() {
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "卸载命令"
|
||||
echo_info "========================================="
|
||||
echo " helm uninstall ${RELEASE_NAME} -n ${NAMESPACE}"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo_info "========================================="
|
||||
echo_info "CMII Live Services (Merged) Helm 部署"
|
||||
echo_info "WVP + ZLM + ZLM-OSS 合并部署模式"
|
||||
echo_info "========================================="
|
||||
echo ""
|
||||
|
||||
check_prerequisites
|
||||
validate_config
|
||||
create_namespace
|
||||
install_or_upgrade
|
||||
wait_for_pods
|
||||
show_status
|
||||
show_log_commands
|
||||
show_uninstall_command
|
||||
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "部署完成!"
|
||||
echo_info "========================================="
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user