[ko] Update outdated files in dev-1.26-ko.1 (M112-M125)

pull/39634/head
bconfiden2 2023-02-23 09:03:32 +09:00
parent 4fa3b1048b
commit 41aeff23ce
13 changed files with 234 additions and 101 deletions

View File

@ -212,7 +212,7 @@ API 및 kubectl의 관점에서, 윈도우 컨테이너는 리눅스 기반 컨
* `securityContext.capabilities` -
POSIX 기능은 윈도우에서 구현되지 않았다.
* `securityContext.privileged` -
윈도우는 특권을 가진(privileged) 컨테이너를 지원하지 않는다.
윈도우는 특권을 가진(privileged) 컨테이너를 지원하지 않는다. 대신 [호스트 프로세스 컨테이너](/docs/tasks/configure-pod-container/create-hostprocess-pod/)를 사용한다.
* `securityContext.procMount` -
윈도우에는 `/proc` 파일시스템이 없다.
* `securityContext.readOnlyRootFilesystem` -
@ -238,11 +238,11 @@ API 및 kubectl의 관점에서, 윈도우 컨테이너는 리눅스 기반 컨
다음 목록은 윈도우와 리눅스에서 파드 명세가 어떻게 다르게 동작하는지 기술한다.
* `hostIPC``hostpid` - 호스트 네임스페이스 공유 기능은 윈도우에서 사용할 수 없다.
* `hostNetwork` - 윈도우 운영 체제에서 호스트 네트워크 공유 기능을 지원하지 않는다.
* `hostNetwork` - [하단 참조](#compatibility-v1-pod-spec-containers-hostnetwork)
* `dnsPolicy` - 윈도우에서 호스트 네트워킹이 지원되지 않기 때문에
`dnsPolicy``ClusterFirstWithHostNet`로 설정할 수 없다.
파드는 항상 컨테이너 네트워크와 함께 동작한다.
* `podSecurityContext` (하단 참조)
* `podSecurityContext` [하단 참조](#compatibility-v1-pod-spec-containers-securitycontext)
* `shareProcessNamespace` - 이것은 베타 기능이며, 윈도우에서 구현되지 않은 리눅스 네임스페이스에 의존한다.
윈도우는 프로세스 네임스페이스 또는 컨테이너의 루트 파일시스템을 공유할 수 없다.
네트워크만 공유할 수 있다.
@ -261,6 +261,17 @@ API 및 kubectl의 관점에서, 윈도우 컨테이너는 리눅스 기반 컨
* `mountPropagation` - 마운트 전파(propagation)는 윈도우에서 지원되지 않으므로
이 필드는 활성화할 수 없다.
#### 호스트 네트워크(hostNetwork)의 필드 호환성 {#compatibility-v1-pod-spec-containers-hostnetwork}
{{< feature-state for_k8s_version="v1.26" state="alpha" >}}
이제 kubelet은, 윈도우 노드에서 실행되는 파드가 새로운 파드 네트워크 네임스페이스를 생성하는 대신 호스트의 네트워크 네임스페이스를 사용하도록 요청할 수 있다.
이 기능을 활성화하려면 kubelet에 `--feature-gates=WindowsHostNetwork=true`를 전달한다.
{{< note >}}
이 기능을 지원하는 컨테이너 런타임을 필요로 한다.
{{< /note >}}
#### 파드 시큐리티 컨텍스트의 필드 호환성 {#compatibility-v1-pod-spec-containers-securitycontext}
파드 [`securityContext`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context)의 모든 필드는 윈도우에서 작동하지 않는다.

View File

@ -16,4 +16,4 @@ tags:
<!--more-->
컨테이너는 애플리케이션과 기반이 되는 호스트 인프라의 관계를 분리시켜서, 애플리케이션을 다른 클라우드 또는 OS 환경에서도 쉽게 디플로이하고 쉽게 스케일되게 한다.
컨테이너 내에서 실행되는 애플리케이션을 컨테이너화된 애플리케이션이라고 한다. 이러한 애플리케이션들과 그에 의존하는 파일 및 라이브러리들을 묶어 컨테이너 이미지로 만들어내는 과정을 컨테이너화라고 한다.

View File

@ -16,5 +16,7 @@ tags:
문제가 있는 실행 중 파드를 조사하고 싶다면, 파드에 임시 컨테이너를 추가하고 진단을 수행할 수 있다. 임시 컨테이너는 리소스 및 스케줄링에 대한 보장이 제공되지 않으며, 워크로드 자체를 실행하기 위해 임시 컨테이너를 사용해서는 안 된다.
{{< glossary_tooltip text="스태틱 파드(static pod)" term_id="static-pod" >}}는 임시 컨테이너를 지원하지 않는다.
<!-- Even though the English doc doesn't mention this, the link below is to help Korean readers understand what 임시 컨테이너 equates to in the API. -->
더 자세한 정보는 파드 API의 [EphemeralContainer](/docs/reference/kubernetes-api/workload-resources/pod-v1/#EphemeralContainer)를 참고한다.

View File

@ -4,15 +4,24 @@ id: secret
date: 2018-04-12
full_link: /ko/docs/concepts/configuration/secret/
short_description: >
비밀번호, OAuth 토큰 및 ssh 키와 같은 민감한 정보를 저장한다.
비밀번호, OAuth 토큰 및 SSH 키와 같은 민감한 정보를 저장한다.
aka:
tags:
- core-object
- security
---
비밀번호, OAuth 토큰 및 ssh 키와 같은 민감한 정보를 저장한다.
비밀번호, OAuth 토큰 및 SSH 키와 같은 민감한 정보를 저장한다.
<!--more-->
민감한 정보를 사용하는 방식에 대해 더 세밀하게 제어할 수 있으며, 우발적인 노출 위험을 줄인다. 시크릿 값은 기본적으로 base64 문자열로 인코딩되어 암호화되지 않은 채로 저장되지만, [안전하게 암호화](/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted)되도록 설정할 수 있다. {{< glossary_tooltip text="파드" term_id="pod" >}}는 볼륨 마운트 내의 파일 형태로 시크릿에 접근하며, 시크릿은 또한 kubelet이 파드를 위해 이미지를 풀링할 때에도 사용될 수 있다. 시크릿은 기밀 데이터를 다루는 용도로 적합하며, [컨피그맵](/docs/tasks/configure-pod-container/configure-pod-configmap/)은 기밀이 아닌 데이터를 다루는 용도로 적합하다.
시크릿을 사용하면 민감한 정보가 사용되는 방법을 더 잘 통제할 수 있으며,
실수로 외부에 노출되는 위험도 줄일 수 있다.
시크릿 값은 base64 문자열로 인코딩되며 기본적으로는 평문으로 저장되지만,
[암호화하여 저장](/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted)하도록 설정할 수도 있다.
{{< glossary_tooltip text="파드" term_id="pod" >}}는 볼륨을 마운트하거나 혹은 환경 변수를 통하는 등
다양한 방식으로 시크릿을 참조할 수 있다.
시크릿은 기밀 데이터를 다루는 용도로 적합하며,
[컨피그맵](/docs/tasks/configure-pod-container/configure-pod-configmap/)은
기밀이 아닌 데이터를 다루는 용도로 적합하다.

View File

@ -15,4 +15,6 @@ tags:
직접 관리하는 {{< glossary_tooltip text="파드" term_id="pod" >}}로,
<!--more-->
API 서버가 관찰하지 않는다.
API 서버가 관찰하지 않는다.
스태틱 파드는 {{< glossary_tooltip text="임시 컨테이너" term_id="ephemeral-container" >}}를 지원하지 않는다.

View File

@ -1,4 +1,4 @@
---
title: 쿠버네티스 이슈와 보안
weight: 40
weight: 70
---

View File

@ -1,7 +1,7 @@
---
title: 명령줄 도구 (kubectl)
content_type: reference
weight: 60
weight: 110
no_list: true
card:
name: reference
@ -101,7 +101,13 @@ kubectl은 자신이 클러스터 내부에서 실행되고 있다고 가정한
kubectl은 해당 서비스어카운트의 네임스페이스(파드의 네임스페이스와 동일하다)를 인식하고 해당 네임스페이스에 대해 동작한다.
이는 클러스터 외부에서 실행되었을 때와는 다른데,
kubectl이 클러스터 외부에서 실행되었으며 네임스페이스가 명시되지 않은 경우
kubectl은 `default` 네임스페이스에 대해 동작한다.
kubectl 명령어는 클라이언트 구성에서 현재 컨텍스트(current context)에
설정된 네임스페이스에 대해 동작한다.
kubectl이 동작하는 기본 네임스페이스를 변경하려면 아래의 명령어를 실행한다.
```shell
kubectl config set-context --current --namespace=<namespace-name>
```
## 명령어
@ -130,6 +136,7 @@ kubectl은 `default` 네임스페이스에 대해 동작한다.
`diff` | `kubectl diff -f FILENAME [flags]`| 라이브 구성에 대해 파일이나 표준입력의 차이점을 출력한다.
`drain` | `kubectl drain NODE [options]` | 유지 보수를 준비 중인 노드를 드레인한다.
`edit` | <code>kubectl edit (-f FILENAME &#124; TYPE NAME &#124; TYPE/NAME) [flags]</code> | 기본 편집기를 사용하여 서버에서 하나 이상의 리소스 정의를 편집하고 업데이트한다.
`events` | `kubectl events` | List events
`exec` | `kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]` | 파드의 컨테이너에 대해 명령을 실행한다.
`explain` | `kubectl explain [--recursive=false] [flags]` | 파드, 노드, 서비스 등의 다양한 리소스에 대한 문서를 출력한다.
`expose` | <code>kubectl expose (-f FILENAME &#124; TYPE NAME &#124; TYPE/NAME) [--port=port] [--protocol=TCP&#124;UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags]</code> | 레플리케이션 컨트롤러, 서비스 또는 파드를 새로운 쿠버네티스 서비스로 노출한다.
@ -159,66 +166,66 @@ kubectl은 `default` 네임스페이스에 대해 동작한다.
다음 표에는 지원되는 모든 리소스 타입과 해당 약어가 나열되어 있다.
(이 출력은 `kubectl api-resources` 에서 확인할 수 있으며, 쿠버네티스 1.19.1 에서의 출력을 기준으로 한다.)
(이 출력은 `kubectl api-resources` 에서 확인할 수 있으며, 쿠버네티스 1.25.0 에서의 출력을 기준으로 한다.)
| NAME | SHORTNAMES | APIGROUP | NAMESPACED | KIND |
| NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
|---|---|---|---|---|
| `bindings` | | | true | Binding |
| `componentstatuses` | `cs` | | false | ComponentStatus |
| `configmaps` | `cm` | | true | ConfigMap |
| `endpoints` | `ep` | | true | Endpoints |
| `events` | `ev` | | true | Event |
| `limitranges` | `limits` | | true | LimitRange |
| `namespaces` | `ns` | | false | Namespace |
| `nodes` | `no` | | false | Node |
| `persistentvolumeclaims` | `pvc` | | true | PersistentVolumeClaim |
| `persistentvolumes` | `pv` | | false | PersistentVolume |
| `pods` | `po` | | true | Pod |
| `podtemplates` | | | true | PodTemplate |
| `replicationcontrollers` | `rc` | | true | ReplicationController |
| `resourcequotas` | `quota` | | true | ResourceQuota |
| `secrets` | | | true | Secret |
| `serviceaccounts` | `sa` | | true | ServiceAccount |
| `services` | `svc` | | true | Service |
| `mutatingwebhookconfigurations` | | admissionregistration.k8s.io | false | MutatingWebhookConfiguration |
| `validatingwebhookconfigurations` | | admissionregistration.k8s.io | false | ValidatingWebhookConfiguration |
| `customresourcedefinitions` | `crd,crds` | apiextensions.k8s.io | false | CustomResourceDefinition |
| `apiservices` | | apiregistration.k8s.io | false | APIService |
| `controllerrevisions` | | apps | true | ControllerRevision |
| `daemonsets` | `ds` | apps | true | DaemonSet |
| `deployments` | `deploy` | apps | true | Deployment |
| `replicasets` | `rs` | apps | true | ReplicaSet |
| `statefulsets` | `sts` | apps | true | StatefulSet |
| `tokenreviews` | | authentication.k8s.io | false | TokenReview |
| `localsubjectaccessreviews` | | authorization.k8s.io | true | LocalSubjectAccessReview |
| `selfsubjectaccessreviews` | | authorization.k8s.io | false | SelfSubjectAccessReview |
| `selfsubjectrulesreviews` | | authorization.k8s.io | false | SelfSubjectRulesReview |
| `subjectaccessreviews` | | authorization.k8s.io | false | SubjectAccessReview |
| `horizontalpodautoscalers` | `hpa` | autoscaling | true | HorizontalPodAutoscaler |
| `cronjobs` | `cj` | batch | true | CronJob |
| `jobs` | | batch | true | Job |
| `certificatesigningrequests` | `csr` | certificates.k8s.io | false | CertificateSigningRequest |
| `leases` | | coordination.k8s.io | true | Lease |
| `endpointslices` | | discovery.k8s.io | true | EndpointSlice |
| `events` | `ev` | events.k8s.io | true | Event |
| `ingresses` | `ing` | extensions | true | Ingress |
| `flowschemas` | | flowcontrol.apiserver.k8s.io | false | FlowSchema |
| `prioritylevelconfigurations` | | flowcontrol.apiserver.k8s.io | false | PriorityLevelConfiguration |
| `ingressclasses` | | networking.k8s.io | false | IngressClass |
| `ingresses` | `ing` | networking.k8s.io | true | Ingress |
| `networkpolicies` | `netpol` | networking.k8s.io | true | NetworkPolicy |
| `runtimeclasses` | | node.k8s.io | false | RuntimeClass |
| `poddisruptionbudgets` | `pdb` | policy | true | PodDisruptionBudget |
| `podsecuritypolicies` | `psp` | policy | false | PodSecurityPolicy |
| `clusterrolebindings` | | rbac.authorization.k8s.io | false | ClusterRoleBinding |
| `clusterroles` | | rbac.authorization.k8s.io | false | ClusterRole |
| `rolebindings` | | rbac.authorization.k8s.io | true | RoleBinding |
| `roles` | | rbac.authorization.k8s.io | true | Role |
| `priorityclasses` | `pc` | scheduling.k8s.io | false | PriorityClass |
| `csidrivers` | | storage.k8s.io | false | CSIDriver |
| `csinodes` | | storage.k8s.io | false | CSINode |
| `storageclasses` | `sc` | storage.k8s.io | false | StorageClass |
| `volumeattachments` | | storage.k8s.io | false | VolumeAttachment |
| `bindings` | | v1 | true | Binding |
| `componentstatuses` | `cs` | v1 | false | ComponentStatus |
| `configmaps` | `cm` | v1 | true | ConfigMap |
| `endpoints` | `ep` | v1 | true | Endpoints |
| `events` | `ev` | v1 | true | Event |
| `limitranges` | `limits` | v1 | true | LimitRange |
| `namespaces` | `ns` | v1 | false | Namespace |
| `nodes` | `no` | v1 | false | Node |
| `persistentvolumeclaims` | `pvc` | v1 | true | PersistentVolumeClaim |
| `persistentvolumes` | `pv` | v1 | false | PersistentVolume |
| `pods` | `po` | v1 | true | Pod |
| `podtemplates` | | v1 | true | PodTemplate |
| `replicationcontrollers` | `rc` | v1 | true | ReplicationController |
| `resourcequotas` | `quota` | v1 | true | ResourceQuota |
| `secrets` | | v1 | true | Secret |
| `serviceaccounts` | `sa` | v1 | true | ServiceAccount |
| `services` | `svc` | v1 | true | Service |
| `mutatingwebhookconfigurations` | | admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration |
| `validatingwebhookconfigurations` | | admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration |
| `customresourcedefinitions` | `crd,crds` | apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
| `apiservices` | | apiregistration.k8s.io/v1 | false | APIService |
| `controllerrevisions` | | apps/v1 | true | ControllerRevision |
| `daemonsets` | `ds` | apps/v1 | true | DaemonSet |
| `deployments` | `deploy` | apps/v1 | true | Deployment |
| `replicasets` | `rs` | apps/v1 | true | ReplicaSet |
| `statefulsets` | `sts` | apps/v1 | true | StatefulSet |
| `tokenreviews` | | authentication.k8s.io/v1 | false | TokenReview |
| `localsubjectaccessreviews` | | authorization.k8s.io/v1 | true | LocalSubjectAccessReview |
| `selfsubjectaccessreviews` | | authorization.k8s.io/v1 | false | SelfSubjectAccessReview |
| `selfsubjectrulesreviews` | | authorization.k8s.io/v1 | false | SelfSubjectRulesReview |
| `subjectaccessreviews` | | authorization.k8s.io/v1 | false | SubjectAccessReview |
| `horizontalpodautoscalers` | `hpa` | autoscaling/v2 | true | HorizontalPodAutoscaler |
| `cronjobs` | `cj` | batch/v1 | true | CronJob |
| `jobs` | | batch/v1 | true | Job |
| `certificatesigningrequests` | `csr` | certificates.k8s.io/v1 | false | CertificateSigningRequest |
| `leases` | | coordination.k8s.io/v1 | true | Lease |
| `endpointslices` | | discovery.k8s.io/v1 | true | EndpointSlice |
| `events` | `ev` | events.k8s.io/v1 | true | Event |
| `flowschemas` | | flowcontrol.apiserver.k8s.io/v1beta2 | false | FlowSchema |
| `prioritylevelconfigurations` | | flowcontrol.apiserver.k8s.io/v1beta2 | false | PriorityLevelConfiguration |
| `ingressclasses` | | networking.k8s.io/v1 | false | IngressClass |
| `ingresses` | `ing` | networking.k8s.io/v1 | true | Ingress |
| `networkpolicies` | `netpol` | networking.k8s.io/v1 | true | NetworkPolicy |
| `runtimeclasses` | | node.k8s.io/v1 | false | RuntimeClass |
| `poddisruptionbudgets` | `pdb` | policy/v1 | true | PodDisruptionBudget |
| `podsecuritypolicies` | `psp` | policy/v1beta1 | false | PodSecurityPolicy |
| `clusterrolebindings` | | rbac.authorization.k8s.io/v1 | false | ClusterRoleBinding |
| `clusterroles` | | rbac.authorization.k8s.io/v1 | false | ClusterRole |
| `rolebindings` | | rbac.authorization.k8s.io/v1 | true | RoleBinding |
| `roles` | | rbac.authorization.k8s.io/v1 | true | Role |
| `priorityclasses` | `pc` | scheduling.k8s.io/v1 | false | PriorityClass |
| `csidrivers` | | storage.k8s.io/v1 | false | CSIDriver |
| `csinodes` | | storage.k8s.io/v1 | false | CSINode |
| `csistoragecapacities` | | storage.k8s.io/v1 | true | CSIStorageCapacity |
| `storageclasses` | `sc` | storage.k8s.io/v1 | false | StorageClass |
| `volumeattachments` | | storage.k8s.io/v1 | false | VolumeAttachment |
## 출력 옵션

View File

@ -39,7 +39,7 @@ complete -o default -F __start_kubectl k
source <(kubectl completion zsh) # 현재 셸에 zsh의 자동 완성 설정
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # 자동 완성을 zsh 셸에 영구적으로 추가한다.
```
### --all-namespaces 에 대한 노트
### `--all-namespaces` 에 대한 노트
`--all-namespaces`를 붙여야 하는 상황이 자주 발생하므로, `--all-namespaces`의 축약형을 알아 두는 것이 좋다.
@ -225,6 +225,9 @@ kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initConta
# 타임스탬프로 정렬된 이벤트 목록 조회
kubectl get events --sort-by=.metadata.creationTimestamp
# 모든 Warning 타입 이벤트 조회
kubectl events --types=Warning
# 매니페스트가 적용된 경우 클러스터의 현재 상태와 클러스터의 상태를 비교한다.
kubectl diff -f ./my-manifest.yaml
@ -266,6 +269,7 @@ kubectl expose rc nginx --port=80 --target-port=8000
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label=awesome # 레이블 추가
kubectl label pods my-pod new-label- # 레이블 제거
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 어노테이션 추가
kubectl autoscale deployment foo --min=2 --max=10 # 디플로이먼트 "foo" 오토스케일
```
@ -336,9 +340,8 @@ kubectl logs -f my-pod -c my-container # 실시간 스트림 파드
kubectl logs -f -l name=myLabel --all-containers # name이 myLabel인 모든 파드의 로그 스트리밍 (stdout)
kubectl run -i --tty busybox --image=busybox:1.28 -- sh # 대화형 셸로 파드를 실행
kubectl run nginx --image=nginx -n mynamespace # mynamespace 네임스페이스에서 nginx 파드 1개 실행
kubectl run nginx --image=nginx # nginx 파드를 실행하고 해당 스펙을 pod.yaml 파일에 기록
--dry-run=client -o yaml > pod.yaml
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# nginx 파드에 대한 spec을 생성하고, pod.yaml이라는 파일에 해당 내용을 기록한다.
kubectl attach my-pod -i # 실행 중인 컨테이너에 연결
kubectl port-forward my-pod 5000:6000 # 로컬 머신의 5000번 포트를 리스닝하고, my-pod의 6000번 포트로 전달
kubectl exec my-pod -- ls / # 기존 파드에서 명령 실행(한 개 컨테이너 경우)
@ -390,7 +393,7 @@ kubectl cluster-info dump # 현재
kubectl cluster-info dump --output-directory=/path/to/cluster-state # 현재 클러스터 상태를 /path/to/cluster-state으로 덤프
# 현재 노드에 존재하고 있는 테인트(taint)들을 확인
kubectl get nodes -o=custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect
kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'
# 이미 존재하고 있는 key와 effect를 갖는 테인트의 경우, 지정한 값으로 대체
kubectl taint nodes foo dedicated=special-user:NoSchedule

View File

@ -3,6 +3,7 @@ title: kubectl 사용 규칙
# reviewers:
# - janetkuo
content_type: concept
weight: 60
---
<!-- overview -->

View File

@ -4,6 +4,7 @@ content_type: concept
# reviewers:
# - brendandburns
# - thockin
weight: 50
---
<!-- overview -->

View File

@ -1,6 +1,7 @@
---
title: JSONPath 지원
content_type: concept
weight: 40
---
<!-- overview -->

View File

@ -351,6 +351,16 @@ kubectl [flags]
<td></td><td style="line-height: 130%; word-wrap: break-word;">false로 설정하면, 호출된 kubectl 명령(쿠버네티스 버전 v1.22 이상)을 자세히 설명하는 추가 HTTP 헤더를 해제</td>
</tr>
tr>
<td colspan="2">KUBECTL_EXPLAIN_OPENAPIV3</td>
</tr>
<tr>
<td></td><td style="line-height: 130%; word-wrap: break-word;">`kubectl explain` 호출에 사용 가능한 새로운 OpenAPIv3 데이터 소스를 사용할지 여부를 전환. 쿠버네티스 1.24 이후로, OpenAPIV3 는 기본적으로 활성화 되어있다.
</td>
</tr>
</tbody>
</table>
@ -376,6 +386,7 @@ kubectl [flags]
* [kubectl diff](/docs/reference/generated/kubectl/kubectl-commands#diff) - 적용 예정 버전과 라이브 버전 비교
* [kubectl drain](/docs/reference/generated/kubectl/kubectl-commands#drain) - 유지 보수 준비 중 노드 드레인
* [kubectl edit](/docs/reference/generated/kubectl/kubectl-commands#edit) - 서버에서 리소스 편집
* [kubectl events](/docs/reference/generated/kubectl/kubectl-commands#events) - 이벤트 목록 나열
* [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands#exec) - 컨테이너에서 커맨드 실행
* [kubectl explain](/docs/reference/generated/kubectl/kubectl-commands#explain) - 리소스의 문서
* [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands#expose) - 레플리케이션 컨트롤러, 서비스, 디플로이먼트 또는 파드를 가져와서 새로운 쿠버네티스 서비스로 노출

View File

@ -1,8 +1,8 @@
---
title: 잘 알려진 레이블, 어노테이션, 테인트(Taint)
content_type: concept
weight: 20
weight: 40
no_list: true
---
<!-- overview -->
@ -19,7 +19,7 @@ weight: 20
예시: `app.kubernetes.io/component: "database"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
아키텍처 내의 컴포넌트.
@ -29,7 +29,7 @@ weight: 20
예시: `app.kubernetes.io/created-by: "controller-manager"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
리소스를 생성한 컨트롤러/사용자.
@ -41,9 +41,9 @@ v1.9부터 이 레이블은 더 이상 사용되지 않는다.
예시: `app.kubernetes.io/instance: "mysql-abcxzy"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
애플리케이션 인스턴스를 식별하기 위한 고유한 이름.
애플리케이션 인스턴스를 식별하기 위한 고유한 이름. 고유하지 않은 이름을 할당하려면, [app.kubernetes.io/name](#app-kubernetes-io-name)를 사용한다.
[추천하는 레이블](/ko/docs/concepts/overview/working-with-objects/common-labels/#labels)을 확인한다.
@ -51,7 +51,7 @@ v1.9부터 이 레이블은 더 이상 사용되지 않는다.
예시: `app.kubernetes.io/managed-by: "helm"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
애플리케이션의 작업을 관리하기 위해 사용되는 도구.
@ -61,7 +61,7 @@ v1.9부터 이 레이블은 더 이상 사용되지 않는다.
예시: `app.kubernetes.io/name: "mysql"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
애플리케이션의 이름.
@ -71,7 +71,7 @@ v1.9부터 이 레이블은 더 이상 사용되지 않는다.
예시: `app.kubernetes.io/part-of: "wordpress"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
해당 애플리케이션이 속한 상위 레벨의 애플리케이션 이름.
@ -81,9 +81,14 @@ v1.9부터 이 레이블은 더 이상 사용되지 않는다.
예시: `app.kubernetes.io/version: "5.7.21"`
적용 대상: 모든 오브젝트
적용 대상: 모든 오브젝트 (일반적으로 [워크로드 리소스](/docs/reference/kubernetes-api/workload-resources/)에서 사용됨)
애플리케이션의 현재 버전(시맨틱 버전, 리비전 해시, 기타 등등).
애플리케이션의 현재 버전.
일반적으로 다음과 같은 형태의 값들을 포함한다.
- [시맨틱 버전](https://semver.org/spec/v1.0.0.html)
- [리비전 해시](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#_single_revisions) 깃 소스 코드
[추천하는 레이블](/ko/docs/concepts/overview/working-with-objects/common-labels/#labels)을 확인한다.
@ -128,6 +133,20 @@ Go에 의해 정의된 `runtime.GOOS` 값을 kubelet이 읽어서 이 레이블
레이블 {{< glossary_tooltip text="셀렉터" term_id="selector" >}}를 이용하여 특정 네임스페이스를 지정하고 싶다면
이 레이블이 유용할 수 있다.
### kubernetes.io/limit-ranger
예시: `kubernetes.io/limit-ranger: "LimitRanger plugin set: cpu, memory request for container nginx; cpu, memory limit for container nginx"`
적용 대상: 파드
쿠버네티스는 기본적으로 어떠한 리소스 한도도 설정하지 않는다. 명시적으로 한도를 설정하지 않을 경우,
컨테이너는 CPU와 메모리를 무제한으로 사용하게 된다.
네임스페이스에 리밋레인지를 생성함으로써 리소스에 대한 요청이나 한도 기본값을 파드에 설정할 수 있다.
리밋레인지를 정의한 뒤에 배포된 파드들은 이러한 한도가 적용된다.
`kubernetes.io/limit-ranger` 어노테이션은 파드에 대해 리소스 기본값이
성공적으로 적용되었다고 기록한다.
자세한 내용은 [리밋레인지](/docs/concepts/policy/limit-range)를 확인한다.
## beta.kubernetes.io/arch (사용 중단됨)
이 레이블은 사용 중단되었다. 대신 `kubernetes.io/arch` 을 사용한다.
@ -173,6 +192,17 @@ kubelet이 호스트네임을 읽어서 이 레이블의 값으로 채운다. `k
이 어노테이션의 값은 **true**로 설정되어야만 작동한다. 이 어노테이션은, 해당 서비스어카운트로 동작중인 파드가 그 서비스어카운트의 `secrets` 항목에 명시된 Secret API 오브젝트만을 참조한다는 뜻이다.
### node.kubernetes.io/exclude-from-external-load-balancer
예시: `node.kubernetes.io/exclude-from-external-load-balancer`
적용 대상: 노드
쿠버네티스는 클러스터에 `ServiceNodeExclusion` 기능 게이트를 자동으로 활성화한다. 해당 기능 게이트가 클러스터에 활성화되어 있으면,
백엔드 서버들로부터 특정 워커 노드를 제외시키도록 레이블을 추가할 수 있다.
다음 명령어는 백엔드 목록에서 워커 노드를 제외시키는 명령어이다.
`kubectl label nodes <node-name> node.kubernetes.io/exclude-from-external-load-balancers=true`
## controller.kubernetes.io/pod-deletion-cost {#pod-deletion-cost}
예시: `controller.kubernetes.io/pod-deletion-cost=10`
@ -207,7 +237,7 @@ kubelet이 호스트네임을 읽어서 이 레이블의 값으로 채운다. `k
실행파일이 CNI의 실행파일 경로(기본적으로 `/opt/cni/bin`) 아래에 포함되어있는지도 확인하자.
{{< /note >}}
Example: `kubernetes.io/ingress-bandwidth: 10M`
예시: `kubernetes.io/ingress-bandwidth: 10M`
적용 대상: 파드
@ -276,6 +306,14 @@ Example: `kubernetes.io/ingress-bandwidth: 10M`
스테이트풀셋 문서의 [파드 이름 레이블](/ko/docs/concepts/workloads/controllers/statefulset/#파드-이름-레이블)에서
상세 사항을 확인한다.
### scheduler.alpha.kubernetes.io/node-selector {#schedulerkubernetesnode-selector}
예시: `scheduler.alpha.kubernetes.io/node-selector: "name-of-node-selector"`
적용 대상: 네임스페이스
[파드-노드 셀렉터(PodNodeSelector)](/docs/reference/access-authn-authz/admission-controllers/#podnodeselector)는 이 어노테이션의 키를 사용하여 네임스페이스의 파드들에 노드 셀렉터를 할당한다.
## topology.kubernetes.io/region {#topologykubernetesioregion}
예시:
@ -323,7 +361,7 @@ _SelectorSpreadPriority_ 는 최선 노력(best effort) 배치 방법이다. 클
이 어노테이션은 사용 중단되었다.
### volume.beta.kubernetes.io/mount-options (deprecated) {#mount-options}
### volume.beta.kubernetes.io/mount-options (사용 중단) {#mount-options}
예시 : `volume.beta.kubernetes.io/mount-options: "ro,soft"`
@ -359,17 +397,22 @@ kubelet이 Microsoft 윈도우에서 실행되고 있다면, 사용 중인 Windo
## kubernetes.io/service-name {#kubernetesioservice-name}
예시: `kubernetes.io/service-name="nginx"`
예시: `kubernetes.io/service-name="my-website"`
적용 대상: 서비스
적용 대상: 엔드포인트슬라이스(EndpointSlices)
쿠버네티스가 여러 서비스를 구분하기 위해 이 레이블을 사용한다. 현재는 `ELB`(Elastic Load Balancer) 를 위해서만 사용되고 있다.
쿠버네티스는 이 레이블을 사용하여 [엔드포인트슬라이스](/docs/concepts/services-networking/endpoint-slices/)와
[서비스](/docs/concepts/services-networking/service/)를 결합한다.
이 레이블은 엔드포인트슬라이스가 지원하는 서비스의 {{< glossary_tooltip term_id="name" text="이름">}}을 기록한다.
모든 엔드포인트슬라이스는 이 레이블을
자신과 연결된 서비스의 이름으로 설정해야 한다.
### kubernetes.io/service-account.name
예시: `kubernetes.io/service-account.name: "sa-name"`
Used on: 시크릿(Secret)
적용 대상: 시크릿(Secret)
이 어노테이션에는 토큰(`kubernetes.io/service-account-token` 타입의 시크릿에 저장되는)이 나타내는
서비스어카운트의 {{< glossary_tooltip term_id="name" text="이름">}}을 기록한다.
@ -383,11 +426,25 @@ Used on: 시크릿(Secret)
이 어노테이션에는 토큰(`kubernetes.io/service-account-token` 타입의 시크릿에 저장되는)이 나타내는
서비스어카운트의 {{< glossary_tooltip term_id="uid" text="고유 ID">}}를 기록한다.
### kubernetes.io/legacy-token-last-used
예시: `kubernetes.io/legacy-token-last-used: 2022-10-24`
적용 대상: 시크릿
컨트롤 플레인은 `kubernetes.io/service-account-token` 타입을 갖는 시크릿에 대해서만 이 레이블을 추가한다.
이 레이블의 값은, 클라이언트가 서비스어카운트 토큰을 사용하여 인증한 요청을
컨트롤 플레인이 마지막으로 확인한 날짜(ISO 8601 형식, UTC 시간대)를 기록한다.
클러스터가 해당 기능을 얻기 전에 기존의 토큰을 마지막으로 사용한 경우(쿠버네티스 v1.26에 추가됨),
이 레이블은 설정되지 않는다.
## endpointslice.kubernetes.io/managed-by {#endpointslicekubernetesiomanaged-by}
예시: `endpointslice.kubernetes.io/managed-by="controller"`
적용 대상: 엔드포인트슬라이스(EndpointSlices)
적용 대상: 엔드포인트슬라이스
이 레이블은 엔드포인트슬라이스(EndpointSlice)를 어떤 컨트롤러나 엔티티가 관리하는지를 나타내기 위해 사용된다. 이 레이블을 사용함으로써 한 클러스터 내에서 여러 엔드포인트슬라이스 오브젝트가 각각 다른 컨트롤러나 엔티티에 의해 관리될 수 있다.
@ -407,7 +464,7 @@ Used on: 시크릿(Secret)
kube-proxy 에는 커스텀 프록시를 위한 이와 같은 레이블이 있으며, 이 레이블은 서비스 컨트롤을 커스텀 프록시에 위임한다.
## experimental.windows.kubernetes.io/isolation-type (deprecated) {#experimental-windows-kubernetes-io-isolation-type}
## experimental.windows.kubernetes.io/isolation-type (사용 중단) {#experimental-windows-kubernetes-io-isolation-type}
예시: `experimental.windows.kubernetes.io/isolation-type: "hyperv"`
@ -474,19 +531,37 @@ kube-controller-manager의 잡(Job) 컨트롤러는
적용 대상: 엔드포인트(Endpoints)
v1.22 이상의 쿠버네티스 클러스터에서, 한 엔드포인트(Endpoints) 리소스가 관리하고 있는 엔드포인트의 수가 1000개 이상이면 엔드포인트 컨트롤러가 해당 엔드포인트 리소스에 이 어노테이션을 추가한다. 이 어노테이션은 해당 엔드포인트 리소스가 용량 초과 되었으며 엔드포인트 컨트롤러가 엔드포인트의 수를 1000으로 줄였음을 나타낸다.
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}은, 연결된 {{< glossary_tooltip text="서비스" term_id="service" >}}에 1000개 이상의 엔드포인트가 있는 경우, 이 어노테이션을 [엔드포인트](/docs/concepts/services-networking/service/#endpoints) 오브젝트에 추가한다. 이 어노테이션은 엔드포인트의 용량이 초과되었거나 엔드포인트의 수가 1000개로 잘렸음을 나타낸다.
## batch.kubernetes.io/job-tracking
백엔드 엔드포인트의 수가 1000개 미만이면, 컨트롤 플레인은 이 어노테이션을 제거한다.
### batch.kubernetes.io/job-tracking (사용 중단) {#batch-kubernetes-io-job-tracking}
예시: `batch.kubernetes.io/job-tracking: ""`
적용 대상: 잡
잡에 어노테이션이 있으면 컨트롤 플레인은 [finalizers를 사용하여 잡 상태 추적](/ko/docs/concepts/workloads/controllers/job/#job-tracking-with-finalizers)
중임을 나타낸다.
어노테이션을 수동으로 추가하거나 제거하지 **않는다**.
잡에 이 어노테이션이 있는 경우, 컨트롤 플레인이
[파이널라이저(finalizer)를 이용하여 잡 상태를 추적](/ko/docs/concepts/workloads/controllers/job/#종료자-finalizers-를-이용한-잡-추적)하고 있음을 나타낸다.
컨트롤 플레인은 이 어노테이션을 사용하여, 아직 기능이 개발 중인 동안
파이널라이저를 사용하여 잡을 추적하도록 안전하게 전환한다.
이 어노테이션을 수동으로 추가하거나 제거해서는 **안 된다**.
## scheduler.alpha.kubernetes.io/preferAvoidPods (deprecated) {#scheduleralphakubernetesio-preferavoidpods}
{{< note >}}
쿠버네티스 1.26 부터, 이 어노테이션은 사용되지 않는다.
쿠버네티스 1.27 과 그 이상의 버전들은 이 어노테이션을 무시할 것이며,
항상 파이널라이저를 사용하여 잡을 추적할 것이다..
{{< /note >}}
### scheduler.alpha.kubernetes.io/defaultTolerations {#scheduleralphakubernetesio-defaulttolerations}
예시: `scheduler.alpha.kubernetes.io/defaultTolerations: '[{"operator": "Equal", "value": "value1", "effect": "NoSchedule", "key": "dedicated-node"}]'`
적용 대상: 네임스페이스
이 어노테이션은 [PodTolerationRestriction](/docs/reference/access-authn-authz/admission-controllers/#podtolerationrestriction) 어드미션 컨트롤러가 활성화되어 있어야 한다. 어노테이션의 키는 네임스페이스에 톨러레이션(toleration)을 할당하는 것을 허용하며, 해당 네임스페이스에 생성되는 모든 파드들은 이 톨러레이션이 부여된다.
## scheduler.alpha.kubernetes.io/preferAvoidPods (사용 중단) {#scheduleralphakubernetesio-preferavoidpods}
적용 대상: 노드
@ -730,7 +805,7 @@ etcd 클라이언트들이 접근할 수 있는 URL 목록을 추적하기 위
### kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint
예시: `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https//172.17.0.18:6443`
예시: `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https://172.17.0.18:6443`
적용 대상: 파드
@ -752,10 +827,20 @@ etcd 클라이언트들이 접근할 수 있는 URL 목록을 추적하기 위
kubeadm이 관리하는 컨트롤 플레인 노드에 적용되는 레이블.
### node-role.kubernetes.io/control-plane
### node-role.kubernetes.io/control-plane {#node-role-kubernetes-io-control-plane-taint}
예시: `node-role.kubernetes.io/control-plane:NoSchedule`
적용 대상: 노드
중요한 워크로드만 스케줄링할 수 있도록 컨트롤 플레인 노드에 적용시키는 테인트.
### node-role.kubernetes.io/master (사용 중단) {#node-role-kubernetes-io-master-taint}
적용 대상: Node
예시: `node-role.kubernetes.io/master:NoSchedule`
이전 버전에서 kubeadm이 컨트롤 플레인에 중요한 워크로드만 스케줄링하기 위해 적용했던 테인트.
[`node-role.kubernetes.io/control-plane`](#node-role-kubernetes-io-control-plane-taint)로 대체되었다.
kubeadm은 더 이상 해당 테인트를 설정하거나 사용하지 않는다.