Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

25๋…„ ์ „, Java๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ๋ฅ˜์— ์ง„์ž…ํ–ˆ๊ณ  ๊ฒฐ๊ตญ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ์ด ๊ตฌ์ถ•๋˜๋Š” ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜๋‚  ์ˆ˜๋…„ ๋™์•ˆ Java๋ฅผ ์‚ฌ์šฉํ•ด ์˜จ ๋งŽ์€ ์‚ฌ๋žŒ๊ณผ ์กฐ์ง์€ ํ”Œ๋žซํผ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ณ ๋ คํ•˜๋Š๋ผ ๋ฐ”์ฉ๋‹ˆ๋‹ค. Kubernetes ๋˜๋Š” ๊ทธ ํŒŒ์ƒ์ƒํ’ˆ Red Hat OpenShift ๋˜๋Š” ์•„๋งˆ์กด EKS.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

๋ถˆํ–‰ํ•˜๊ฒŒ๋„ Kubernetes๋Š” ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒŒ๋ฅด๊ณ  Java ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๋˜ ๋‹ค๋ฅธ ์šด์˜ ๊ณ„์ธต์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค ์ดํด๋ฆฝ์Šค JKube, Kubernetes ๋ฐ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์นœ์ˆ™ํ•œ Java ์ƒํƒœ๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์œผ๋กœ์˜ ์›ํ™œํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ OpenShift Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ OpenShift ํ”Œ๋žซํผ์— Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ „ํ†ต์ ์ธ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ž๋ฐ” (๊ทธ๋ฆผ 1)์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ JAR ๋˜๋Š” WAR ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ์›น ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์š” ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์ค„์—์„œ Maven์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ IntelliJ ๋˜๋Š” Eclipse์™€ ๊ฐ™์€ IDE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฝ”๋”ฉํ•˜๊ณ  ํŒจํ‚ค์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜๊ณ  ๋ฒ„์ „ ์ œ์–ด์— ์ œ์ถœํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์ฒ ์ €ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

์Œ€. 1. ์ „ํ†ต์ ์ธ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค.

ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

ํด๋ผ์šฐ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ Kubernetes์™€ ์šฉ๊ธฐ. ๋”ฐ๋ผ์„œ ์ด์ œ ๊ฐœ๋ฐœ์ž๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” Kubernetes๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Kubernetes๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ผ๋ฐ˜์ ์œผ๋กœ YAML ํŒŒ์ผ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์ž‘์„ฑํ•œ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ๋กœ์˜ ์ „ํ™˜์—์„œ ์ „ํ†ต์ ์ธ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€ํ™”๋Š” ๊ทธ๋ฆผ 2์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. XNUMX.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

์Œ€. 2. ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค.

์ดํด๋ฆฝ์Šค JKube

Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ๋˜ ๋‹ค๋ฅธ ์šด์˜ ๊ณ„์ธต์ด ์ถ”๊ฐ€๋˜๋ฉฐ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐฐํฌ ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ํ•ต์‹ฌ ์ž‘์—…์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋Œ€ํ•ด ๋ถˆ์•ˆํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ž‘์šฉํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์ดํด๋ฆฝ์Šค JKube, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค(JKube ํ‚คํŠธ ํ•จ๊ป˜ Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” OpenShift Maven ํ”Œ๋Ÿฌ๊ทธ์ธ) ๊ทธ๋ฆผ์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ๋ฐ Kubernetes ๊ด€๋ จ ์ž‘์—…์„ ์†์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2.

์ด ๊ธฐ์‚ฌ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ๋Š” Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ•จ๊ป˜ Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ํ™˜๊ฒฝ์—์„œ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•œ ํด๋ผ์šฐ๋“œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

๊ทธ๋ฆผ 2์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Eclipse JKube์™€ Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋„์ž…ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ์šฉ์œผ๋กœ ์•ฝ๊ฐ„ ์ˆ˜์ •๋œ Java ๊ฐœ๋ฐœ ๊ณ„ํš์„ ๊ณ ๋ คํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ผ.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

