Skip to content

How It Works

EKS-Checklist๋Š” Amazon EKS (Elastic Kubernetes Service) ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” Go ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, AWS SDK for Go, Kubernetes Go Client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

Work Flow

๐Ÿ“‹ ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ

  • AWS SDK for Go: AWS API ํ˜ธ์ถœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ EKS ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ค์ • ๋ฐ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
  • Kubernetes Go Client: Kubernetes API์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์ž‘๋™ ๋ฐฉ์‹

1. AWS SDK for Go๋ฅผ ํ†ตํ•œ EKS ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

EKS ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ ๊ฒ€ํ•˜๋ ค๋ฉด ์šฐ์„  AWS SDK for Go๋ฅผ ํ†ตํ•ด EKS ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฒ„์ „, ์ƒํƒœ, ์„ค์ • ๋“ฑ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

type EksCluster struct {
    Cluster *types.Cluster
}

func Describe(clusterName string, cfg aws.Config) EksCluster {
    eksClient := eks.NewFromConfig(cfg)
    output, err := eksClient.DescribeCluster(context.TODO(), &eks.DescribeClusterInput{
        Name: &clusterName,
    })

    if err != nil {
        panic(err.Error())
    }

    eksCluster := EksCluster{Cluster: output.Cluster}

    return eksCluster
}

2. Kubernetes Go Client๋ฅผ ์‚ฌ์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ์ ๊ฒ€

Kubernetes Go Client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ง์ ‘ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. EKS ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ฆฌ์†Œ์Šค ํŒŒ๋“œ(pod), ๋…ธ๋“œ(node), ์„œ๋น„์Šค(service) ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

config, err := rest.InClusterConfig()
if err != nil {
    log.Fatal("Failed to get in-cluster config: ", err)
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
    log.Fatal("Failed to create Kubernetes client: ", err)
}
pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
if err != nil {
    log.Fatal("Failed to list pods: ", err)
}

3. Cobra๋ฅผ ์‚ฌ์šฉํ•œ CLI ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

Cobra ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” CLI ๋ช…๋ น์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ ์ ๊ฒ€์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

eks-checklist --context my-cluster --output text 
์—ฌ๊ธฐ์„œ --context๋Š” kubeconfig์—์„œ ์‚ฌ์šฉํ•  ํด๋Ÿฌ์Šคํ„ฐ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•˜๊ณ , --profile์€ AWS CLI ํ”„๋กœํŒŒ์ผ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. --output ์˜ต์…˜์„ ํ†ตํ•ด ์ถœ๋ ฅ ํ˜•์‹์„ text๋‚˜ html๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

4. ๊ฒฐ๊ณผ ์ถœ๋ ฅ ๋ฐ ํ”ผ๋“œ๋ฐฑ

์ ๊ฒ€ ๊ฒฐ๊ณผ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์ถœ๋ ฅ ํ˜•์‹์— ๋งž๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, text ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์— ์ ๊ฒ€ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๊ณ , html ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด HTML๋กœ ์ ๊ฒ€ ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

eks-checklist --context my-cluster --output html > eks-checklist-report.html