Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kubernetes
- contatiner
- 시작하세요! 도커 & 쿠버네티스
- 알고리즘
- 도커
- Collection
- 자바 입출력 스트림
- 인프런
- Docker
- 시작하세요 도커 & 쿠버네티스
- LIST
- 리스트
- 쓰레드
- java
- 스레드 제어와 생명 주기
- 멀티 쓰레드
- 쿠버네티스
- 실전 자바 고급 1편
- 컨테이너
- Java IO
- 자료구조
- Thread
- 김영한
- container
- 동시성
- 도커 엔진
- 자바
- 자바 io 보조스트림
- filewriter filereader
- 스레드
Archives
- Today
- Total
쌩로그
[Kubernetes] 쿠버네티스 시작 전 알고가기 본문
반응형
목록
- 포스팅 개요
- 본론
2-1. 모든 리소스는 오브젝트 형태로 관리
2-2. 쿠버네티스는 명령어로도 사용할 수 있지만, YAML 파일을 더 많이 사용한다.
2-3. 쿠버네티스는 여러 개의 컴포넌트로 구성되어 있다. - 요약
1. 포스팅 개요
이 포스팅은 위키북스 출판사의 '시작하세요! 도커/쿠버네티스'의 제 6장 쿠버네티스 시작하기를 학습하며 기록한 포스팅이다.
그 중 쿠버네티스를 시작하기 전 알고가면 될 내용들을 정리했다.
쿠버네티스가 어떻게 사용되어야 하는지, 어떤 식으로 사용되는지에 대한 내용이다.
2. 본론
쿠버네티스를 사용하기 전 알고가면 좋을 사항들이 있다.
2-1. 모든 리소스는 오브젝트 형태로 관리된다
- 쿠버네티스는 대부분의 리소스를 '오브젝트'라고 불리는 형태로 관리한다.
- '오브젝트'
- 도커 스웜 모드에서 컨테이너의 묶음을 표현하기 위해 서비스(service)라는 것을 사용하는데, 스웜 모드의 서비스도 컨테이너 리소스의 집합을 정의한 것이기 때문에 일종의 오브젝트라고 볼 수 있다.
- 쿠버네티스는 이러한 개념을 더욱 폭넓고 세밀한 단위로 사용한다.
- 쿠버네티스에서는 컨테이너의 집합(Pods), 컨테이너의 집합을 관리하는 컨트롤러(Replica Set), 심지어 사용자(Service Account), 노드(Node)까지도 하나의 오브젝트로 사용할 수 있다.
쿠버네티스에서 사용할 수 있는 오브젝트 확인
다음 명령어로 확인할 수 있다.
kubectl api-resources
NAME SHORTNAMES APIVERSION
NAMESPACED KIND
bindings v1
true Binding
componentstatuses cs v1
false ComponentStatus
configmaps cm v1
true ConfigMap
endpoints ep v1
true Endpoints
events ev v1
true Event
...
근데 진짜 겁나 많다....
- 이렇게 많은 종류의 오브젝트를 이 책에서 전부 다루지 않는다.
- 모든 종류와 이름을 외우려고 노력하지 않아도 된다.
- 자주 사용하는 오브젝트들은 책의 내용을 따라 하면서 자연스럽게 이름과 기능을 외울 수 있기 때문이다.
- 또한 쿠버네티스 공식 문서에서 대부분의 리소스 오브젝트의 사용 방법을 친절하게 설명하고 있기 때문에 처음 보는 오브젝트라도 당황하지 말고 필요에 따라 배우고 익히면 된다.
특정 오브젝트의 간단한 설명을 보고 싶다면 kubectl explain을
특정 오브젝트의 간단한 설명을 보고 싶다면 kubectl explain 명령어를 사용하면 된다.
$ kubectl explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind <string>
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata <ObjectMeta>
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec <PodSpec>
Specification of the desired behavior of the pod. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status <PodStatus>
Most recently observed status of the pod. This data may not be up to date.
Populated by the system. Read-only. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2-2. 쿠버네티스는 명령어로도 사용할 수 있지만, YAML 파일을 더 많이 사용한다
- 쿠버네티스에서도 마찬가지로
kubectl
이라고 하는 명령어로 쿠버네티스를 사용할 수 있으며, 대부분의 작업은kubectl
명령어로 실행할 수 있다.- 도커 스웜 모드에서는
docker service create...
와 같은 명령어로 컨테이너 서비스를 생성하고 삭제한다.- 스웜 모드에서 스택(stack)을 생성하기 위해 YAML 파일을 사용했던 것처럼 쿠버네티스도 YAML 파일로 컨테이너 리소스를 생성하거나 삭제할 수 있다.
- 그러나 쿠버네티스에서 YAML 파일의 용도는 컨테이너뿐만 아니라 거의 모든 리소스 오브젝트들에 사용될 수 있다는 것이 가장 큰 특징이다.
- 예를 들어 컨테이너 자체는 물론이고, 컨테이너의 설정값(ConfigMap), 비밀값(Secrets) 등 도 모두 YAML 파일로 정의해 사용한다
- 쿠버네티스에서 실제로 서비스를 배포할 때에도
kubectl
명령어가 아닌 여러 개의 YAML 파일을 정의해 쿠버네티스에 적용시키는 방식으로 동작한다.
- 도커 스웜 모드에서는

