일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Amazon VPC
- ReplicaSet
- Terraform
- ConfigMap
- Amazon Route 53
- k8s
- Kubernetis
- ansible
- Heartbleed
- SSL 인증서
- deployment
- docker
- classmethod
- CI CD
- Amazon GuardDuty
- taint
- Industry Week 2023
- mariaDB
- DaemonSet
- Amazon RDS
- Amazon DynamoDB
- AWS
- DevOps
- AWS Security Hub
- AWS EC2
- Terraform state
- Cognito
- staticmethod
- Backend
- Python
- Today
- Total
Nubes et Stella
Kubernetis #06 (Namespace/(Cron)Job) 본문
01. Kubernetis Namespace란?
쿠버네티스 상의 API 오브젝트들을 논리적으로 구분하여 관리하기 위한 작업공간이다. 단순 분류뿐만 아니라 해당 논리적인 그룹에 대하여 권한 관리, CPU & Memory 등 리소스 제한 등을 할수도 있다.
** 네임스페이스 특징
- 리소스를 논리적으로 나누기 위한 방법 제공 (논리적 그룹)
- 네임스페이스의 단위는 사용자 목적에 맞추어 결정
- 팀 단위 네임스페이스
- 환경 단위 네임스페이스
- 서비스 단위 네임스페이스
네임스페이스 범위 API 리소스
- 네임스페이스에 속할 수 있는 리소스를 네임스페이스 범위 API리소스라고 함
Ex.) Pod, Deployment, Service, Ingress, Secret, ConfigMap, ServiceAccount, Role, RoleBinding 등
클러스터 범위 API 리소스
Ex.) Node, Namespace, IngressClass, PriorityClass, ClusterRole, ClusterRoleBinding 등
클러스터 기본 Namespace
쿠버네티스 클러스터를 생성하고 나면 기본적으로 만들어져 있는 네임스페이스
default
- 네임스페이스를 지정하지 않은 경우에 기본적으로 할당되는 네임스페이스
kube-system
- 쿠버네티스 시스템에 의해 생성되는 API 오브젝트들을 관리하기 위한 네임스페이스
kube-public
- 클러스터 내 모든 사용자로부터 접근 가능하고 읽을 수 있는 오브젝트들을 관리하기 위한 네임스페이스
kube-node-lease
- 쿠버네티스 클러스터 내 노드의 연결 정보를 관리하기 위한 네임스페이스
쿠버네티스의 Domain Search
다른 네임스페이스의 서비스와 통신하기 위해서는 서비스명뿐만 아니라 네임스페이스명이 필요하다. 실제 다른 서비스와 통신할 경우 쿠버네티스의 DNS는 다른 네임스페이스에 대해서도 질의하게 된다.
$ curl ${service}.${namespace}.svc.cluster.local
$ curl ${service}.${namespace}.svc
$ curl ${service}.${namespace}
$ curl ${service}
$ kubectl create namespace alpha
- "alpha" 라는 이름의 네임스페이스를 생성한다.
$ kubectl apply -f . -n alpha
- 전체 yaml 파일에 대해서 리소스를 생성하는데, -n 옵션으로 네임스페이스를 지정한다.
- DNS에 의해 다른 네임스페이스의 Pod끼리 통신이 되는 것을 볼 수있다.
ResourceQuota와 LimitRange
- 네임스페이스 단위의 자원 사용량을 관리할 수 있는 기능을 제공한다.
ResourceQuota
- 할당할 수 있는 자원(CPU, Memory, Volume 등)의 총합 제한
- 생성할 수 있는 리소스(Pod, Service, Deployment 등)의 개수 제한
LimitRange
- 파드 혹은 컨테이너에 대하여 자원 기본 할당량 설정, 혹은 최대 / 최소 할당량을 설정
- 네임스페이스를 생성 한다.
- 특정 네임스페이스(syhan)에 대한 "limit-range / resource-quota yaml" 파일을 생성 후 apply 한다.
- "limit-range / resource-quota yaml" 가 적용된 네임스페이스를 확인한다.
- "limit-range" 값을 초과하는 Pod를 생성하려고 할 경우 "Error" 메시지를 출력한다.
02. Kubernetis (Cron)Job이란?
가. Job
- 특정 동작을 수행하고 종료하는 작업을 정의하기 위한 리소스
- 내부적으로 파드를 생성하여 작업을 수행
- Pod의 상태가 Running이 아닌 Completed가 되는 것이 최종 상태
- 실패시 재시작 옵션, 작업 수행 회수, 동시 실행 수 등 세부 옵션 제공
나. CronJob
- 주기적으로 특정 동작을 수행하고 종료하는 작업을 정의하기 위한 리소스
- 리눅스의 크론(Cron) 스케줄링 방법을 그대로 사용
- 내부적으로 잡을 생성하여 작업을 수행
- 주기적으로 데이터를 백업하거나 데이터 점검 및 알림 전송 등의 목적으로 사용
Job 구현
- line 2 : kind 인자에 "Job"을 넣는다.
- line 8 : "restartPolicy" 인자는 해당 Pod를 계속 재시작 하는지를 결정한다. (job는 한번만 실행하기 때문에 Never)
- 위의 Job을 apply해서 Pod를 성공적으로 생성시키면 "Completed" 상태의 Pod가 생성된다.
- 실행한 Job의 로그를 확인하면($kubectl logs...), 실행된 명령어의 결과가 표기된다.
- Job을 실행할 경우 총 실행 성공 횟수(completions)와, 최대 동시 실행 횟수(parallelism)를 설정할 수 있다.
- 아래의 코드는 2개의 Pod를 동시실행 시켜 총 10개의 Pod를 실행시킨다.
- Job으로 생성된 Pod의 실행 시간을 제한할 수 있다.
- activeDeadlineSeconds 인자를 통해서 최대 실행을 3초로 설정한다.
CronJob 구현
- line 6 : spec.schedule 인자에 리눅스와 동일한 Cron Expression이 적용 된다. (1분 단위로 실행)
- line 7 : successfulJobsHistoryLimit 옵션을 통해서 Job 실행 기록을 최대 5개까지 생성
- line 8 : CronJob은 Job오브젝트를 생성하기 때문에 jobTemplate 인자가 존재
- CronJob은 스케줄에 지정된 시간마다 Job을 실행하기 때문에 아래와 같이 Job이 1분 단위로 생성된다.
- Cronjob이 생성한 Job이 최종적으로 Pod를 생성한다.
- END -
'DevOps > Kubernetis' 카테고리의 다른 글
Kubernetis #07 (DaemonSet) (0) | 2023.10.28 |
---|---|
Kubernetis #05 (ConfigMap/Secret) (0) | 2023.10.19 |
Kubernetis #04 (Deployment/Service) (0) | 2023.10.15 |
Kubernetis #03 (Pod/ReplicaSet) (0) | 2023.10.14 |
Kubernetis #02 (Install) (0) | 2023.10.14 |