

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# CoreDNS Amazon EKS 자체 관리형 추가 기능 업데이트
<a name="coredns-add-on-self-managed-update"></a>

**중요**  
자체 관리형 추가 기능 유형을 사용하는 대신 클러스터에 Amazon EKS 유형의 추가 기능을 추가하는 것이 좋습니다. 유형 간의 차이를 잘 모르는 경우 [Amazon EKS 추가 기능](eks-add-ons.md) 부분을 참조하세요. Amazon EKS 추가 기능을 클러스터에 추가하는 방법에 대한 자세한 내용은 [Amazon EKS 추가 기능 생성](creating-an-add-on.md) 섹션을 참조하세요. Amazon EKS 추가 기능을 사용할 수 없는 경우, 사용할 수 없는 이유에 대한 문제를 [컨테이너 로드맵 GitHub 리포지토리](https://github.com/aws/containers-roadmap/issues)에 제출하는 것이 좋습니다.

시작하기 전에 업그레이드 고려 사항을 검토하세요. 자세한 내용은 [중요 CoreDNS 업그레이드 고려 사항](managing-coredns.md#coredns-upgrade) 섹션을 참조하세요.

1. 클러스터에 자체 관리형 추가 기능 유형이 설치되어 있는지 확인하세요. *my-cluster*를 해당 클러스터의 이름으로 바꿉니다.

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text
   ```

   오류 메시지가 반환되면 자체 관리형 추가 기능 유형이 클러스터에 설치됩니다. 이 절차의 나머지 단계를 완료하여 설치하세요. 버전 번호가 반환되는 경우 Amazon EKS 유형의 추가 기능이 클러스터에 설치됩니다. Amazon EKS 유형의 추가 기능을 업데이트하려면 이 절차를 사용하는 대신 [CoreDNS Amazon EKS 추가 기능 업데이트](coredns-add-on-update.md)에 있는 절차를 사용하세요. 추가 기능 유형 간의 차이를 잘 모르는 경우 [Amazon EKS 추가 기능](eks-add-ons.md) 부분을 참조하세요.

1. 클러스터에 현재 설치된 컨테이너 이미지의 버전을 확인하세요.

   ```
   kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
   ```

   예제 출력은 다음과 같습니다.

   ```
   v1.8.7-eksbuild.2
   ```

1. 현재 CoreDNS 버전이 `v1.5.0` 이상이지만 [CoreDNS 버전](managing-coredns.md#coredns-versions) 표에서 나열된 버전보다 낮다면 이 단계를 건너뜁니다. 현재 버전이 `1.5.0`보다 낮은 경우 프록시 추가 기능 대신 전달 추가 기능을 사용하도록 CoreDNS의 `ConfigMap`을 수정해야 합니다.

   1. 다음 명령을 통해 `ConfigMap`을 엽니다.

      ```
      kubectl edit configmap coredns -n kube-system
      ```

   1. 다음 줄의 `proxy`를 `forward`로 바꿉니다. 파일을 저장하고 편집기를 종료합니다.

      ```
      proxy . /etc/resolv.conf
      ```

1. 원래 `1.17` 또는 이전 버전에서 Kubernetes에 클러스터를 배포한 경우 CoreDNS 매니페스트에서 더 이상 사용되지 않는 줄을 제거해야 할 수 있습니다.
**중요**  
CoreDNS 버전 `1.7.0`으로 업데이트하기 전에 이 단계를 완료해야 하지만, 이전 버전으로 업데이트하는 경우에도 이 단계를 완료하는 것이 좋습니다.

   1. CoreDNS 매니페스트에 이 줄이 있는지 확인합니다.

      ```
      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
      ```

      결과가 반환되지 않으면 매니페스트에 해당 줄이 없는 것이므로 다음 단계로 건너뛰어 CoreDNS를 업데이트할 수 있습니다. 출력이 반환되면 줄을 제거해야 합니다.

   1. 다음 명령을 사용하여 `ConfigMap`을 편집하고 파일에서 `upstream` 단어가 포함된 줄을 제거합니다. 파일에서 다른 것을 변경하지 마세요. 이 줄을 제거한 후 변경 사항을 저장하세요.

      ```
      kubectl edit configmap coredns -n kube-system -o yaml
      ```

1. 최신 CoreDNS 이미지 버전을 검색합니다.

   ```
   kubectl describe deployment coredns -n kube-system | grep Image
   ```

   예제 출력은 다음과 같습니다.

   ```
   602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2
   ```

1. CoreDNS `1.8.3` 이상으로 업데이트하는 경우 `system:coredns` Kubernetes `clusterrole`에 `endpointslices` 권한을 추가해야 합니다.

   ```
   kubectl edit clusterrole system:coredns -n kube-system
   ```

   파일의 `rules` 부분의 기존 권한 줄 아래에 다음 줄을 추가합니다.

   ```
   [...]
   - apiGroups:
     - discovery.k8s.io
     resources:
     - endpointslices
     verbs:
     - list
     - watch
   [...]
   ```

1. *602401143452*와 *region-code*를 이전 단계에서 반환된 출력의 값으로 대체하여 CoreDNS 추가 기능을 업데이트합니다. *v1.11.3-eksbuild.1*을 사용 중인 Kubernetes 버전의 [최신 버전 표](managing-coredns.md#coredns-versions)에 나와 있는 CoreDNS 버전으로 바꿉니다.

   ```
   kubectl set image deployment.apps/coredns -n kube-system  coredns=602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.11.3-eksbuild.1
   ```

   예제 출력은 다음과 같습니다.

   ```
   deployment.apps/coredns image updated
   ```

1. 컨테이너 이미지 버전을 다시 확인하여 이전 단계에서 지정한 버전으로 업데이트되었는지 확인합니다.

   ```
   kubectl describe deployment coredns -n kube-system | grep Image | cut -d ":" -f 3
   ```

   예제 출력은 다음과 같습니다.

   ```
   v1.11.3-eksbuild.1
   ```