[AEWS] #3์ฃผ์ฐจ EFS, ACM ์ ์šฉํ•œ ALB Ingress๋กœ kube-ops-view ๋ฐฐํฌ (2)

25๋…„๋„ AWS EKS Hands-on Study ์Šคํ„ฐ๋”” ์ •๋ฆฌ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

EFS

Amazon EFS(Amazon Elastic File System)๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜์˜ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค๋กœ ec2, eks์—์„œ ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ํด๋”์ด๋‹ค. ํŠน์ • ์„œ๋ฒ„์—์„œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ณต์œ ๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ผ ๋•Œ nfs์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฒƒ์„ aws์—์„œ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 192.168.1.134:/ /mnt/myefs

[root@operator-host ~]# findmnt -t nfs4
TARGET     SOURCE          FSTYPE OPTIONS
/mnt/myefs 192.168.1.134:/ nfs4   rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sy

[root@operator-host ~]# nfsstat
Client rpc stats:
calls      retrans    authrefrsh
18         0          18

Client nfs v4:
null         read         write        commit       open         open_conf
3        16% 0         0% 0         0% 0         0% 0         0% 0         0%
open_noat    open_dgrd    close        setattr      fsinfo       renew
0         0% 0         0% 0         0% 0         0% 2        11% 0         0%
setclntid    confirm      lock         lockt        locku        access
0         0% 0         0% 0         0% 0         0% 0         0% 0         0%
getattr      lookup       lookup_root  remove       rename       link
1         5% 0         0% 1         5% 0         0% 0         0% 0         0%
symlink      create       pathconf     statfs       readlink     readdir
0         0% 0         0% 1         5% 1         5% 0         0% 0         0%
server_caps  delegreturn  getacl       setacl       fs_locations rel_lkowner
3        16% 0         0% 0         0% 0         0% 0         0% 0         0%
secinfo      exchange_id  create_ses   destroy_ses  sequence     get_lease_t
0         0% 0         0% 2        11% 1         5% 0         0% 1         5%
reclaim_comp layoutget    getdevinfo   layoutcommit layoutreturn getdevlist
0         0% 1         5% 0         0% 0         0% 0         0% 0         0%
(null)
1         5%

# ๋ฐ์ดํ„ฐ ์ž‘์„ฑ ํ›„
[root@operator-host ~]# vi /mnt/myefs/test.txt
[root@operator-host ~]# nfsstat
Client rpc stats:
calls      retrans    authrefrsh
39         0          39

Client nfs v4:
null         read         write        commit       open         open_conf
3         7% 0         0% 2         5% 0         0% 6        15% 0         0%
open_noat    open_dgrd    close        setattr      fsinfo       renew
0         0% 0         0% 4        10% 1         2% 2         5% 0         0%
setclntid    confirm      lock         lockt        locku        access
0         0% 0         0% 0         0% 0         0% 0         0% 1         2%
getattr      lookup       lookup_root  remove       rename       link
3         7% 2         5% 1         2% 3         7% 0         0% 0         0%
symlink      create       pathconf     statfs       readlink     readdir
0         0% 0         0% 1         2% 1         2% 0         0% 0         0%
server_caps  delegreturn  getacl       setacl       fs_locations rel_lkowner
3         7% 0         0% 0         0% 0         0% 0         0% 0         0%
secinfo      exchange_id  create_ses   destroy_ses  sequence     get_lease_t
0         0% 0         0% 2         5% 1         2% 0         0% 1         2%
reclaim_comp layoutget    getdevinfo   layoutcommit layoutreturn getdevlist
0         0% 1         2% 0         0% 0         0% 0         0% 0         0%
(null)
1         2%

 

EFS๋กœ ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด nfs ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ EFS ๊ฐ„์— ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๋•Œ nfsstat ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NFS ์š”์ฒญ(Call) ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

EFS /etc/fstab ๋งˆ์šดํŠธ ์˜๊ตฌ ์„ค์ •

# /etc/fstab
[EFS IP]:/ /mnt/myefs nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0

