我正在努力創建一個分布式蝗蟲服務,用于在平臺上進行基準測驗和REST API測驗。架構如下:
- 第一個運行docker鏡像的pod,帶有master標志,用于控制整個程序 。
- 一個運行docker鏡像的pod集合,帶有worker標志,將進行作業(可根據要求的不同而不同)
- 一個運行docker鏡像的pod集合,帶有worker標志。
部署和服務檔案是:
01-locust-master.yamlapiVersion: v1
kind: Service
metadata: 服務
名稱: 蝗蟲大師
標簽:
名稱: locust
規格:
型別: LoadBalancer
選擇器:
name: locust
角色: master
港口:
- port: 8089
協議: TCP
名稱: master-web
- port:5557
協議: TCP
名稱: master-port1
- port:/span> 5558
協議: TCP
名稱: master-port2
---
apiVersion: apps/v1
kind: Deployment
metadata: Deployment
名稱: 蝗蟲-主人
規格:
replicas: 1
模板:
選擇器:
matchLabels:/span>
name: locust
角色: master
模板:
metadata: 元資料:
標簽:/span>
name: locust
角色: master
規格:
集裝箱:
- name:/span> locust
image: locust-image:latest
imagePullPolicy: Always
env:
- name:/span> LOCUST_MODE
值: master
- name:/span> LOCUST_LOCUSTFILE_PATH
value: "/locust-tasks/locustfiles/the_file.py"
- name:/span> LOCUST_TARGET_HOST
value: "the_endpoint"
- name:/span> LOCUST_USERS
value: !!integerEnv 300
- name:LOCUST_SPAWN_RATE
value: !!integerEnv 100
- name:LOCUST_TEST_TIME
value: "5m"/span>
- name:/span> LOCUST_OUTPUT_DIR
value: "/locust-tasks/locust-output"
- name: LOCUST_TEST_API_TOKEN
value: "some_api_topken"
- name: LOCUST_S3_OUTPUT_BUCKET
value: "s3-bucket"
埠:
- containerPort: 8089
- containerPort:/span> 5557
- containerPort:/span> 5558
資源:
限制: 限制:
cpu: 2000m
記憶體: 2048Mi
02-locust-worker.yaml
apiVersion: apps/v1
kind: Deployment
metadata: Deployment
名稱: locust-worker
規格:
復制品: 3
選擇器:
matchLabels:/span>
name: locust
模板:
metadata: 元資料:
標簽:/span>
name: locust
角色: 作業者
規格:
集裝箱:
- name:/span> locust
image: locust:latest
imagePullPolicy: Always
env:
- name:/span> LOCUST_MODE
值: 作業者
- name:/span> LOCUST_MASTER_NODE_HOST
value: locust-master
- name:/span> LOCUST_LOCUSTFILE_PATH
value: "/locust-tasks/locustfiles/the_file.py"
- name:/span> LOCUST_TARGET_HOST
value: "the_endpoint"
- name:/span> LOCUST_TEST_API_TOKEN
value: "the_api_token"
- name: LOCUST_S3_OUTPUT_BUCKET。
value: "s3_bucket"
資源:
限制:
cpu: 1500m
記憶體: 850Mi
請求:
cpu: 1200m
記憶體: 768Mi
DockerFile
FROM python:3.7.3
# install packages
COPY requirements.txt /tmp/
RUN pip install --upgrade pip
RUN p install --requirement /tmp/requirements.txt >。
RUN pip install awscli
# Add locustfiles
COPY common/ /locust-tasks/common/
COPY templates/ /locust-tasks/templates/
COPY locustfiles/ /locust-tasks/locustfiles/
# 設定入口
COPY docker-entrypoint.sh /
RUN chmod x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 555755588089
docker-entrypoint.sh
#!/bin/bash -x
LOCUST_MODE=${LOCUST_MODE:="standalone"}
LOCUST_MASTER=${LOCUST_MASTER:=""}
LOCUST_LOCUSTFILE_PATH=${LOCUST_LOCUSTFILE_PATH:="/locust-tasks/locustfiles/the_file.py"}
LOCUST_TARGET_HOST=${LOCUST_TARGET_HOST:="the_endpoint"}
LOCUST_OUTPUT_DIR=${LOCUST_OUTPUT_DIR:="/locust-tasks/locust-output"}
LOCUST_TEST_API_TOKEN=${LOCUST_TEST_API_TOKEN:="the_token"}
LOCUST_S3_OUTPUT_BUCKET=${LOCUST_S3_OUTPUT_BUCKET:="s3_bucket"}
cd locust-tasks
if [[ ! -e $LOCUST_OUTPUT_DIR ]]; then
mkdir $LOCUST_OUTPUT_DIR
elif [[ ! -d $LOCUST_OUTPUT_DIR ]]; then
echo "$LOCUST_OUTPUT_DIR已經存在但不是一個目錄" 1>&2
fi
LOCUST_PATH="/usr/local/bin/locust"
LOCUST_FLAGS="-f $LOCUST_LOCUSTFILE_PATH LOCUST_FLAGS="-f $LOCUST_LOCUSTFILE_PATH string">--host=$LOCUST_TARGET_HOST --csv=$LOCUST_OUTPUT_DIR/locust-${LOCUST_MODE}"/span>
if [[ "$LOCUST_MODE" = "master" ]] 。 then
LOCUST_FLAGS="$LOCUST_FLAGS --master --headless --u $LOCUST_USERS -r $LOCUST_SPAWN_RATE -t $LOCUST_TEST_TIME"
elif [[ "$LOCUST_MODE" = "worker" ]] ; then
LOCUST_FLAGS="$LOCUST_FLAGS --worker --master-host=$LOCUST_MASTER_NODE_HOST"
fi
auth_token=$LOCUST_TEST_API_TOKEN$LOCUST_PATH $LOCUST_FLAGS
# 拷貝測驗輸出檔案到S3
today=$(date "%Y/%m/%d")
S3_OUTPUT_DIR="s3://${LOCUST_S3_OUTPUT_BUCKET}/${today}/${HOSTNAME}"
echo "從[$LOCUST_OUTPUT_DIR]復制蝗蟲輸出檔案到S3 [$S3_OUTPUT_DIR]"
aws s3 cp --recursive $LOCUST_OUTPUT_DIR $S3_OUTPUT_DIR
retVal=$?
if [ $retVal -ne 0 ]; then
echo "出錯了,退出代碼是 ${retVal}"
FI
exit $retVal
因此,我的要求/想法是運行上面的腳本,之后洗掉整個腳本。但是,我得到的不是這樣,而是無休止地重啟pod:
我的想法是運行上面的腳本,然后洗掉整個東西。
NAME READY STATUS RESTARTS AGE
locust-master-69b4547ddf-7fl4d 11 Running 4 23m
locust-worker-59b9689857-l5jhw 11 Running 4 23m
locust-worker-59b9689857-l5nd2 11 Running 4 23m
locust-worker-59b9689857-lwqbb 11 Running 4 23m
所以我的問題是。我怎樣才能在shellscript結束后洗掉這兩個部署?
非常感謝您的幫助。
非常感謝您!
uj5u.com熱心網友回復:
我想你正在尋找職位。
隨著pod的成功完成,Job會跟蹤成功的 完成的情況。當成功完成的指定數量達到 時,該任務(即作業)就完成了。洗掉一個任務將清理 它所創建的 Pod。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319480.html
標籤:
