Closed guswns1659 closed 2 months ago
Kubernetes에서 kubectl
을 사용하여 Pod를 생성하는 방법은 다음과 같습니다:
YAML 파일로 생성:
pod.yaml
파일 작성:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginx
ports:
- containerPort: 80
kubectl apply -f pod.yaml
명령어 한 줄로 생성:
kubectl run mypod --image=nginx --restart=Never
Pod 상태 확인:
kubectl get pods
Pod 상세 정보 확인:
kubectl describe pod mypod
Kubernetes API 서버가 Pod 생성 명령을 받으면, 이 명령을 etcd에 저장하는 과정은 다음과 같은 일련의 단계를 거칩니다. 아래는 이 과정을 설명하는 예시입니다.
kubectl 명령 실행:
kubectl apply -f pod.yaml
API 서버가 명령을 수신:
kubectl
명령을 실행하면, 클라이언트는 API 서버에 HTTP 요청을 보냅니다.POST /api/v1/namespaces/default/pods
API 서버가 요청을 처리:
etcd에 데이터 저장:
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "mypod",
"namespace": "default",
"uid": "12345678-1234-1234-1234-123456789abc",
"resourceVersion": "12345",
"creationTimestamp": "2024-06-21T12:00:00Z"
},
"spec": {
"containers": [
{
"name": "mycontainer",
"image": "nginx",
"ports": [
{
"containerPort": 80
}
]
}
]
},
"status": {
"phase": "Pending"
}
}
etcd의 저장 구조:
/registry/pods/default/mypod
와 같은 형식이 됩니다.API 서버의 응답:
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "mypod",
"namespace": "default",
"uid": "12345678-1234-1234-1234-123456789abc",
"resourceVersion": "12345",
"creationTimestamp": "2024-06-21T12:00:00Z"
},
"spec": {
"containers": [
{
"name": "mycontainer",
"image": "nginx",
"ports": [
{
"containerPort": 80
}
]
}
]
},
"status": {
"phase": "Pending"
}
}
이러한 과정으로 API 서버는 kubectl
명령을 통해 받은 Pod 생성 요청을 처리하고, 해당 정보를 etcd에 저장하게 됩니다. etcd는 Kubernetes 클러스터의 모든 상태 정보를 저장하는 중앙 저장소 역할을 합니다.
Kubernetes에서 etcd의 key가 /registry/
로 시작하는 이유는 Kubernetes의 리소스를 구조화하고 네임스페이스와 다른 리소스 타입을 구분하기 위해 사용됩니다. 이를 통해 Kubernetes는 다양한 리소스 유형을 체계적으로 관리할 수 있습니다.
키 구조화 및 조직화:
/registry/
접두사는 Kubernetes 리소스를 구분하는 데 사용됩니다.예시:
/registry/pods/default/mypod
: 기본 네임스페이스에 있는 mypod
Pod의 정보./registry/services/default/myservice
: 기본 네임스페이스에 있는 myservice
서비스의 정보./registry/namespaces/default
: 기본 네임스페이스 자체의 정보.효율적인 검색 및 관리:
/registry/pods/
아래의 모든 키를 검색하면 됩니다.네임스페이스와 리소스 타입 분리:
이러한 구조화된 접근 방식을 통해 Kubernetes는 효율적으로 리소스를 관리하고, 확장 가능한 클러스터 관리 기능을 제공합니다.
kubectl
이 Kubernetes API 서버와 통신하기 위해 HTTP 요청을 생성하는 과정은 다음과 같습니다:
kubectl 명령 실행:
kubectl
명령어를 실행합니다. 예를 들어, kubectl apply -f pod.yaml
명령을 실행합니다.API 서버와의 통신 설정:
kubectl
은 ~/.kube/config
파일에서 API 서버의 주소와 인증 정보를 읽어옵니다. 이 파일에는 클러스터 정보, 사용자 인증 정보, 컨텍스트 등이 포함됩니다.HTTP 요청 생성:
kubectl
은 사용자가 입력한 명령을 바탕으로 HTTP(S) 요청을 생성합니다. 예를 들어, kubectl apply -f pod.yaml
명령은 YAML 파일을 읽고, API 서버에 POST
요청을 보냅니다.API 서버로 요청 전송:
API 서버의 요청 처리:
응답 반환:
kubectl
은 이 응답을 받아 사용자에게 출력합니다.예시:
kubectl 명령어:
kubectl apply -f pod.yaml
~/.kube/config 파일 예시:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /path/to/ca.crt
server: https://example.com:6443
name: my-cluster
contexts:
- context:
cluster: my-cluster
user: my-user
namespace: default
name: my-context
current-context: my-context
kind: Config
preferences: {}
users:
- name: my-user
user:
client-certificate: /path/to/client.crt
client-key: /path/to/client.key
HTTP 요청 생성 및 전송:
kubectl
은 위 설정 파일을 사용하여 API 서버의 주소(https://example.com:6443
)와 인증 정보를 가져와 HTTP 요청을 생성합니다.POST /api/v1/namespaces/default/pods
와 같은 요청을 생성하여 Pod를 생성하도록 API 서버에 보냅니다.이러한 과정을 통해 kubectl
이 HTTP 요청을 생성하고 API 서버와 통신하는 것을 알 수 있습니다. kubectl
의 내부 코드는 Kubernetes의 client-go
라이브러리를 사용하여 HTTP 요청을 생성하고 처리합니다. 해당 코드는 Kubernetes의 GitHub 리포지토리에서 확인할 수 있습니다.
kubectl apply
명령어로부터 ReplicaSet Controller가 Pod를 생성하는 과정Kubernetes에서 kubectl apply -f deployment.yaml
명령어를 실행하면, Deployment 객체가 생성되고, 이어서 ReplicaSet Controller가 Pod를 생성하는 일련의 과정을 다음과 같이 요약할 수 있습니다:
kubectl apply
명령 실행:
kubectl apply -f deployment.yaml
명령어를 실행합니다.kubectl
은 YAML 파일을 읽고, 이를 JSON 형식으로 변환하여 Kubernetes API 서버에 HTTP 요청으로 보냅니다.API 서버 처리:
Deployment Controller:
ReplicaSet Controller:
이 과정을 통해 Kubernetes는 클러스터의 상태를 원하는 대로 유지하고 관리합니다.
Kubernetes에서 스케줄러와 kubelet이 Pod를 생성하고 실행하는 전체 과정을 정리하면 다음과 같습니다:
Pod 객체 감지:
Pending
상태의 Pod 객체를 감지합니다.노드 선택:
Pod 스케줄링:
Pod 감지 및 다운로드:
컨테이너 이미지 다운로드:
Pod 생성:
상태 보고:
Pending
에서 Running
으로 변경됩니다.스케줄러:
Pending
상태의 Pod 객체를 감지.kubelet:
Pending
상태에서 Running
상태로 변경.이 과정을 통해 Kubernetes는 클러스터의 상태를 효율적으로 관리하고, Pod가 적절한 노드에서 실행될 수 있도록 합니다.
Kubernetes Scheduler | Kubernetes Documentation (Production-Grade Container Orchestration) How the Kubernetes scheduler works | Opensource.com (Opensource.com) Kubernetes Cluster & Process Flow of a POD creation - Blogs, Ideas, Train of Thoughts (Blogs, Ideas, Train of Thoughts)
코멘트로 하나씩 작성