[root@operator-host ~]# df -Th
Filesystem      Type      Size  Used Avail Use% Mounted on
devtmpfs        devtmpfs  981M     0  981M   0% /dev
tmpfs           tmpfs     990M     0  990M   0% /dev/shm
tmpfs           tmpfs     990M  432K  989M   1% /run
tmpfs           tmpfs     990M     0  990M   0% /sys/fs/cgroup
/dev/xvda1      xfs        30G  3.1G   27G  11% /
tmpfs           tmpfs     198M     0  198M   0% /run/user/1000
[EFS IP]:/ nfs4      8.0E     0  8.0E   0% /mnt/myefs

[root@operator-host ~]# ls /mnt/myefs/
test.txt
[root@operator-host ~]# reboot

# ์žฌ๋ถ€ํŒ… ์ดํ›„
[root@operator-host ~]# df -Th
Filesystem      Type      Size  Used Avail Use% Mounted on
devtmpfs        devtmpfs  981M     0  981M   0% /dev
tmpfs           tmpfs     990M     0  990M   0% /dev/shm
tmpfs           tmpfs     990M  432K  989M   1% /run
tmpfs           tmpfs     990M     0  990M   0% /sys/fs/cgroup
/dev/xvda1      xfs        30G  3.1G   27G  11% /
[EFS IP]:/      nfs4      8.0E     0  8.0E   0% /mnt/myefs
tmpfs           tmpfs     198M     0  198M   0% /run/user/1000

 

Kube ops view ์ธ์ฆ์„œ ์ ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๊ธฐ

# kube-ops-view ์„ค์น˜
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=ClusterIP  --set env.TZ="Asia/Seoul" --namespace kube-system

 

2์ฃผ์ฐจ์— ์ด์–ด์„œ ์ด๋ฒˆ์— Kube ops view๋Š” ํด๋Ÿฌ์Šคํ„ฐ ip๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•œ๋‹ค.

# AWS ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์ปจํŠธ๋กค๋Ÿฌ
helm repo add eks https://aws.github.io/eks-charts
helm repo update

kubectl get sa -n kube-system aws-load-balancer-controller

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

 

AWS ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

 

๋‹ค์Œ ์ž‘์—…์„ ํ•˜๊ธฐ์ „ Route 53์—์„œ ๋„๋ฉ”์ธ์„ ์ƒ์„ฑํ•˜๊ณ , ACM์—์„œ ์ธ์ฆ์„œ ์š”์ฒญ์„ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  R53 ๋„๋ฉ”์ธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ CNAME์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

# ExternalDNS
MyDomain="๋‚ด ๋„๋ฉ”์ธ"
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name "$MyDomain." --query "HostedZones[0].Id" --output text)
curl -s https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml | MyDomain=$MyDomain MyDnzHostedZoneId=$MyDnzHostedZoneId envsubst | kubectl apply -f -

# ์‚ฌ์šฉ ๋ฆฌ์ „์˜ ์ธ์ฆ์„œ ARN ํ™•์ธ
CERT_ARN=$(aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text)
echo $CERT_ARN

# kubeopsview ์šฉ Ingress ์„ค์ • : group ์„ค์ •์œผ๋กœ 1๋Œ€์˜ ALB๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ingress ์—์„œ ๊ณต์šฉ ์‚ฌ์šฉ
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
    alb.ingress.kubernetes.io/group.name: study
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app.kubernetes.io/name: kubeopsview
  name: kubeopsview
  namespace: kube-system
spec:
  ingressClassName: alb
  rules:
  - host: kubeopsview.$MyDomain
    http:
      paths:
      - backend:
          service:
            name: kube-ops-view
            port:
              number: 8080
        path: /
        pathType: Prefix
EOF

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„๋ฉ”์ธ๊ณผ EKS์˜ ์ธ๊ทธ๋ ˆ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ExternalDNS๋ฅผ ํ†ตํ•ด R53์—์„œ ๋„๋ฉ”์ธ์˜ Hosted Zone ID๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„์ด๋”” ๊ฐ’์„ ExternalDNS์— ์ „๋‹ฌํ•˜์—ฌ DNS๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

 

ALB๋ฅผ ํ†ตํ•ด kube-ops-view๋ฅผ ์ธํ„ฐ๋„ท์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ , R53์„ ํ†ตํ•ด ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

 

 

https://kubeopsview.$MyDomain/#scale=1.5 ๋กœ ์ ‘์† ์„ฑ๊ณต!