From 50b47b2d4add00a1738fba10e4db6eff2fab1d98 Mon Sep 17 00:00:00 2001 From: June Yi Date: Mon, 11 Oct 2021 01:45:39 +0900 Subject: [PATCH] [ko] Update outdated content in dev-1.22-ko.2 (Task M11) Co-authored-by: Seokho Son --- content/ko/docs/concepts/containers/images.md | 83 +++++++++++++++---- 1 file changed, 67 insertions(+), 16 deletions(-) diff --git a/content/ko/docs/concepts/containers/images.md b/content/ko/docs/concepts/containers/images.md index 9a22f2f3e5..5ab09dd64a 100644 --- a/content/ko/docs/concepts/containers/images.md +++ b/content/ko/docs/concepts/containers/images.md @@ -39,14 +39,6 @@ weight: 10 배치할 수 있는 위치에 대한 추가 규칙이 있다. 태그를 지정하지 않으면, 쿠버네티스는 태그 `latest` 를 의미한다고 가정한다. -{{< caution >}} -프로덕션에서 컨테이너를 배포할 때는 `latest` 태그를 사용하지 않아야 한다. -실행 중인 이미지 버전을 추적하기가 어렵고 -이전에 잘 동작하던 버전으로 롤백하기가 더 어렵다. - -대신, `v1.42.0` 과 같은 의미있는 태그를 지정한다. -{{< /caution >}} - ## 이미지 업데이트 {{< glossary_tooltip text="디플로이먼트" term_id="deployment" >}}, @@ -57,13 +49,62 @@ weight: 10 {{< glossary_tooltip text="kubelet" term_id="kubelet" >}}이 이미 존재하는 이미지에 대한 풀을 생략하게 한다. -만약 항상 풀을 강제하고 싶다면, 다음 중 하나를 수행하면 된다. +### 이미지 풀(pull) 정책 -- 컨테이너의 `imagePullPolicy`를 `Always`로 설정. -- `imagePullPolicy`를 생략하고 `:latest`를 사용할 이미지의 태그로 사용, - 쿠버네티스는 정책을 `Always`로 설정한다. -- `imagePullPolicy`와 사용할 이미지의 태그를 생략. -- [AlwaysPullImages](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) 어드미션 컨트롤러를 활성화. +컨테이너에 대한 `imagePullPolicy`와 이미지의 태그는 +[kubelet](/docs/reference/command-line-tools-reference/kubelet/)이 특정 이미지를 풀(다운로드)하려고 할 때 영향을 준다. + +다음은 `imagePullPolicy`에 설정할 수 있는 값의 목록과 효과이다. + +`IfNotPresent` +: 이미지가 로컬에 없는 경우에만 내려받는다. + +`Always` +: kubelet이 컨테이너를 기동할 때마다, kubelet이 컨테이너 이미지 레지스트리에 이름과 이미지의 + [다이제스트](https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier)가 있는지 질의한다. + 일치하는 다이제스트를 가진 컨테이너 이미지가 로컬에 있는 경우, kubelet은 캐시된 이미지를 사용한다. + 이외의 경우, kubelet은 검색된 다이제스트를 가진 이미지를 내려받아서 + 컨테이너를 기동할 때 사용한다. + +`Never` +: kubelet은 이미지를 가져오려고 시도하지 않는다. 이미지가 어쨌든 이미 로컬에 존재하는 + 경우, kubelet은 컨테이너 기동을 시도한다. 이외의 경우 기동은 실패한다. + 보다 자세한 내용은 [미리 내려받은 이미지](#pre-pulled-images)를 참조한다. + +이미지 제공자에 앞서 깔린 캐시의 의미 체계는 레지스트리에 안정적으로 접근할 수 있는 한, +`imagePullPolicy: Always`인 경우 조차도 효율적이다. +컨테이너 런타임은 노드에 이미 존재하는 이미지 레이어를 알고 +다시 내려받지 않는다. + +{{< note >}} +프로덕션 환경에서 컨테이너를 배포하는 경우 `:latest` 태그 사용을 지양해야 하는데, +이미지의 어떤 버전이 기동되고 있는지 추적이 어렵고 제대로 롤백하기 어렵게 되기 때문이다. + +대신, `v1.42.0`과 같이 의미있는 태그를 명기한다. +{{< /note >}} + +파드가 항상 컨테이너 이미지의 같은 버전을 사용하는 것을 확실히 하려면, +이미지의 다이제스트를 명기할 수 있다. +`:`를 `@`로 교체한다. +(예를 들어, `image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2`). + +이미지 태그를 사용하는 경우, 이미지 레지스트리에서 한 이미지를 나타내는 태그에 코드를 변경하게 되면, 기존 코드와 신규 코드를 구동하는 파드가 섞이게 되고 만다. 이미지 다이제스트를 통해 이미지의 특정 버전을 유일하게 식별할 수 있기 때문에, 쿠버네티스는 매번 해당 이미지 이름과 다이제스트가 명시된 컨테이너를 기동해서 같은 코드를 구동한다. 이미지를 명시하는 것은 구동할 코드를 고정시켜서 레지스트리에서의 변경으로 인해 버전이 섞이는 일이 발생하지 않도록 해준다. + +파드(및 파드 템플릿)가 생성될 때 구동 중인 워크로드가 태그가 아닌 이미지 다이제스트를 통해 정의되도록 조작해주는 +서드-파티 [어드미션 컨트롤러](/docs/reference/access-authn-authz/admission-controllers/)가 있다. +이는 레지스트리에서 태그가 변경되는 일이 발생해도 +구동 중인 워크로드가 모두 같은 코드를 사용하고 있다는 것을 보장하기를 원하는 경우 유용할 것이다. + +#### 기본 이미지 풀 정책 {#imagepullpolicy-defaulting} + +사용자(또는 컨트롤러)가 신규 파드를 API 서버에 요청할 때, +특정 조건에 부합하면 클러스터가 `imagePullPolicy` 필드를 설정한다. + +- `imagePullPolicy` 필드를 생략하고 컨테이너 이미지의 태그가 + `:latest`인 경우, `imagePullPolicy`는 자동으로 `Always`로 설정된다. +- `imagePullPolicy` 필드를 생략하고 컨테이너 이미지의 태그를 명기하지 않은 경우, + `imagePullPolicy`는 자동으로 `Always`로 설정된다. +- `imagePullPolicy` 필드를 생략하고, 명기한 컨테이너 이미지의 태그가 `:latest`가 아니면, `imagePullPolicy`는 자동으로 `IfNotPresent`로 설정된다. {{< note >}} 컨테이너의 `imagePullPolicy` 값은 오브젝트가 처음 _created_ 일 때 항상 @@ -75,7 +116,16 @@ weight: 10 처음 생성 한 후 모든 오브젝트의 풀 정책을 수동으로 변경해야 한다. {{< /note >}} -`imagePullPolicy` 가 특정값 없이 정의되면, `Always` 로 설정된다. +#### 이미지 풀 강제 + +이미지를 내려받도록 강제하려면, 다음 중 한가지 방법을 사용한다. + +- 컨테이너의 `imagePullPolicy`를 `Always`로 설정한다. +- `imagePullPolicy`를 생략하고 사용할 이미지 태그로 `:latest`를 사용한다. + 그러면 사용자가 파드를 요청할 때 쿠버네티스가 정책을 `Always`로 설정한다. +- `imagePullPolicy`와 사용할 이미지의 태그를 생략한다. + 그러면 사용자가 파드를 요청할 때 쿠버네티스가 정책을 `Always`로 설정한다. +- [AlwaysPullImages](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) 어드미션 컨트롤러를 활성화 한다. ### 이미지풀백오프(ImagePullBackOff) @@ -208,7 +258,7 @@ kubectl describe pods/private-image-test-1 | grep 'Failed' 프라이빗 레지스트리 키가 `.docker/config.json`에 추가되고 나면 모든 파드는 프라이빗 레지스트리의 이미지에 읽기 접근 권한을 가지게 될 것이다. -### 미리 내려받은 이미지 +### 미리 내려받은 이미지 {#pre-pulled-images} {{< note >}} 이 방법은 노드의 구성을 제어할 수 있는 경우에만 적합하다. 이 방법은 @@ -328,6 +378,7 @@ imagePullSecrets을 셋팅하여 자동화할 수 있다. 다중 레지스트리에 접근해야 하는 경우, 각 레지스트리에 대해 하나의 시크릿을 생성할 수 있다. Kubelet은 모든 `imagePullSecrets` 파일을 하나의 가상 `.docker/config.json` 파일로 병합한다. + ## {{% heading "whatsnext" %}} * [OCI 이미지 매니페스트 명세](https://github.com/opencontainers/image-spec/blob/master/manifest.md) 읽어보기.