diff --git a/.github/workflows/module_controller_ci_build_deploy_to_aliyun.yml b/.github/workflows/module_controller_ci_build_deploy_to_aliyun.yml index bea2d6ee3..5125a9ac1 100644 --- a/.github/workflows/module_controller_ci_build_deploy_to_aliyun.yml +++ b/.github/workflows/module_controller_ci_build_deploy_to_aliyun.yml @@ -136,6 +136,37 @@ jobs: exit 1 fi + - name: wait module available + run: | + # 定义要等待的资源名称和字段值 + modulename=$(kubectl get module -o name) + desired_field_value="Available" + + # 定义等待的超时时间(以秒为单位) + timeout_seconds=300 + + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + # 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值 + field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers) + + if [ "$field_value" == "$desired_field_value" ]; then + echo "字段值已满足条件" + exit 0 + else + echo "等待字段值满足条件..." + sleep 5 # 等待一段时间后再次检查 + fi + done + - name: check module run: | podname=$(kubectl get pod -l app=dynamic-stock -o name) @@ -144,4 +175,282 @@ jobs: kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng' kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng/sofa-ark' kubectl exec -it $podname -- sh -c 'grep "dynamic-provider:1.0.0 started" logs/stock-mng/sofa-ark/*.log' - \ No newline at end of file + + - name: scaledown module + run: + kubectl apply -f config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml + + - run: sleep 15 + + - name: not exist module + run: | + moduleCount=$(kubectl get module | wc -l) + if [[ $moduleCount -gt 0 ]]; then + echo "ERROR: module依旧存在" + exit 1 + fi + + - name: Apply moduledeployment scaleup module + run: | + kubectl apply -f config/samples/module-deployment_v1alpha1_moduledeployment_provider.yaml + + - name: get moduledeployment + run: | + kubectl get moduledeployment + + - name: get modulereplicaset + run: | + kubectl get modulereplicaset + + - run: sleep 15 + + - name: get module + run: | + kubectl get module -oyaml + + - name: exist module + run: | + moduleCount=$(kubectl get module | wc -l) + if [[ $moduleCount -lt 1 ]]; then + echo "ERROR: 不存在module" + exit 1 + fi + + - name: scaleup then wait module available + run: | + # 定义要等待的资源名称和字段值 + modulename=$(kubectl get module -o name) + desired_field_value="Available" + + # 定义等待的超时时间(以秒为单位) + timeout_seconds=300 + + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + # 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值 + field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers) + + if [ "$field_value" == "$desired_field_value" ]; then + echo "字段值已满足条件" + exit 0 + else + echo "等待字段值满足条件..." + sleep 5 # 等待一段时间后再次检查 + fi + done + + - name: scaleup then check module + run: | + podname=$(kubectl get pod -l app=dynamic-stock -o name) + kubectl exec -it $podname -- sh -c 'ls -al' + kubectl exec -it $podname -- sh -c 'ls -al logs' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng/sofa-ark' + kubectl exec -it $podname -- sh -c 'grep "dynamic-provider:1.0.0 started" logs/stock-mng/sofa-ark/*.log' + + - name: delete module + run: | + moduleName=$(kubectl get module -o name | cut -d/ -f2) + kubectl delete -n default module $moduleName + + - run: sleep 10 + + - name: delete module then check module is existed + run: | + moduleCount=$(kubectl get module | wc -l) + if [[ $moduleCount -lt 1 ]]; then + echo "ERROR: 不存在module" + exit 1 + fi + + - name: delete then wait module available + run: | + # 定义要等待的资源名称和字段值 + modulename=$(kubectl get module -o name) + desired_field_value="Available" + + # 定义等待的超时时间(以秒为单位) + timeout_seconds=300 + + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + # 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值 + field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers) + + if [ "$field_value" == "$desired_field_value" ]; then + echo "字段值已满足条件" + exit 0 + else + echo "等待字段值满足条件..." + sleep 5 # 等待一段时间后再次检查 + fi + done + + - name: delete module then check module + run: | + podname=$(kubectl get pod -l app=dynamic-stock -o name) + kubectl exec -it $podname -- sh -c 'ls -al' + kubectl exec -it $podname -- sh -c 'ls -al logs' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng/sofa-ark' + kubectl exec -it $podname -- sh -c 'grep "dynamic-provider:1.0.0 started" logs/stock-mng/sofa-ark/*.log' + + - name: delete pod + run: | + podname=$(kubectl get pod -l app=dynamic-stock -o name | cut -d/ -f2) + kubectl delete -n default pod $podname + + - run: sleep 15 + + - name: get pod + run: | + kubectl get pod + + - name: describe pod + run: | + kubectl describe pod + + - name: wait base pod available + run: | + kubectl wait --for=condition=available deployment/dynamic-stock-deployment --timeout=300s + + - run: sleep 15 + + - name: delete pod then wait module available + run: | + # 定义要等待的资源名称和字段值 + modulename=$(kubectl get module -o name) + desired_field_value="Available" + + # 定义等待的超时时间(以秒为单位) + timeout_seconds=300 + + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + # 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值 + field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers) + + if [ "$field_value" == "$desired_field_value" ]; then + echo "字段值已满足条件" + exit 0 + else + echo "等待字段值满足条件..." + sleep 5 # 等待一段时间后再次检查 + fi + done + + - name: delete pod then check module + run: | + podname=$(kubectl get pod -l app=dynamic-stock -o name) + kubectl exec -it $podname -- sh -c 'ls -al' + kubectl exec -it $podname -- sh -c 'ls -al logs' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng' + kubectl exec -it $podname -- sh -c 'ls -al logs/stock-mng/sofa-ark' + kubectl exec -it $podname -- sh -c 'grep "dynamic-provider:1.0.0 started" logs/stock-mng/sofa-ark/*.log' + + - name: scaledown module then delete deployment + run: + kubectl apply -f config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml + + - name: wait module delete + run: | + + timeout_seconds=300 + + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + moduleCount=$(kubectl get module | wc -l) + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + if [[ $moduleCount -lt 1 ]]; then + echo "module已缩容" + exit 0 + else + echo "等待module删除" + sleep 5 + fi + done + + - name: delete deployment + run: | + kubectl delete -n default deployment dynamic-stock-deployment + + - run: sleep 10 + + - name: log module-controller + run: | + podname=$(kubectl get po -l app=module-controller -o name) + kubectl logs $podname + + - name: delete deployment then wait source clean + run: | + timeout_seconds=300 + start_time=$(date +%s) + end_time=$((start_time + timeout_seconds)) + + while true; do + current_time=$(date +%s) + if [ $current_time -gt $end_time ]; then + echo "等待超时" + exit 1 + fi + + moduleCount=$(kubectl get -n default module | wc -l) + moduleReplicaSetCount=$(kubectl get -n default moduleReplicaSet | wc -l) + moduleDeploymentCount=$(kubectl get -n default moduleDeployment | wc -l) + deploymentCount=$(kubectl get -n default deployment dynamic-stock-deployment | wc -l) + + echo deploymentCount is $deploymentCount + echo moduleDeploymentCount is $moduleDeploymentCount + echo moduleReplicaSetCount is $moduleReplicaSetCount + echo moduleCount is $moduleCount + + if [[ $deploymentCount -lt 1 && $moduleCount -lt 1 && $moduleReplicaSetCount -lt 1 && $moduleDeploymentCount -lt 1 ]]; then + echo "所有资源已删除" + exit 0 + else + if [[ $moduleCount -ge 1 ]]; then + echo "等待module删除..." + fi + if [[ $moduleReplicaSetCount -ge 1 ]]; then + echo "等待moduleReplicaSet删除..." + fi + if [[ $moduleDeploymentCount -ge 1 ]]; then + echo "等待moduleDeployment删除..." + fi + if [[ $deploymentCount -ge 1 ]]; then + echo "等待deployment删除..." + fi + sleep 5 + fi + done \ No newline at end of file diff --git a/module-controller/config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml b/module-controller/config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml new file mode 100644 index 000000000..634868de3 --- /dev/null +++ b/module-controller/config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml @@ -0,0 +1,28 @@ +apiVersion: serverless.alipay.com/v1alpha1 +kind: ModuleDeployment +metadata: + labels: + app.kubernetes.io/name: moduledeployment + app.kubernetes.io/instance: moduledeployment-sample + app.kubernetes.io/part-of: module-controller + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/created-by: module-controller + name: moduledeployment-sample-provider +spec: + baseDeploymentName: dynamic-stock-deployment + template: + spec: + module: + name: dynamic-provider + version: '1.0.0' + url: http://serverless-opensource.oss-cn-shanghai.aliyuncs.com/module-packages/stable/dynamic-provider-1.0.0-ark-biz.jar + replicas: 0 + operationStrategy: + needConfirm: false + grayTimeBetweenBatchSeconds: 120 + useBeta: false + batchCount: 1 + upgradePolicy: install_then_uninstall + schedulingStrategy: + schedulingPolicy: scatter +