Closed guswns1659 closed 2 months ago
용도:
동작에 대한 영향:
메타데이터 저장:
외부 도구와의 통합:
자동화 및 스크립팅:
버전 관리 및 추적:
객체 수명 주기 관리:
Kubernetes에서 서비스 계정(Service Account)은 파드가 API 서버와 상호작용할 때 사용하는 인증 수단입니다. 서비스 계정은 파드에 필요한 권한을 부여하고, 안전하게 API 서버와 통신할 수 있도록 합니다.
서비스 계정 생성:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
namespace: default
파드에 서비스 계정 할당:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
serviceAccountName: my-service-account
containers:
- name: mycontainer
image: myimage
Role과 RoleBinding을 통한 권한 부여:
Role 생성:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
RoleBinding 생성:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
파드 내부에서 실행되는 애플리케이션이 자신의 로그를 조회하기 위해 API 서버와 통신할 수 있습니다. 이때, 파드는 서비스 계정의 인증 토큰을 사용하여 API 서버와 안전하게 통신합니다.
파드 내부에서 인증 토큰을 사용하여 API 서버와 통신할 때, 인증 토큰은 HTTP 요청의 Authorization
헤더에 포함됩니다. 예를 들어, Authorization: Bearer <토큰>
형식으로 사용됩니다.
serviceAccountName
필드를 사용하여 서비스 계정을 할당합니다.Kubernetes의 QoS 클래스(Quality of Service Class)는 파드의 자원 요청(request)과 자원 제한(limit)에 따라 파드의 우선순위를 결정하고, 클러스터 자원이 부족할 때 자원 할당의 우선순위를 결정합니다. QoS 클래스는 Guaranteed, Burstable, BestEffort의 세 가지로 나뉩니다.
apiVersion: v1
kind: Pod
metadata:
name: guaranteed-pod
spec:
containers:
- name: mycontainer
image: myimage
resources:
requests:
memory: "50Mi"
cpu: "250m"
limits:
memory: "50Mi"
cpu: "250m"
apiVersion: v1
kind: Pod
metadata:
name: burstable-pod
spec:
containers:
- name: mycontainer
image: myimage
resources:
requests:
memory: "30Mi"
cpu: "250m"
limits:
memory: "150Mi"
cpu: "500m"
apiVersion: v1
kind: Pod
metadata:
name: besteffort-pod
spec:
containers:
- name: mycontainer
image: myimage
물론입니다. 자원 제한(limits)을 초과할 때 발생하는 상황만 남겨서 설명드리겠습니다.
파드가 CPU 자원 제한을 초과하려고 할 때, 사용 가능한 CPU 자원 내에서 실행되도록 제한됩니다.
apiVersion: v1
kind: Pod
metadata:
name: cpu-limit-pod
spec:
containers:
- name: mycontainer
image: myimage
resources:
requests:
cpu: "500m"
limits:
cpu: "1"
파드가 메모리 자원 제한을 초과하려고 할 때, 컨테이너가 종료되고 Kubernetes가 이를 재시작합니다.
apiVersion: v1
kind: Pod
metadata:
name: memory-limit-pod
spec:
containers:
- name: mycontainer
image: myimage
resources:
requests:
memory: "128Mi"
limits:
memory: "256Mi"
CPU 자원:
메모리 자원:
자원 제한을 적절히 설정하여 파드의 안정적인 동작을 보장하는 것이 중요합니다. 추가적인 질문이 있으시면 말씀해 주세요!
Taints: "오염" 또는 "더럽힘"을 의미합니다. Kubernetes에서 테인트는 노드에 적용되어 특정 파드가 해당 노드에서 실행되지 않도록 하는 메커니즘입니다. 즉, 노드에 '오염'을 표시하여 특정 파드를 멀리하게 만듭니다.
Tolerations: "관용" 또는 "용인"을 의미합니다. Kubernetes에서 톨러레이션은 파드가 특정 테인트를 '관용'하여 무시하고 해당 노드에서 실행될 수 있도록 하는 메커니즘입니다. 즉, 파드가 노드의 '오염'을 용인하고 해당 노드에서 실행될 수 있도록 합니다.
Kubernetes에서 Tolerations는 파드가 특정 테인트(taint)를 가진 노드에서 실행될 수 있도록 허용하는 방법입니다. Tolerations와 taints는 함께 사용되어 특정 파드가 특정 노드에 스케줄링되는 것을 제어하는 중요한 메커니즘을 형성합니다. 이는 노드의 자원을 효율적으로 사용할 수 있게 하며, 특정 조건에서 파드를 격리하거나 우선순위를 설정하는 데 유용합니다.
kubectl taint nodes <node-name> key=value:effect
NoSchedule
, PreferNoSchedule
, NoExecute
중 하나가 될 수 있습니다.톨러레이션을 통해 파드가 특정 테인트를 무시하도록 설정할 수 있습니다. 톨러레이션은 파드의 스펙에 정의됩니다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
containers:
- name: mycontainer
image: myimage
Equal
(기본값) 또는 Exists
가 될 수 있습니다.NoSchedule
, PreferNoSchedule
, NoExecute
중 하나입니다.NoExecute
효과에만 적용되며, 파드가 노드에서 얼마나 오래 허용될지를 지정합니다.NoSchedule:
PreferNoSchedule:
NoExecute:
tolerationSeconds
필드가 지정된 경우, 지정된 시간 동안만 파드가 해당 노드에 남아 있을 수 있습니다.kubectl taint nodes node1 key1=value1:NoSchedule
위 명령어는 node1
에 key1=value1
이라는 테인트를 추가하고, NoSchedule
효과를 적용합니다. 이는 톨러레이션이 없는 파드가 node1
에 스케줄링되지 않도록 합니다.
파드가 해당 노드에 스케줄링될 수 있도록 톨러레이션을 추가합니다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
containers:
- name: mycontainer
image: myimage
위 설정은 key1=value1
테인트를 가진 노드에 NoSchedule
효과가 있어도 mypod
가 스케줄링될 수 있도록 합니다.
Kubernetes에서 볼륨은 파드 내 여러 컨테이너가 데이터를 공유할 수 있게 하거나, 파드가 종료되더라도 데이터를 지속적으로 저장할 수 있게 합니다. 볼륨은 컨테이너의 라이프사이클을 초과하여 데이터를 유지할 수 있으므로, 컨테이너 재시작, 재배포 등의 상황에서도 데이터를 보존하는 데 유용합니다.
Ephemeral Volumes (휘발성 볼륨):
emptyDir
, configMap
, secret
Persistent Volumes (영구 볼륨):
persistentVolumeClaim
, hostPath
emptyDir
apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- mountPath: /data
name: myvolume
volumes:
- name: myvolume
emptyDir: {}
hostPath
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- mountPath: /data
name: myvolume
volumes:
- name: myvolume
hostPath:
path: /mnt/data
type: Directory
configMap
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- mountPath: /config
name: config-volume
volumes:
- name: config-volume
configMap:
name: myconfigmap
secret
apiVersion: v1
kind: Pod
metadata:
name: secret-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- mountPath: /secrets
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: mysecret
persistentVolumeClaim
apiVersion: v1
kind: Pod
metadata:
name: pvc-pod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- mountPath: /data
name: pvc-volume
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: mypvc
데이터 공유:
데이터 영속성:
설정 및 시크릿 관리:
emptyDir
등).persistentVolumeClaim
등).Kubernetes의 네임스페이스는 클러스터 내에서 논리적인 격리 단위를 제공하여 리소스를 그룹화하고 관리하는 데 사용됩니다. 네임스페이스는 여러 팀이나 프로젝트가 동일한 클러스터를 공유하면서도 리소스를 분리하고 관리할 수 있게 합니다. ResourceQuota는 특정 네임스페이스 내에서 사용할 수 있는 리소스의 총량을 제한하고 관리하는 데 사용됩니다.
리소스 격리:
리소스 할당:
액세스 제어:
이름 충돌 방지:
네임스페이스 단위 적용:
자원 사용 제한:
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
kubectl apply -f namespace.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-quota
namespace: mynamespace
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "10"
limits.memory: "16Gi"
kubectl apply -f resourcequota.yaml
Requests:
Limits:
Requests:
Limits:
파드 생성 및 자원 요청:
requests.memory: 8Gi
로 설정된 경우, 네임스페이스 내 모든 파드의 자원 요청(memory)이 8Gi를 초과할 수 없습니다.자원 요청 초과 시:
실행 중인 파드 자원 사용:
팟이 아닌 노드에서 실행되는 에이전트로 노드에 접속해서 프로세스로 떠있다.
큰 개념
궁금한거 1순위
궁금한거 2순위