# Applicaiton

{% embed url="<https://youtu.be/7QD6llN-WPo?t=16>" %}

## Application이란?

helloworld 예제 실습과정 기억나신가요? git정보와 쿠버네티스 클러스터를 입력했었습니다. <mark style="color:red;">저희가 입력한 정보는 application CRD로 생성되고 argocd가 관리</mark>하게 됩니다.

```shell
 kubectl -n argocd get application
```

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FILew2NZt0Rkd7kOur4dH%2Fimage.png?alt=media\&token=9ae1e0fb-fdaf-4296-ac73-85357dbdd1ec)

argocd는 application이라는 단위로 배포할 리소스를 관리합니다. application은 쿠버네티스 CRD로서 argocd를 설치하면 자동으로 CRD가 생성됩니다.

```shell
$ kubectl get crd | grep application
```

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FbAYtjYbX6YK9EPOPbaGH%2Fimage.png?alt=media\&token=a4b59655-29c1-4bfc-8ce9-1f02a8865cd1)

결국, argocd를 관리(또는 사용)한다는 것은 application을 관리하는 것과 같은 의미입니다. application은 어떤 git에 있는 내용을 어떤 쿠버네티스 배포할지를 설정합니다.

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FQZ7jMhPIR52Sb03z3tuB%2Fimage.png?alt=media\&token=19411e5b-3ddb-4e12-bea2-7a443219d20f)

## Application 조회

application조회는 kubectl, web UI, argocd CLI로 할 수 있습니다.

kubectl로는 get application으로 application을 조회할 수 있습니다.

```shell
kubectl -n argocd get application
```

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FjdWEQXIukmkjBSr2SYLc%2Fimage.png?alt=media\&token=efaaeff2-bbc3-462a-9f1d-ebe9e0389af4)

WEB UI에서는 왼쪽 첫번째 메뉴입니다. kubectl get application목록과 갯수가 동일합니다.

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FsDQsEyhAYzhtQvaTIPHa%2Fimage.png?alt=media\&token=161e8bc0-7c84-433e-a86c-e400cb7292d1)

application에 대한 상세정보는 kubectl describe로 확인할 수 있습니다.

```shell
kubectl -n argocd describe application helloworld | grep Spec -A 10
```

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2Ff0U1uFMvAON4IaqEiFo1%2Fimage.png?alt=media\&token=2670597d-2670-4c9c-b5ae-f3bca07038a0)

WEB UI에서는 왼쪽 위에 있는 \[APP DEDTAILS]버튼을 클릭하면 됩니다.

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2F1TCuy2wkZfAXFYW6ByzI%2Fimage.png?alt=media\&token=b92ff390-81ab-4f4d-b96e-08d27af31b4f)

## Application 생성

application생성은 kubectl, web UI, argocd CLI로 할 수 있습니다.

WEB UI는 helloworld예제에서 살펴봤듯이 \[NEW APP]버튼으로 할 수 있습니다.

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FzifaYfvqsfb8BNz2ykdo%2Fimage.png?alt=media\&token=3262be10-3903-4afd-9418-dbe77f2a5b3b)

kubectl은 CRD로 application을 정의하고 apply로 생성합니다. CRD가 익숙하지 않으면 WEB UI에 입력칸을 채우고 오른쪽 위에 있는 \[EDIT As YAML]버튼을 클릭하면 CRD를 볼 수 있습니다.

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FOTeCZ7kUnKaB3vDvSuqP%2Fimage.png?alt=media\&token=5feabdc2-cde1-42fb-a39f-15cc97393840)

![](https://419555476-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOI7SkWblrvyvFgQ1YM6d%2Fuploads%2FRWcWSmnZpuB9DfTCxW1S%2Fimage.png?alt=media\&token=8c86748a-ec6d-43ca-89ec-18662649598f)

helloworld 예제의 CRD는 아래와 같습니다.

```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: helloworld
spec:
  destination:
    name: ''
    namespace: ''
    server: 'https://kubernetes.default.svc'
  source:
    path: example-1
    repoURL: 'https://github.com/choisungwook/argocd-practice.git'
    targetRevision: HEAD
  project: default
```
