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์ ์ํ๋ฅผ ๋ณผ ์ ์๋ ํด
- ์๋๋ ์ค ์์๋๋ฐ, ๋ทฐ์ด๊ฐ ๋ฐ ๋๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ด์์.

AWS EKS ์คํฐ๋ 2์ฃผ์ฐจ - Network
- kkumtree
2023-05-07T07:30:52+09:00
# ์์ฝ๊ฒ๋ ์ ๊ท ํญ๋ชฉ์ธ istio, kube-ops-view๋ ์ค์ต ์คํจ
- istio: `myhome.yaml` ์ ์ด๋ป๊ฒ ์์ฑํ ์ง ๋ชฐ๋ผ์ ์ค๋จ
- kube-ops-view: A๋ ์ฝ๋์ ์ ๋๋ก ์กํ์ง ์์
์ง๋ 1์ฃผ์ฐจ์ ์ด์ด, ์ด๋ฒ ์ฃผ์๋ EKS์ ๋คํธ์ํฌ ๊ตฌ์ฑ์ ๋ํด ์์๋ณด๋ ์๊ฐ์ด์์ต๋๋ค.
์ง์ ์คํฐ๋์์๋ ๋ฐ๋ก ๊ดํ๋นํ๋?ํ๋ฉฐ ๋ฐค๊ณผ ์ฃผ๋ง์ ํ์๊ฒ ๋ถํ์ ์ ์ ๋๋ก
๊ฐ์ฅ ๊ณ ๋๋๋ผ๊ณ ์๊ฐํ๋ ๋คํธ์ํฌ๋ฅผ ๋ค์ ๋ง๋๋ ์ด์ 1% ์น๊ทผ๊ฐ์ด ๋๊ปด์ง๊ณ ์๋ค์.

์ ๊ทธ๋ผ ํด๋ณด๋๋ก ํฉ์๋ค.
1. cloudformation์ ํ์ฉํ EKS ์ํด๋ฆญ ๊ตฌ์ฑ
- ํ์ต์ ์ํด, ์ด๋ฒ์๋ ๊ฐ์๋ค๋์ด ์ค๋นํด์ฃผ์ ์ํด๋ฆญ ๋ฐฐํฌ yaml์ ํ์ฉํ์ฌ ๋ฐฐํฌ.
- ์์ ๋ฐฐํฌ๊น์ง ๋๋ต 20๋ถ ๊ฐ๋ ์์
- IAM์์ ๋ฏธ๋ฆฌ ๋ฐ๊ธํด๋ ์ก์ธ์คํค/์ํฌ๋ฆฟํค๋ฅผ ์์๋์ด์ผํฉ๋๋ค.
# ์ํด๋ฆญ ์
์
aws cloudformation deploy --template-file ~/Documents/aews/eks-oneclick.yaml --stack-name myeks --parameter-overrides KeyName=aews SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 MyIamUserAccessKeyID={ACSSKEY|AKIA..} MyIamUserSecretAccessKey={SECUKEY|7ob..} 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)