따라서 쿠버네티스를 잘 사용하는 방법= 'YAML 파일을 잘 작성하는 것' 이다.
해당 책에서 이후에 다룰 모든 리소스 오브젝트는 기초적인 부분을 제외하면 대부분 YAML 파일로 작성하며 진행한다.
2-3. 쿠버네티스는 여러 개의 컴포넌트로 구성되어 있다.
- 쿠버네티스 노드의 역할은 크게 마스터와 워커로 나뉘어져 있다.
- 마스터 노드는 쿠버네티스가 제 대로 동작할 수 있게 클러스터를 관리하는 역할을 담당한다.
- 워커 노드에는 애플리케이션 컨테이너가 생성된다.
- 도커 스웜 모드를 사용할 때는 단일 도커 데몬만을 설치해 사용했지만, 쿠버네티스는 도커를 포함한 매우 많은 컴포넌트들이 실행된다.
- 예)
- 마스터 노드에서는 API 서버(kube-apiserver), 컨트롤러 매니저(kube-controller-manager), 스케줄러(kube-scheduler), DNS 서버(coreDNS) 등이 실행
- 모든 노드에서는 오버레이 네트워크 구성을 위해 프락시(kubeproxy)와 네트워크 플러그인(calico, flannel 등)이 실행된다.
- 이러한 컴포넌트들은 기본적으로 컨테이너로서 실행되고 있다.
- 마스터 노드에 SSH로 접속해 crictl 명령어를 실행해보면 매우 많은 컨테이너가 실행되고 있는 것을 확인할 수 있다.
- 예)
# 안 되면 sudo 를 앞에 붙이자.
$ crictl --runtime-endpoint unix:///run/containerd/containerd.sock ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD NAMESPACE
711b0dda8ec1f dc4a8a56c133e 17 hours ago Running tigera-operator 0 7f91cbdd62076 tigera-operator-ccfc44587-4mmc4 tigera-operator
f5e799efbe05b f1332858868e1 17 hours ago Running kube-proxy 0 c1e8f0397bffe kube-proxy-lmtq6 kube-system
91257a6a823eb b6a454c5a800d 17 hours ago Running kube-controller-manager 0 fd747ad58da2a kube-controller-manager-kuber-master kube-system
b7f3197f66c83 a9e7e6b294baf 17 hours ago Running etcd 0 008ad01926e35 etcd-kuber-master kube-system
01b7d790bb31f 85b7a174738ba 17 hours ago Running kube-apiserver 0 dda9ca16083c3 kube-apiserver-kuber-master kube-system
0c2c03c309ed6 d8e673e7c9983 17 hours ago Running kube-scheduler 0 e5aeaa73c4344 kube-scheduler-kuber-master kube-system
Docker Desktop for Windows/Mac에서는 Preferences에서 [Kubernetes]
탭을 선택한 다음 Show system containers
항목에 체크하면 docker ps
의 출력에서 쿠버네티스의 컴포넌트 컨테이너를 확인할 수 있다.
단 쿠버네티스에 대한 자세한 지식 없이는 핵심 컴포넌트를 건드리지 않는 것이 좋다..!!
- 쿠버네티스 클러스터 구성을 위해
kubelet
이라는 에이전트가 모든 노드에서 실행된다. kubelet
은 컨테이너의 생성, 삭제뿐만 아니라 마스터와 워커 노드 간의 통신 역할을 함께 담당하는 매우 중요한 에이전트다.- 따라서
kubelet
이 정상적으로 실행되지 않으면 해당 노드는 쿠버네티스와 제대로 연결되지 않을 수도 있다. - 쿠버네티스의 입장에서 보면 컨테이너 런타임 인터페이스를 제공하는
containerd
나cri-o
, 또는도커 데몬
또한 하나의 컴포넌트다. - 도커 스웜모드와 달리 쿠버네티스는 도커에 내장된 기능이 아니며, 오히려 컨테이너를 사용하기 위해 쿠버네티스가 다른 컴포넌트를 이용하는 방식이다.
- 따라서 쿠버네티스에서 반드시 containerd를 사용해야 할 필요는 없으며, OCI(Open Container Initiative)라는 컨테이너 런타임 표준을 구현한 컨테이너 런타임을 갖추고 있다면 어느 것을 써도 문제는 없다.
- 따라서
참고
컨테이너 런타임 인터페이스(Container Runtime Interface)는 kubelet
이 컨테이너를 제어하기 위한 인터페이스를 의미한다.
컨테이너 런타임 인터페이스의 개념에 대해 좀 더 알고 싶다면 쿠버네티스 공식 문서 및 블로그를 참고하자.
- 참고로 이렇게 많고 복잡한 컴포넌트의 구조를 지금 당장 외우거나 이해하려고 하지 않아도 됩니다.
- 이러한 것들을 자세히 알지 못해도 쿠버네티스의 기능을 익히는 것에는 큰 문제가 없으며, 필요할 때마다 쿠버네티스의 기능과 컴포넌트를 함께 엮어서 설명한다.
- 지금은
kubelet
이라는 에이전트가 모든 노드에서 기본적으로 실행되며, 마스터 노드에는 API 서버 등이 컨테이너로 실행된다' 정도만 알고 넘어가면 된다.
3. 요약
- 쿠버네티스의 모든 리소스는 오브젝트 형태로 관리된다.
- 명령어보단 YAML 파일을 더 많이 사용한다.
- 쿠버네티스는 여러 개의 컴포넌트로 구성되어 있다.
kubelet
에이전트는 모든 노드에서 기본적으로 실행되며, 마스터 노드에는 API 서버 등이 컨테이너로 실행된다.
728x90
'Deploy > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 디플로이먼트(Deployment) (0) | 2025.03.04 |
---|---|
[Kubernetes] 쿠버네티스 레플리카셋(ReplicaSet) (14) | 2025.02.25 |
[Kubernetes] 쿠버네티스 파드(Pod) (4) | 2025.02.25 |
[Kubernetes] 쿠버네티스 설치 (1) | 2025.02.25 |
[Kubernetes] 쿠버네티스의 특징 (0) | 2025.02.24 |
Comments