์Œ€. 3. Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•œ ํด๋ผ์šฐ๋“œ์šฉ Java ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค.

๋ณด์‹œ๋‹ค์‹œํ”ผ ์—ฌ๊ธฐ์—์„œ๋Š” Kubernetes ๋ฐ ์ปจํ…Œ์ด๋„ˆ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ž‘์—…(๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋จ)์ด ํ‘œ์— ๋‚˜์—ด๋œ ๊ธฐ๋ณธ Eclipse JKube ๋ชฉํ‘œ ์ž‘์—…์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. 1.

ํ…Œ์ด๋ธ” 1. Eclipse JKube ๊ธฐ๋ณธ ์ž‘์—….

ํƒœ์Šคํฌ
๋ฌด๋Œ€
๊ธฐ์ˆ 

k8s:๋นŒ๋“œ
PRE_INTEGRATION_TEST
๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ

k8s:ํ‘ธ์‹œ
INSTALL
Docker ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œ

k8s:๋ฆฌ์†Œ์Šค
PROCESS_RESOURCES
K8 ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ

k8s:์ ์šฉ
์—ฎ๋‹ค
์ƒ์„ฑ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ K8์— ์ ์šฉ

k8s:๋ฐฐํฌ ์ทจ์†Œ
๋ฐฐํฌ ์ทจ์†Œ
k8s:apply ๋ฐ k8s:deploy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋œ K8s ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

์ฐธ๊ณ  : ์ž‘์—…์—์„œ ์ด๋Ÿฌํ•œ ๋…๋‹จ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด Eclipse JKube๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์ง์ ‘ Eclipse JKube๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XML ะธ ั€ะตััƒั€ัั‹.

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—… ์‹œ Eclipse JKube ๋ฐ Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์— Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์ด ์˜ˆ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ„๋‹จํ•œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋‹ˆ์ฟ ๋ฒ  Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐฐํฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ, /random ์—”๋“œํฌ์ธํŠธ์—์„œ JSON ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

1๋‹จ๊ณ„. Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹ค์šด๋กœ๋“œ

Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ด๋ธ ์„ผํŠธ๋Ÿด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ. Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ pom.xml์— ์ข…์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>kubernetes-maven-plugin</artifactId>
     <version>${jkube.version}</version>
 </plugin>

์ˆœ์ˆ˜ Kubernetes ๋Œ€์‹  OpenShift๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ pom.xml์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>openshift-maven-plugin</artifactId>
     <version>${jkube.version}</version>
 </plugin>

2๋‹จ๊ณ„. ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ JAR ํŒŒ์ผ์€ mvn package ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฐ ๋‹ค์Œ mvn goal ์ž‘์—… k8s:build๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†์„ฑ์œผ๋กœ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

<jkube.generator.name>docker.io/rohankanojia/random-generator:${project.version}</jkube.generator.name>

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์ „์— docker ๋ฐ๋ชฌ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋…ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ eval $(minikube docker-env)

๊ทธ๋Ÿฐ ๋‹ค์Œ mvn k8s:build ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋ฉด Eclipse JKube ๋นŒ๋“œ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Created docker-build.tar in 251 milliseconds
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Built image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.053 s
[INFO] Finished at: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

3๋‹จ๊ณ„. Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ

๊ตฌ์„ฑ๋œ ํ‘ธ์‹œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(์—ฌ๊ธฐ์„œ๋Š” docker.io)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•œ ํ›„ ์ด ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Eclipse JKube์— mvn k8s:push ํ‘ธ์‹œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์š”์ฒญํ•œ ํ›„์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: The push refers to repository [docker.io/rohankanojia/random-generator]
5dcd9556710f: Layer already exists 
b7139ad07aa8: Layer already exists 
b6f081e4b2b6: Layer already exists 
d8e1f35641ac: Layer already exists 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d size: 1162
[INFO] k8s: Pushed docker.io/rohankanojia/random-generator:0.0.1 in 7 seconds 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.222 s
[INFO] Finished at: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ 

์ด๋ฏธ์ง€๋ฅผ ๋ณด๋‚ธ ํ›„์—๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Docker Hub์—์„œ ๊ฐ„๋‹จํžˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 4.

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes์šฉ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

