AWS EKS ์คํฐ๋ 3์ฃผ์ฐจ - Storage
- kkumtree
2023-05-12T05:36:38+09:00
์ด๋ฒ ์ฃผ์ฐจ์๋ ์คํ ๋ฆฌ์ง์ ๋ํด ์ค์ต์ ์งํํด๋ณด์์ต๋๋ค. ์ง๋๋ฒ kOps ์คํฐ๋์์ ๋ค๋ฃจ์๋ ๋ด์ฉ์ด์ง๋ง, ๋ถ์กฑํ๋ ๋ด์ฉ์ ๋ณด์ถฉํ๋ฉด์ ์์ฑ์ ํด๋ณด์์ต๋๋ค.
์ฃผ์ํ ๋ด์ฉ์…
- NodeAffinity๋ฅผ ์ด์ฉํ ๋ผ๋ฒจ๋ง
- AWS EBS controller์ ๊ฒฝ์ฐ, AWS managed policy๋ฅผ ํ์ฉ
- AWS Volume SnapShots Controller๋ฅผ ํตํ ๋ณผ๋ฅจ ๋ฐฑ์
- AWS EFS controller์์์ ๋์ ํ๋ก๋น์ ๋
- AWS EKS ์ ๊ท ๋ ธ๋๊ทธ๋ฃน ์์ฑ
๋ณ๋๋ก kube-ops-view์ ๊ฒฝ์ฐ, ์น์ผ๋ก ํ์ธํ ์ ์์ ๋๊น์ง ์๊ฐ์ด ์์๋๋ค๋ ์ ์ด ์์ต๋๋ค.
1. ์ค์ต ํ๊ฒฝ ๋ฐฐํฌ
- 2์ฃผ์ฐจ์ ์ค์ตํ๋ ๋ด์ฉ๋ค์ ๋ฏธ๋ฆฌ ๋ฐฐํฌ
- AWS LB
- ExternalDNS
- kube-ops-view
- context ์ด๋ฆ ๋ณ๊ฒฝ
- ์ง๋ ๋ฒ๊น์ง pkos๊ฐ ๋จ๋ ํ์์ด ์์๋๋ฐ, ๋๋ค์์ ๋ณ๋ ์ง์ ํ ์ ์์
- EFS ์์ฑ ๊ด๋ จ cloudformation์ด ์ถ๊ฐ๋์์
- EFS FS ID ์กฐํ๋ฅผ ํ๊ธฐ ์ํด aws-cli ํํฐ ํ์ฉ (์ถ์ฒ: AWS Docs)
# ์ค์ต YAML ํ์ผ
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick2.yaml
# cloudformation ์คํ ์์ฑ
aws cloudformation deploy --template-file eks-oneclick2.yaml --stack-name myeks --parameter-overrides KeyName=aews SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 MyIamUserAccessKeyID=AKIA5... MyIamUserSecretAccessKey=CVNa2... ClusterBaseName=myeks --region ap-northeast-2
ssh -i ~/.ssh/aews.pem ec2-user@$(aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[0].OutputValue' --output text)
# default ๋ค์์คํ์ด์ค ์ ์ฉ
kubectl ns default
# (์ต์
) context ์ด๋ฆ ๋ณ๊ฒฝ
NICK=kkumtree
kubectl ctx
kubectl config rename-context [email protected] $NICK@myeks
# EFS ํ์ธ : AWS ๊ด๋ฆฌ์ฝ์ EFS ํ์ธ
EfsFsId=$(aws efs describe-file-systems --query 'FileSystems[*].FileSystemId' --output text)
echo $EfsFsId
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport $EfsFsId.efs.ap-northeast-2.amazonaws.com:/ /mnt/myefs
df -hT --type nfs4
mount | grep nfs4
echo "Test efs exist with file " > /mnt/myefs/memo.txt
cat /mnt/myefs/memo.txt
rm -f /mnt/myefs/memo.txt
# ์คํ ๋ฆฌ์งํด๋์ค ๋ฐ CSI ๋
ธ๋ ํ์ธ
kubectl get sc
kubectl get sc gp2 -o yaml | yh
kubectl get csinodes
# ๋
ธ๋ ์ ๋ณด ํ์ธ
kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone
eksctl get iamidentitymapping --cluster myeks
# ๋
ธ๋ IP ํ์ธ ๋ฐ PrivateIP ๋ณ์ ์ง์
N1=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2a -o jsonpath={.items[0].status.addresses[0].address})
N2=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2b -o jsonpath={.items[0].status.addresses[0].address})
N3=$(kubectl get node --label-columns=topology.kubernetes.io/zone --selector=topology.kubernetes.io/zone=ap-northeast-2c -o jsonpath={.items[0].status.addresses[0].address})
echo "export N1=$N1" >> /etc/profile
echo "export N2=$N2" >> /etc/profile
echo "export N3=$N3" >> /etc/profile
echo $N1, $N2, $N3
# ๋
ธ๋ ๋ณด์๊ทธ๋ฃน ID ํ์ธ
NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=*ng1* --query "SecurityGroups[*].[GroupId]" --output text)
aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr 192.168.1.100/32
# ์์ปค ๋
ธ๋ SSH ์ ์
ssh ec2-user@$N1 hostname
ssh ec2-user@$N2 hostname
ssh ec2-user@$N3 hostname
# ๋
ธ๋์ ํด ์ค์น
ssh ec2-user@$N1 sudo yum install links tree jq tcpdump sysstat -y
ssh ec2-user@$N2 sudo yum install links tree jq tcpdump sysstat -y
ssh ec2-user@$N3 sudo yum install links tree jq tcpdump sysstat -y
# AWS LB, ExternalDNS ์ค์น
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=$CLUSTER_NAME \
--set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
# ExternalDNS
MyDomain=awskops.click
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}." --query "HostedZones[0].Id" --output text)
echo $MyDomain, $MyDnzHostedZoneId
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml
MyDomain=$MyDomain MyDnzHostedZoneId=$MyDnzHostedZoneId envsubst < externaldns.yaml | kubectl apply -f -
1-1. kube-ops-view
- ์๊ฐ์ ์ผ๋ก ํ์ฌ k8s์ ์ํ๋ฅผ ๋ณผ ์ ์๋ ํด
- ์๋๋ ์ค ์์๋๋ฐ, ๋ทฐ์ด๊ฐ ๋ฐ ๋๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ด์์.
