directory 구조 변경
This commit is contained in:
11
README.md
Normal file
11
README.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# public-ds-cluster-env
|
||||||
|
aws 환경 구축 시 사용하는 파일을 정리한다.
|
||||||
|
|
||||||
|
## directory 구조
|
||||||
|
1. docs: 문서파일 저장.
|
||||||
|
2. architecture : aws 구성도
|
||||||
|
3. aws_image : aws AMI 이미지 생성
|
||||||
|
4. aws_kubernetes : aws kubernetes 생성 (kops)
|
||||||
|
5. aws_network : aws network 구성 (terraform)
|
||||||
|
6. aws_total : aws 백업 파일 (kops)
|
||||||
|
7. script : support script
|
||||||
Binary file not shown.
41
scripts/kops_env/kops_env.sh
Executable file
41
scripts/kops_env/kops_env.sh
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export KOPS_STATE_STORE=s3://clusters.spot.datasaker.io
|
||||||
|
export KOPS_CLUSTER_NAME=k8s-spot.datasaker.io
|
||||||
|
|
||||||
|
export VPC_ID="vpc-00ba2b0e9ad59f0ed "
|
||||||
|
export Network_CIDR="172.24.0.0/19"
|
||||||
|
export AMI_Image="ami-0abb33b73a78cae31"
|
||||||
|
export Private_Subnet_ID_1="subnet-024f0deda82039fa4"
|
||||||
|
export Private_Subnet_ID_2="subnet-050d942fa1c46540a"
|
||||||
|
export Private_Subnet_ID_3="subnet-0946eb806af7377be"
|
||||||
|
export Public_Subnet_ID_1="subnet-00c363356f133411d"
|
||||||
|
export Public_Subnet_ID_2="subnet-07aa5e879a262014d"
|
||||||
|
export Public_Subnet_ID_3="subnet-0073a61bc56a68a3e"
|
||||||
|
|
||||||
|
kops_cmd="""
|
||||||
|
kops create cluster \
|
||||||
|
--vpc "$VPC_ID" \
|
||||||
|
--cloud aws \
|
||||||
|
--ssh-public-key "$HOME/.ssh/id_rsa.pub" \
|
||||||
|
--topology private --kubernetes-version "1.25.2" \
|
||||||
|
--network-cidr "$Network_CIDR" \
|
||||||
|
--networking calico \
|
||||||
|
--container-runtime containerd \
|
||||||
|
--image $AMI_Image \
|
||||||
|
--zones ap-northeast-2a,ap-northeast-2b,ap-northeast-2c \
|
||||||
|
--master-count 3 \
|
||||||
|
--master-size t3.small \
|
||||||
|
--node-count 3 \
|
||||||
|
--node-size t3.small \
|
||||||
|
--node-volume-size 100 \
|
||||||
|
--subnets "$Private_Subnet_ID_1,$Private_Subnet_ID_2,$Private_Subnet_ID_3" \
|
||||||
|
--utility-subnets "$Public_Subnet_ID_1,$Public_Subnet_ID_2,$Public_Subnet_ID_3" \
|
||||||
|
-v 10
|
||||||
|
"""
|
||||||
|
|
||||||
|
kubeconfig="kops export kubecfg --admin --kubeconfig $HOME/.kube/config --name=${KOPS_CLUSTER_NAME} --state=${KOPS_STATE_STORE}"
|
||||||
|
echo ${kubeconfig}
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
echo ${kops_cmd}
|
||||||
102
scripts/spot_lambda/lambda_restart.sh
Executable file
102
scripts/spot_lambda/lambda_restart.sh
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 변수 선언
|
||||||
|
echo_line="=========================================================================="
|
||||||
|
search_tag="spot"
|
||||||
|
stop_function="spot_stop"
|
||||||
|
start_function="spot_start"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# aws 인스턴스 조회
|
||||||
|
_get_aws_status (){
|
||||||
|
aws_query="Reservations[].Instances[].[ InstanceId, Tags[?Key=='Name'].Value|[0] ]"
|
||||||
|
aws_filter="Name=instance-state-name,Values=running"
|
||||||
|
current_ec2_num=`aws ec2 describe-instances --query "${aws_query}" --filter ${aws_filter} --output text | grep ${search_tag} | wc -l`
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# log 출력
|
||||||
|
_get_time_log (){
|
||||||
|
datetime=`date +'%Y-%m-%d %H:%M:%S'`
|
||||||
|
string=$1
|
||||||
|
echo "[${datetime}] ${string}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# aws lambda 실행 후 인스턴스 조회하여 성공/실패 여부 체크
|
||||||
|
|
||||||
|
_main (){
|
||||||
|
lambda_function=$1
|
||||||
|
echo ${echo_line}
|
||||||
|
if [[ ${lambda_fuction} == *"stop"* ]]; then
|
||||||
|
what_func='stop'
|
||||||
|
else
|
||||||
|
what_func='start'
|
||||||
|
fi
|
||||||
|
|
||||||
|
_get_time_log "[INFO] aws lambda ${lambda_function} start"
|
||||||
|
|
||||||
|
aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json > /tmp/aws_func_result
|
||||||
|
#echo "aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json"
|
||||||
|
|
||||||
|
succ_flag=0
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if [[ $line == *"200"* ]]; then
|
||||||
|
succ_flag=1
|
||||||
|
_get_time_log "[INFO] aws lambda ${lambda_function} success!"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
succ_flag=0
|
||||||
|
fi
|
||||||
|
done < /tmp/aws_func_result
|
||||||
|
|
||||||
|
if [[ ${succ_flag} == 1 ]]; then
|
||||||
|
aws lambda invoke --function-name ${lambda_function} out --log-type Tail --query 'LogResult' --output text | base64 -d > /tmp/aws_func_output
|
||||||
|
if [[ ${what_func} == 'stop' ]]; then
|
||||||
|
final_ec2_num=0
|
||||||
|
else
|
||||||
|
final_ec2_num=`grep "Starting" /tmp/aws_func_output | wc -l`
|
||||||
|
fi
|
||||||
|
|
||||||
|
num=0
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
_get_aws_status
|
||||||
|
num=`echo $(( $num + 1 ))`
|
||||||
|
if [[ ${current_ec2_num} == ${final_ec2_num} ]]; then
|
||||||
|
_get_time_log "[INFO] aws ${search_tag} instance number: ${final_ec2_num} check success!"
|
||||||
|
break
|
||||||
|
elif [[ ${num} == 30 ]]; then
|
||||||
|
_get_time_log "[Error] time out!"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
_get_time_log "[Retry: ${num}] aws ${search_tag} instance number: ${final_ec2_num} checking..."
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo ${echo_line}
|
||||||
|
_get_time_log "[Error] aws lambda ${lambda_function} failed!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
echo ${echo_line}
|
||||||
|
#---------------
|
||||||
|
|
||||||
|
}
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 실행
|
||||||
|
|
||||||
|
_main ${stop_function}
|
||||||
|
|
||||||
|
_main ${start_function}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 임시 파일 삭제
|
||||||
|
|
||||||
|
unlink out
|
||||||
|
unlink response.json
|
||||||
|
unlink /tmp/aws_func_output
|
||||||
|
unlink /tmp/aws_func_result
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
100
scripts/spot_lambda/lambda_stop.sh
Executable file
100
scripts/spot_lambda/lambda_stop.sh
Executable file
@@ -0,0 +1,100 @@
|
|||||||
|
if [ -z "$BASH_VERSION" ]; then exec bash "$0" "$@"; exit; fi
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 변수 선언
|
||||||
|
echo_line="=========================================================================="
|
||||||
|
search_tag="spot"
|
||||||
|
stop_function="spot_stop"
|
||||||
|
start_function="spot_start"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# aws 인스턴스 조회
|
||||||
|
_get_aws_status (){
|
||||||
|
aws_query="Reservations[].Instances[].[ InstanceId, Tags[?Key=='Name'].Value|[0] ]"
|
||||||
|
aws_filter="Name=instance-state-name,Values=running"
|
||||||
|
current_ec2_num=`aws ec2 describe-instances --query "${aws_query}" --filter ${aws_filter} --output text | grep ${search_tag} | wc -l`
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# log 출력
|
||||||
|
_get_time_log (){
|
||||||
|
datetime=`date +'%Y-%m-%d %H:%M:%S'`
|
||||||
|
string=$1
|
||||||
|
echo "[${datetime}] ${string}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# aws lambda 실행 후 인스턴스 조회하여 성공/실패 여부 체크
|
||||||
|
|
||||||
|
_main (){
|
||||||
|
lambda_function=$1
|
||||||
|
echo ${echo_line}
|
||||||
|
if [[ ${lambda_fuction} == *"stop"* ]]; then
|
||||||
|
what_func='stop'
|
||||||
|
else
|
||||||
|
what_func='start'
|
||||||
|
fi
|
||||||
|
|
||||||
|
_get_time_log "[INFO] aws lambda ${lambda_function} start"
|
||||||
|
|
||||||
|
aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json > /tmp/aws_func_result
|
||||||
|
#echo "aws lambda invoke --function-name ${lambda_function} --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json"
|
||||||
|
|
||||||
|
succ_flag=0
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if [[ $line == *"200"* ]]; then
|
||||||
|
succ_flag=1
|
||||||
|
_get_time_log "[INFO] aws lambda ${lambda_function} success!"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
succ_flag=0
|
||||||
|
fi
|
||||||
|
done < /tmp/aws_func_result
|
||||||
|
|
||||||
|
if [[ ${succ_flag} == 1 ]]; then
|
||||||
|
aws lambda invoke --function-name ${lambda_function} out --log-type Tail --query 'LogResult' --output text | base64 -d > /tmp/aws_func_output
|
||||||
|
if [[ ${what_func} == 'stop' ]]; then
|
||||||
|
final_ec2_num=0
|
||||||
|
else
|
||||||
|
final_ec2_num=`grep "Starting" /tmp/aws_func_output | wc -l`
|
||||||
|
fi
|
||||||
|
|
||||||
|
num=0
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
_get_aws_status
|
||||||
|
num=`echo $(( $num + 1 ))`
|
||||||
|
if [[ ${current_ec2_num} == ${final_ec2_num} ]]; then
|
||||||
|
_get_time_log "[INFO] aws ${search_tag} instance number: ${final_ec2_num} check success!"
|
||||||
|
break
|
||||||
|
elif [[ ${num} == 30 ]]; then
|
||||||
|
_get_time_log "[Error] time out!"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
_get_time_log "[Retry: ${num}] aws ${search_tag} instance number: ${final_ec2_num} checking..."
|
||||||
|
fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo ${echo_line}
|
||||||
|
_get_time_log "[Error] aws lambda ${lambda_function} failed!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
echo ${echo_line}
|
||||||
|
#---------------
|
||||||
|
|
||||||
|
}
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 실행
|
||||||
|
|
||||||
|
_main ${stop_function}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
|
# 임시 파일 삭제
|
||||||
|
|
||||||
|
unlink out
|
||||||
|
unlink response.json
|
||||||
|
unlink /tmp/aws_func_output
|
||||||
|
unlink /tmp/aws_func_result
|
||||||
|
#----------------------------------------------------------------------------------------------------------------
|
||||||
Reference in New Issue
Block a user