AWS EKS ์คํฐ๋ 1์ฃผ์ฐจ
- kkumtree
2023-04-30T03:00:15+09:00
์ต๊ทผ CloudNet@์์ ์งํํ๊ณ ์๋
AWS EKS Workshop Study(์ดํ, AEWS)์ ์ฐธ์ฌํ๊ฒ ๋์์ต๋๋ค.
k8s๊ฐ ์๋ ์ธ๊ธฐ๊ฐ ๋ง๊ธฐ๋ ํ์ง๋ง, ์ง๋ kOps ์คํฐ๋๋ฅผ ํตํด ๊ด๋ฆฌ์์๊ฐ ์ฐธ ๋ง์ ๊ฒ์ ๋๊ผ์๊ณ ,
์ข๋ ์์ํ๊ฒ ์ดํด๋ฅผ ํด๋ณด๊ณ ์ AWS ์๋น์ค์ธ
EKS(Elastic Kubernetes Service)๋ฅผ ์ด๋ฒ ๊ธฐํ์ ์ดํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
EKS ์ฌ์ฉ์ ์์ด ๊ณ ๋ ค์ฌํญ
EKS๋ ๊ด๋ฆฌํ ์๋น์ค(managed service)์ด๊ธฐ์ ์๋์ ๊ฐ์ ์ฅ์ ์ด ์์ต๋๋ค.
- ํด๋ฌ์คํฐ๋ง์ ์ํ Control Plane(์ผ๋ช
, ๋ง์คํฐ ๋
ธ๋)์ AWS์์ ๊ด๋ฆฌํด์ค๋๋ค.
- ์์ปค๋
ธ๋๋
- ์ฌ์ฉ์๊ฐ AMI๋ฅผ ๊ตฌ์ฑํ์ฌ ์ด๋ฅผ ์ฌ์ฉ
- AWS์์ ์ ๊ณตํ๋ Fargate๋ก VM์ ํ ๋นํ์ฌ ์ฌ์ฉ
- ์์ปค๋
ธ๋๋
- kOps์๋ ์ ์ฌํ์ง๋ง, ๋ค๋ฅธ AWS ์๋น์ค์์ ์ฐ๋์ด ์ฉ์ดํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ ACM์ ์ธ์ฆ์ ์ฌ์ฉ์ ์์ด ๋ ํธํ ๊ฒ์ด๋ผ ์๊ฐ์ ํ์ต๋๋ค.- ECR์ ์ ์ฅํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฉ๊ฐ๋ฅ
- IAM์ ํตํ ๊ถํ ๊ด๋ฆฌ
- ELB๋ฅผ ํตํ ๋ก๋๋ฐธ๋ฐ์ฑ
- VPC๋ฅผ ํตํ ๋คํธ์ํฌ ๊ด๋ฆฌ
- ์คํ์์ค k8s ๊ธฐ๋ฐ์ด๊ธฐ์ EKS๋ก์ ์ฉ์ดํ ๋ง์ด๊ทธ๋ ์ด์
API ์๋ฒ Cluster Endpoint ๊ตฌ์ฑ
-
EKS๋ Control Plane์ ๊ด๋ฆฌํด์ฃผ๋, ๋ง์คํฐ ๋ ธ๋์ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ์ํด, Cluster Endpoint๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ง์คํฐ ๋ ธ๋์ ์ ๊ทผํ ์ ์์ต๋๋ค.
kops๋ก ์์ฝ๊ฒ spot instance ์์ฒญํ๊ธฐ
- kkumtree
2023-03-06T18:43:51+09:00
kops๋ก ์ถฉ๋ถํ spot instance๋ฅผ ๊ตด๋ฆด ์ ์์ง ์์๊น?
- ๋ ์๊ฐ์ pkos ์คํฐ๋ ๋ด๋ด ํ๊ณ ์์์ต๋๋ค๋ง,
์ด๋ฏธ t3.small ๋๋ ธ๋ค๊ฐ ์ ๋๋ก ๋ ธ๋๋ค์ด ์๋ํ์ง๋ ์์์์ ๋ง๋ดค๊ธฐ ๋๋ฌธ์…
์ฐ์ ์์๋ ์ฃผ์ฐจ๋ณ ๊ณผ์ ์ ์ถ์ด์๊ธฐ ๋๋ฌธ์ ์ด์ ์ผ ์๋ฒ ํ ์คํธ๋ฅผ ํด๋ณด๊ณ , ๊ธ์ ์์ฑํด๋ด ๋๋ค. - ์์ฝํ์๋ฉด
๋ณต์ต์ฉ์ผ๋ก๋ ์ถฉ๋ถํ ๊ฐ๋ฅํ๋ค.๋ผ๋ ํ๋จ์ ๋๋ค.- ์ฐธ๊ณ ๋ก,
์์ฝ๊ฒ === ์ผ๋งค์ ๋๋์ผ๋ก ๊ธฐ์ ํด๋ณด์์ต๋๋ค. - ๊ธ ์ฝ๊ธฐ ๊ท์ฐฎ๋ค! ์ถ์ผ๋ฉด ์ฌ๊ธฐ์์ ์๊ธ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
- ์ฐธ๊ณ ๋ก,
์ ์คํ ์ธ์คํด์ค์ธ๊ฐ?
-
์ด๋ฏธ ์ด์ ํฌ์คํ ์ ์๋์์ ์ธ๊ธํ ๋ฐ ์์ผ๋,
์๋ฌด๋ฆฌ ํด๋ผ์ฐ๋ ์๋น์ค๊ฐ ํฉ๋ฆฌ์ ์ด์ด๋ On-demand ์ธ์คํด์ค๋ฅผ ํ์ต์ฉ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์ด์ง ๋นํจ์จ์ ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
AWS ํธ๋ฌ๋ธ ์ํ - 7์ฃผ ๊ฐ์ k8s ์ค๋ฌด ์คํฐ๋๋ฅผ ๋ง์น๋ฉฐ
- kkumtree
2023-02-25T22:07:23+09:00
์ต๊ทผ CloudNet@์์ ์งํํ๊ณ ์๋ Production Kubernetes Online Study(์ดํ, PKOS)๋ ๋ง์ง๋ง ์ฃผ์ฐจ๊ฐ ๋๋ฌ์ต๋๋ค.
๋จ์ ๊ณํ์ 4์๋ถํฐ ์์๋๋ ํด์๊ธฐ๊ฐ(a.k.a. ๊ณ์ฝ๋ง๋ฃ ํ)์ค ๋ณต์ต ๊ฒธ, ํฌ์คํ
์ ํด๋ณด๋ ๊ฒ์
๋๋ค.
์ค๋์ ์๋์ ๊ฐ์ด ์คํจ๋ฅผ ๊ฑฐ๋ญํ์ฌ ์ถ๊ฐ๋ก ์๊ฒ๋ ์์ํ ํธ๋ฌ๋ธ์ํ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
(๋ฌผ๋ก , ์๋ฒฝ์ ๊ฒจ์ฐ๊ฒจ์ฐ ์ฃผ์ฐจ๋ณ ๊ณผ์ ์ ์ถํ๊ณ ๊ธฐ์ ํ๋ ๋ฐ๋์, ๋ง์ ํ๋ค ๊นจ๋ซ๊ณ ์์ค๋ผ์น๊ฒ ํด๋ํฐ์ผ๋ก ์๋ ์ญ์ ํ๊ฒ ๋น์ฉ์ ์ฃผ ์์ธ์ด๊ธด ํ๋ค์;)
๋ถํ์ํ Try & Fail์ ์ค์ด๊ณ , ์ฆ๊ฑฐ์ด k8s ํ์ต๋์๊ธฐ ๋ฐ๋๋๋ค.
1. AWS ๊ณ์ ์ ๊ธ ํด์
์ํฉ
-
์ฒ์ 1์ฃผ์ฐจ ์๋ด๊ฐ ๋๋๊ณ Route53 Hostname์ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋, ์๊พธ ๊ฒฐ์ ๊ฐ ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
Traefik์ ํ์ฉํ minikube ์์ ๊ตฌํ์๋ w/Apple Silicon
- kkumtree
2023-02-05T04:54:06+09:00
์ฃผ๋ณ์ผ๋ก๋ถํฐ ํผ๋๋ฐฑ์ ๋ฐ์ ๋ด์ฉ์ด ์์ด ์๋ก์ด ๊ธ๋ก ๋ณด์์์ ์
๋๋ค.
- colima๋ containerd์ฒ๋ผ cri๊ฐ ์๋, Docker engine๊ณผ containerd ์ฌ์ด์ ๋ฌผ๊ฑด์ผ๋ก ์ถ์ ๋ฉ๋๋ค.
- ๋์ปค ์์ง์ ํ์ฌ containerd๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌ.
- colima๋ docker shim ๊ตฌ์กฐ๋ ํํผํ์ ๊ฑฐ๋ผ๊ณ ์ถ์ธก ์ค.
- ๋์ปค ์์ง๊ณผ containerd ์ฌ์ด์ ์ปจํ
์ด๋ ์์ง(๊ด๋ฆฌ๋๊ตฌ?)๋ก ๋ณด์
- colima ์์ ์, ํน์ ๋ฐํ์์ ์ ํํ ์ ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ ์ฝ์ด๋ด
์๋ค.
`colima start --runtime containerd`
- k8s๋ฅผ ์ํ colima ์์ ๋ช
๋ น์ด๋ ๋ณ๋๋ก ์์ต๋๋ค. colima github๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
traefik v1.7์์๋ ์์ ์ค๋ช
์ ๊ธฐ์ค์ด
k8s.io/v1beta1 API(deprecated)์
๋๋ค
k8s.io/v1 API๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์ด ์์ผ๋, ์ฐธ๊ณ ๋ฐ๋๋๋ค.
๋ก์ปฌํ๊ฒฝ(minikube)์์ Traefik(^2) ์์ ๋ฅผ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.