Table of Contents
k8s 에서 curl 을 사용하여 cronjob 등록하기
배경
종종 쿠버네티스 클러스터에서 cronjob 을 활용할 일이 있는데 간단하게 curl 명령어 한번만 실행하면 되는 경우가 있다.
이럴 때 사용하기 위한 alpine 기반의 curl 이미지를 사용하는 방법에 대해서 알아보았다.
k8s cronjob
쿠버네티스의 오브젝트 중에서 cronjob
오브젝트는 yml 에 정의된 스케줄에 맞게 지정한 이미지를 기반으로 명령어를 실행하는 오브젝트다.
나는 다음과 같은 형식으로 사용하고 있다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob-name
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: my-cronjob-name-pod-name
image: curlimages/curl:7.77.0
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- |
curl -X "POST" "somehost" \
-H 'header-key: value' \
-H 'Content-Type: application/json; charset=utf-8'
restartPolicy: Never
설명
-
먼저 apiVersion 에 맞게
CronJob
을 등록한다. -
schedule 는 리눅스의 cronjob 을 등록하는 포맷과 동일한데 위의 예제에서는 5분 마다 실행하라고 정의하였다.
-
image 는
curlimages/curl:7.77.0
을 사용하였는데 필요하다면 alpine 기반으로apk --no-cache add curl
을 추가하여 직접 이미지를 생성하여 사용해도 된다. -
command 부분에서
|
로 이어지는 부분으로 연결하면 curl 명령어를 raw 하게 정의할 수 있다. 콘솔에서 입력하는 형태 그대로 정의하자.
실행 기록
kubectl get pods
로 확인해보면 다음과 같이 언제 완료되었는지 확인이 가능하고 필요하다면 실행 결과를 로그로 확인할수도 있다.
$ kubectl get pods
my-cronjob-name-1623488400-tb4zs 0/1 Completed 0 16s
$ kubectl logs my-cronjob-name-1623488400-tb4zs
Response OK
참고
comments powered by Disqus
FEATURED TAGS
2024
3 keywords
accesscontrol
adaptive growth
alpine linux
ansible
ansible tower
apache2.4
architecture
argocd
asgi
aws
awx
backoffice
beautiful goodbye
begining docker
benchmark
blockhound
blocking code
blog
book
brew cask
build cache
collaboration
communication
composer
confluence
cronjob
curl
customizing
customlog
data.sql
database
developer
difference
docker
docker desktop
dockerize
dos attack
eks
elasticsearch
empty string
environment to do well
errorlogformat
event driven
experience
file upload
filebeat
fluentd
forwarded option
framework
fuse.js
golang
graceful deploy
happy new year
haproxy
haproxy 1.8
haproxy acl logging
haproxy custom variable logging
haproxy metric
haproxy reload fail
haproxy stat
heap memory
hedgehog sharp
how do i work
hugo
index alias
install
installation
instance type
inverted index
istio
iterm
java
jdk 21
jekyll
jekyll to hugo
jetbrains
json
k8s
k8s api
kmooc
kubernetes
leadership
learning in 2019
let's encrypt
letsencrypt
limit_req_zone
litestar
logstash
m1 macbook pro
macro
macro key mapping
mapping
match
match_phrase
maven
microservice 설계 및 구현
migration
mm
multi datasource
mysql
nginx
nginx ingress
nginx regexp
ngram
node drain
null
openjdk
partial matching
phpstorm
poddisruptionbudget
poeaa
portfolio expansion
product strategy
python
query dsl
rate limit
rate litmiting
rds
reindex
rss template
seamless reload
search on hugo
service account & role
sidebar search
speed up
speedup
spring
spring boot
spring camp
spring camp 2023
spring event
ssh
struct
study
system manager
systemd reload
template
term
throughput
timezone
tips
traffic management
ulid
unused plugins
uuid
ux consideration
virtual thread
vm options
webflux
wildcard
year review
zero downtime
만들면서 배우는 클린 아키텍처
시작하세요 도커
엔터프라이즈 애플리케이션 아키텍처 패턴
쿠버네티스 시작하기