์Œ€. 4. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ์ „์†ก๋œ ์ด๋ฏธ์ง€๊ฐ€ Docker Hub์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ Kubernetes ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ƒ์„ฑ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ง‘ํ–ˆ์œผ๋‹ˆ ์ด์ œ Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Eclipse JKube์—๋Š” ๊ธฐ๋ณธ Java ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—„๊ฒฉํ•œ ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ด„ ๋ถ€ํŒ…, ์ฟผ์ฟ ์Šค, Vert.x ๋˜๋Š” ๊ธฐํƒ€). XML ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์›์‹œ ์กฐ๊ฐ(ํ•„์ˆ˜ ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ์กฐ๊ฐ)์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋” src/main/jkube์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ตฌ์„ฑ์ด ์ƒ์„ฑ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์—…๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ๋‘๋ฏ€๋กœ Eclipse JKube๋Š” ๊ธฐ๋ณธ ๋ฐฐํฌ ๋ฐ ClusterIP ์œ ํ˜•์˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋น„์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์„œ๋น„์Šค ์œ ํ˜•์„ NodePort๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋™์ž‘์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<jkube.enricher.jkube-service.type>NodePort</jkube.enricher.jkube-service.type>

Eclipse JKube์— mvn k8s:resource ๋ฆฌ์†Œ์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์š”์ฒญํ•œ ํ›„ ํ™”๋ฉด ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: jkube-controller: Adding a default Deployment
[INFO] k8s: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] k8s: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] k8s: jkube-revision-history: Adding revision history limit to 2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.344 s
[INFO] Finished at: 2020-08-10T11:38:11+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ ls target/classes/META-INF/jkube/kubernetes
random-generator-deployment.yml  random-generator-service.yml
~/work/repos/eclipse-jkube-demo-project : $ cat target/classes/META-INF/jkube/kubernetes/random-generator-deployment.yml | head -n10
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    jkube.io/git-url: [email protected]:rohanKanojia/eclipse-jkube-demo-project.git
    jkube.io/git-commit: 1ef9ef2ef7a6fcbf8eb64c293f26f9c42d026512
    jkube.io/git-branch: master
    jkube.io/scm-url: https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/random-generator
    jkube.io/scm-tag: HEAD
~/work/repos/eclipse-jkube-demo-project : $

5๋‹จ๊ณ„. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ค€๋น„๊ฐ€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์ž๋™์œผ๋กœ ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ์ด ๋ชจ๋“  ๊ฒƒ์„ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด kubectl apply -f ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Eclipse JKube์— mvn k8s:apply ์ ์šฉ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋„๋ก ์š”์ฒญํ•œ ํ›„ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Using Kubernetes at https://192.168.39.145:8443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Using namespace: default
[INFO] k8s: Creating a Service from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Creating a Deployment from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Deployment: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.306 s
[INFO] Finished at: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
NAME                                                     READY   STATUS             RESTARTS   AGE
random-generator-58b7847d7f-9m9df                        0/1     Running            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Running            0          17s
^C~/work/repos/eclipse-jkube-demo-project : $ kubectl get svc
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
io-openliberty-sample-getting-started   NodePort    10.110.4.104    <none>        9080:30570/TCP    44h
kubernetes                              ClusterIP   10.96.0.1       <none>        443/TCP           18d
random-generator                        NodePort    10.97.172.147   <none>        8080:32186/TCP    22s
~/work/repos/eclipse-jkube-demo-project : $ curl `minikube ip`:32186/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

6๋‹จ๊ณ„. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ทจ์†Œ

์ด๋ฅผ ์œ„ํ•ด ์ด์ „ ๋‹จ๊ณ„, ์ฆ‰ ์ ์šฉ ์ž‘์—…์ด ์‹คํ–‰๋  ๋•Œ ์ ์šฉ๋œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ„๋‹จํžˆ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฐํฌ ์ทจ์†Œ ์ž‘์—…์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Eclipse JKube์— mvn k8s:undeploy ๋ฐฐํฌ ์ทจ์†Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์š”์ฒญํ•œ ํ›„ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ kubectl get all
NAME                                    READY   STATUS    RESTARTS   AGE
pod/random-generator-58b7847d7f-9m9df   1/1     Running   0          5m21s

NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP          18d
service/random-generator   NodePort    10.97.172.147   <none>        8080:32186/TCP   5m21s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/random-generator   1/1     1            1           5m21s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/random-generator-58b7847d7f   1         1         1       5m21s
~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:undeploy
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:undeploy (default-cli) @ random-generator ---
[INFO] k8s: Using Kubernetes at https://192.168.39.145:8443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Using namespace: default
[INFO] k8s: Deleting resource Deployment default/random-generator
[INFO] k8s: Deleting resource Service default/random-generator
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.412 s
[INFO] Finished at: 2020-08-10T11:46:22+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
^C~/work/repos/eclipse-jkube-demo-project : $ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   18d
~/work/repos/eclipse-jkube-demo-project : $

Eclipse JKube๋กœ ๋˜ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๊ทธ๋ž˜์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ”Œ๋žซํผ์šฉ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” Eclipse JKube์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ฃผ์š” ๋ชฉํ‘œ ์ž‘์—…์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ํ‚ค๋ณด๋“œ์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ง€์†์ ์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์„ฑ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>kubernetes-maven-plugin</artifactId>
     <version>${project.version}</version>
     <executions>
         <execution>
             <goals>
                  <goal>build</goal>
                  <goal>resource</goal>
                  <goal>apply</goal>
             </goals>
         </execution>
     </executions>
</plugin>

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Eclipse JKube ๋ฐ Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์žˆ๋Š” ๋ชจ๋“  ๋ชฉํ‘œ ์ž‘์—…์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํ‘œ 2์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ž‘์—… ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” 2. ์ถ”๊ฐ€ Eclipse JKube ๋ชฉํ‘œ ์ž‘์—….

ํƒœ์Šคํฌ
๋ฌด๋Œ€
๊ธฐ์ˆ 

k8s:๋กœ๊ทธ
์œ ํšจ ๊ธฐ๊ฐ„
Kubernetes์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

k8s:๋””๋ฒ„๊ทธ
PACKAGE
IDE์—์„œ ์ง์ ‘ Kubernetes์—์„œ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋””๋ฒ„๊ทธ ํฌํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

k8s:๋ฐฐํฌ
INSTALL
์„ค์น˜ ์ž‘์—…์„ ์œ„ํ•œ ํฌํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ ์šฉ ์ž‘์—…์˜ ๊ฒฝ์šฐ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

k8s:์‹œ๊ณ„
PACKAGE
๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ถ”์ ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ํ•ซ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

OpenShift Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Red Hat OpenShift์— Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

Red Hat OpenShift ํ”Œ๋žซํผ์—์„œ ์˜ˆ์ œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ์‹œํ”„ํŠธ ๋ฉ”์ด๋ธ. ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์ž‘์—… ์ ‘๋‘์‚ฌ๊ฐ€ k8s์—์„œ oc๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค-์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ OpenShift Maven ํ”Œ๋Ÿฌ๊ทธ์ธ - ์–ด์…ˆ๋ธ”๋ฆฌ S2I. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•  ๋•Œ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— jkube.generator.name ์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(OpenShift๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ๋‚ด๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค). ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ชฉํ‘œ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

