1. 기본 개념
1) namespace
(1) Kubernetes 에서 사용하는 가상 클러스터로 여러 리소스를 논리적으로 분리하여그룹 관리한다.
(2) 조회
kubectl get namespace
kubectl get ns
(3) 생성
kubectl create ns <Namespace Name>
kubectl create namespace <Namespace Name>
(4) 각각의 리소스에 명령을 수행할 때 namespace를 지정한다. 지정하지 않을 시 default로 지정된 namespace로 자동 지정된다.
A. ctl
kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>
kubectl get pods --namespace=<insert-namespace-name-here>
B. yaml
apiVersion: minio.min.io/v2
kind: Tenant
metadata:
creationTimestamp: null
name: minio-s3
namespace: minio-local
(5) default namespace를 변경할 수 있다.
kubectl config set-context --current --namespace=<insert-namespace-name-here>
# 확인하기
kubectl config view --minify | grep namespace:
(6) 삭제 : namespace를 삭제 시 namespace에 속한 모든 리소스가 삭제된다.
kubectl delete ns <Namespace Name>
kubectl delete namespace <Namespace Name>
(7) 대부분의 리소스가 namespace에 속해있으나 node나 pvc같은 경우는 namespace가 존재하지 않는다. 다음과 같은 방법으로 해당 리소스에 대한 조회가 가능하다.
# 네임스페이스에 속하는 리소스
kubectl api-resources --namespaced=true
# 네임스페이스에 속하지 않는 리소스
kubectl api-resources --namespaced=false
2) pod
(1) kubernetes에서 관리하는 배포된 컴퓨팅
(2) 하나 이상의 컨테이너 그룹
(3) docker-compose와 비슷한 기능을 한다.
(4) 특징
A. Pod 내 Container 는 IP와 Port를 공유한다.
B. Pod 내 배포된 컨테이너 간에는 volume을 공유할 수 있다.
(5) yaml 예제
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
# 여기서부터 파드 템플릿이다
spec:
containers:
- name: hello
image: busybox
command: ['sh',
'-c', 'echo "Hello, Kubernetes!" && sleep 3600']
restartPolicy: OnFailure
# 여기까지 파드 템플릿이다
(6) 조회
# 기본적인 조회
kubectl get pods -A
# 상세 조회 (이벤트 조회도 가능)
kubectl describe pods -A
3) Deployment
(1) Pod 또는 RepliacaSet을 여러 개 동시 생성하고 관리하는 단위
(2) Pod 배포를 위해 RC 생성하고 관리하는 역할을 하며, 특히 롤백을 위한 기존 버전의 RC관리 등 여러가지 기능을 포괄적으로 포함
(3) yaml 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
nginx webserver replica를 3개 동시에 만들어서 관리
4) Service
(1) Pod 내 여러 Container를 하나의 IP 및 port로 연결되도록 하는 서비스
(2) Pod가 재생성이 될 시 IP 주소가 변경되기 때문에 IP를 지정하는 것이 어렵기 때문에 Label 과 Label Selector라는 개념을 이용한다.
(3) yaml 예제
apiVersion: v1
kind: Service
metadata:
name: minio-service
spec:
type: LoadBalancer
ports:
- port: 9000
targetPort: 9000
protocol: TCP
selector:
app: minio
A. type
i. ClusterIP : 서비스를 클러스터 내부 IP에 노출 시켜 클러스터 내부에서 접근 Default 타입
ii. NodePort : 고정 Port로 각 노드 IP에 서비스를 노출하여 각 노드에 <Node IP>:<Node Port>로 접근 가능하도록 만든다.
iii. LoadBalancer : 서비스를 외부에 노출 시키는 역할을 함
iv. ExternalName : 서비스를 PQDN으로 맵핑
5) Volume
(1) Pod에서 사용하는 따로 정의된 디스크
A. Pod 마다 해당 volume을 직접 생성
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
Pod 선언 시 해당 Volume 생성되기 때문에 Pod 삭제 시 데이터도 분실거나 Node 삭제 시 데이터가 유실된다.
(2) PVC를 이용
A. StorageClass : Persistent Volume을 생성할 때 사용하는 Storage의 형태를 정의해 놓을 Class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
B. Persistent Volume Claim(PVC) : PV를 연결하기 위한 가상화된 Volume Connector
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
labels:
app: storage-claim
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
C. Persistent Volume(PV) : 컴퓨팅 인스턴스와 관계없이 관리하는 별개의 볼륨
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-data1
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data1"
2. 출처
1) https://kubernetes.io/docs/concepts/workloads/pods/
2) https://kubernetes.io/docs/concepts/services-networking/service/
3) https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
4) https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims
5) https://kubernetes.io/ko/docs/concepts/storage/storage-classes/
6) https://m.blog.naver.com/freepsw/222005161870
7) https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/namespaces/
'Cloud > Kubernetes' 카테고리의 다른 글
kubernetes helm chart 이용하기 (0) | 2021.08.06 |
---|---|
Krew 설치 및 사용법 (0) | 2021.07.05 |
Kubernetes Web UI 설치 및 계정 생성 로그인 (0) | 2021.07.01 |
Kubernetes 설치와 runtime 이슈 (0) | 2021.06.30 |
최근댓글