~/work/repos/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift build with strategy S2I
[INFO] oc: Running in OpenShift mode
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Created docker source tar /home/rohaan/work/repos/eclipse-jkube-demo-project/target/docker/random-generator/0.0.1/tmp/docker-build.tar
[INFO] oc: Adding to Secret pullsecret-jkube
[INFO] oc: Using Secret pullsecret-jkube
[INFO] oc: Creating BuildServiceConfig random-generator-s2i for Source build
[INFO] oc: Creating ImageStream random-generator
[INFO] oc: Starting Build random-generator-s2i
[INFO] oc: Waiting for build random-generator-s2i-1 to complete...
[INFO] oc: Caching blobs under "/var/cache/blobs".
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Generating dockerfile with builder image quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 1: FROM quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 2: LABEL "io.openshift.build.source-location"="/tmp/build/inputs"       "io.openshift.build.image"="quay.io/jkube/jkube-java-binary-s2i:0.0.7"
[INFO] oc: STEP 3: ENV JAVA_APP_DIR="/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: STEP 4: USER root
[INFO] oc: STEP 5: COPY upload/src /tmp/src
[INFO] oc: STEP 6: RUN chown -R 1000:0 /tmp/src
[INFO] oc: STEP 7: USER 1000
[INFO] oc: STEP 8: RUN /usr/local/s2i/assemble
[INFO] oc: INFO S2I source build with plain binaries detected
[INFO] oc: INFO S2I binary build from fabric8-maven-plugin detected
[INFO] oc: INFO Copying binaries from /tmp/src/deployments to /deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Copying deployments from deployments to /deployments...
[INFO] oc: '/tmp/src/deployments/random-generator-0.0.1.jar' -> '/deployments/random-generator-0.0.1.jar'
[INFO] oc: STEP 9: CMD /usr/local/s2i/run
[INFO] oc: STEP 10: COMMIT temp.builder.openshift.io/default/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image operating system mismatch: image uses "", expecting "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image architecture mismatch: image uses "", expecting "amd64""
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Copying blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Copying blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Getting image source signatures
[INFO] oc: 
[INFO] oc: Pushing image image-registry.openshift-image-registry.svc:5000/default/random-generator:0.0.1 ...
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Successfully pushed image-registry.openshift-image-registry.svc:5000/default/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push successful
[INFO] oc: Build random-generator-s2i-1 in status Complete
[INFO] oc: Found tag on ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator written to /home/rohaan/work/repos/eclipse-jkube-demo-project/target/random-generator-is.yml
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] oc: Using docker image name of namespace: default
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: jkube-controller: Adding a default DeploymentConfig
[INFO] oc: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] oc: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] oc: jkube-revision-history: Adding revision history limit to 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift at https://api.crc.testing:6443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/openshift.yml 
[INFO] oc: OpenShift platform detected
[INFO] oc: Using project: default
[INFO] oc: Creating a Service from openshift.yml namespace default name random-generator
[INFO] oc: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] oc: Creating a DeploymentConfig from openshift.yml namespace default name random-generator
[INFO] oc: Created DeploymentConfig: target/jkube/applyJson/default/deploymentconfig-random-generator.json
[INFO] oc: Creating Route default:random-generator host: null
[INFO] oc: HINT: Use the command `oc get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:07 min
[INFO] Finished at: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ oc get pods -w
NAME                           READY     STATUS      RESTARTS   AGE
random-generator-1-deploy      1/1       Running     0          14s
random-generator-1-vnrm9       0/1       Running     0          11s
random-generator-s2i-1-build   0/1       Completed   0          1m
random-generator-1-vnrm9   1/1       Running   0         24s
random-generator-1-deploy   0/1       Completed   0         28s
~/work/repos/eclipse-jkube-demo-project : $ oc get routes
NAME                HOST/PORT                                    PATH      SERVICES            PORT      TERMINATION   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    None
~/work/repos/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing/random 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
"id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~/work/repos/eclipse-jkube-demo-project : $

๋น„๋””์˜ค ๋ ˆ์Šจ

Eclipse JKube๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ๊ฐœ๋ฐœ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด Minikube์—์„œ ๊ฐ„๋‹จํ•œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ๋น„๋””์˜ค ํŠœํ† ๋ฆฌ์–ผ์„ ์‹œ์ฒญํ•˜์„ธ์š”.

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Eclipse JKube๊ฐ€ Kubernetes๋กœ ์ž‘์—…ํ•  ๋•Œ Java ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์„ ์–ด๋–ป๊ฒŒ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. Eclipse JKube์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์›น์‚ฌ์ดํŠธ ๊ณผ GitHub์˜.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€