22.6.08 k8s Keywords

์„œํƒœ์šฑยท2022๋…„ 6์›” 8์ผ
1
post-thumbnail

Metricbeat

๐Ÿค”ย  metric: ์ธก์ •์„ ํ†ตํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ’ˆ์งˆ, ์ƒ์‚ฐ์„ฑ ๋˜๋Š” ๊ฐœ๋ฐœ ๋น„์šฉ ๋“ฑ์„ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒ™๋„.

๋ฉ”ํŠธ๋ฆญ ์„œ๋ฒ„๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์‚ฐํ•œ๋‹ค. ๊ฐ ๋…ธ๋“œ์— ์„ค์น˜๋œ kubelet์„ ํ†ตํ•ด ๋…ธ๋“œ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์˜ cpu, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ™์€ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘.

Metricbeat๋Š” ์‹œ์Šคํ…œ ๋ฐ ์„œ๋น„์Šค์—์„œ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ์ˆ˜์ง‘๊ธฐ๋‹ค.

Linux, Windows, Mac ํ˜ธ์ŠคํŠธ์— ๋ฐฐํฌํ•˜๊ณ  Elasticsearch์™€ ์—ฐ๊ฒฐํ•˜๋ฉด ์‹œ์Šคํ…œ์˜ cpu์‚ฌ์šฉ๋ฅ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋””์Šคํฌ IO, ๋„คํŠธ์›Œํฌ IO์— ๋Œ€ํ•œ ํ†ต๊ณ„์™€ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ฐ€๋ณ๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

Metricbeat๋Š” ๋ฌด๋ฃŒ ๋ผ์ด์„ผ์Šค์ด๋ฉฐ, ์‹œ๊ณ„์—ด (์žฅ๋น„)๋ชจ๋‹ˆํ„ฐ๋ง์˜ ๊ฒฝ์šฐ elasticsearch์™€์˜ ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์„ ๋•Œ docํ•˜๋‚˜์— ๋‹ค์–‘ํ•œ metric์„ ํ•œ๋ฒˆ์— ์Œ“๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํšจ์œจ์ ์ด๋ฉฐ, ์Œ“์€ ์ง€ํ‘œ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋‹ค. ๋˜ํ•œ es์— ์‹œ๊ณ„์—ด๋กœ metric์„ ์ ์žฌํ•  ์Šคํ‚ค๋งˆ๋ฅผ ๋ณธ์ธ๋“ค์ด ์•Œ์•„์„œ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๊ฒƒ๋„ ์žฅ์ ์ด๋‹ค. ๋”๋ถˆ์–ด kibana ๋Œ€์‹œ๋ณด๋“œ๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์œผ๋กœ ์˜ค๋ฒ„๋ทฐ ์ง€ํ‘œ๋“ค์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

CPU, MEM,DISK,NETWORK๊ฐ™์€ ๋ฌผ๋ฆฌ ์žฅ๋น„์— ๋Œ€ํ•œ metric ์ˆ˜์ง‘ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JMX ์ง€์›์œผ๋กœ ์ธํ•ด JVM๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋“ค๋„ ์ƒ๋‹น์ˆ˜ ์ˆ˜์ง‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์ œ๊ณต๋˜๋Š” ๋ชจ๋“ˆ ์˜ˆ์‹œ

System, Aerospike, Apache, Ceph, Couchbase, Docker, Dropwizard, Elasticsearch

Etcd, Golang, expvar, HAProxy, HTTP, json, Jolokia, jmx, Kafka, Kibana, Kubernetes

Logstash, Memcached, MongoDB, dbstats, MySQL, Nginx, PHP_FPM, PostgreSQL

RabbitMQ, Redis, vSphere, Windows, ZooKeeper

http://www.kwangsiklee.com/2018/04/๋ฉ”ํŠธ๋ฆญ๋น„ํŠธmetricbeat๋กœ-์‹œ์Šคํ…œ-๋ชจ๋‹ˆํ„ฐ๋ง-ํ•˜๊ธฐ/

kafka

๋Œ€์šฉ๋Ÿ‰, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐœ๋ฐœ๋œ ๊ตฌ๋…ํ˜• ๋ถ„์‚ฐ ๋ฉ”์‹œ์ง• ํ”Œ๋žซํผ์ด๋‹ค.

์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋น…๋ฐ์ดํ„ฐ ๊ณผ์ œ์— ์ ํ•ฉํ•˜๋‹ค. ์นดํ”„์นด๋Š” ์ž”์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋””์Šคํฌ Read/Write๋ฅผ ํ•˜์ง€ ์•Š๊ณ , ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ํ†ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

์นดํ”„์นด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ํ™•์žฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ์Šค์ผ€์ผ ์•„์›ƒ์œผ๋กœ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๊ฐ–์ถ”๊ณ , ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ๊ตํ™˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง• ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ๋Šฅ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋ฐ์ดํ„ฐ/๋ฉ”์‹œ์ง€ ์žฌ์ƒ์— ๋Œ€ํ•ด ์ง€์›ํ•œ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋กœ ์นดํ”„์นด๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒ์ ์ธ ๋ฐฉ์‹์ธ๋ฐ, ์นดํ”„์นด์˜ ๋ฐฐํฌ, ์„ค์ •, ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ์„ ๊ฐ„์†Œํ™” ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ™•์žฅ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ, ์ด์‹์„ฑ ๋ฐ ๋ฐฐํฌ ํŽธ์˜์„ฑ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์นดํ”„์นด ๋„์ž… ์ด์ „์—๋Š” point to point ๋ฐฉ์‹์œผ๋กœ, ๋ฐ์ดํ„ฐ ์ „์†ก ๋ผ์ธ์ด ๋งŽ์•„ ๋ฐฐํฌ ๋ฐ ์žฅ์•  ๋Œ€์‘์ด ์–ด๋ ต๊ณ , ๋ฐ์ดํ„ฐ ํฌ๋งท์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์› ๋‹ค.

์นดํ”„์นด ๋„์ž…์€ ์ค‘๊ฐ„์— Topic์„ ๋งˆ๋ จํ•ด(Pub/Sub ๋ฐฉ์‹) ํŠน์ • ํ† ํ”ฝ์ด๋‚˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ†ต์ง€๋ฅผ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. publisher๊ฐ€ Topic์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ํ•ด๋‹น topic์„ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋œ๋‹ค.

Zookeeper

๋ถ„์‚ฐ ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค(๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์‹œ์Šคํ…œ๊ฐ„์˜ ์ •๋ณด ๊ณต์œ , ์ƒํƒœ ์ฒดํฌ, ์„œ๋ฒ„๋“ค ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋ฝ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ด์คŒ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ. ๋ถ„์‚ฐ ์ž‘์—…์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋‹ค.

zookeeper๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ€ํ‹ฐ kafka Broker๋“ค ๊ฐ„์˜ ์ •๋ณด๋ฅผ ๊ณต์œ , ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

๋ธŒ๋กœ์ปค์˜ ๋ชฉ๋ก/์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , zookeeper ์—†์ด๋Š” kafka๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, zookeeper๋Š” ํ™€์ˆ˜์˜ ์„œ๋ฒ„๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

Leader(writes)์™€ ๋‚˜๋จธ์ง€ Follower(reads) ์„œ๋ฒ„๋กœ ๋˜์–ด์žˆ๋‹ค.

cf) ์นดํ”„์นด๋Š” ํฌ๊ฒŒ ํ”„๋กœ๋“€์„œ, ๋ธŒ๋กœ์ปค, ์ปจ์Šˆ๋จธ, ์ฃผํ‚คํผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

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

elasticsearch

Apache Lucene(๋ชจ๋“  ๊ฒ€์ƒ‰ ์—”์ง„์˜ ์‹œ์ดˆ) ๊ธฐ๋ฐ˜์˜ Java ์˜คํ”ˆ์†Œ์Šค ๋ถ„์‚ฐ ๊ฒ€์ƒ‰ ์—”์ง„. ํ…์ŠคํŠธ, ์ˆซ์ž, ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด, ์ •ํ˜• ๋ฐ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ELK ์Šคํƒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” Logstash, Kibana, Beats๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ.
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋–ด์„ ๋•Œ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์‹ค์ œ๋กœ๋Š” ํŒŒ์ผ๋กœ ๋…ธ๋“œ์— ๋‚จ๊ฒจ์ ธ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์œผ๋ฉด ๋กœ๊ทธ๋„ ์ฃฝ์œผ๋ฏ€๋กœ ์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜์— ์Œ“์•„๋†“๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์Œ“์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ํ™•์ธํ•˜๋Š” ์šฉ๋„.

๊ธฐ๋ณธ์ ์œผ๋กœ HTTP ํ”„๋กœํ† ์ฝœ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ REST API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์ง€์›ํ•œ๋‹ค.

RDB๋Š” ํ–‰์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋‚˜, ES๋Š” ๋‹จ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ (์—ญ์ธ๋ฑ์Šค, Inverted Index) ์ €์žฅํ•œ๋‹ค.

NoSQL์˜ ์ผ์ข…์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์„ฑ์œผ๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ํž˜๋“  ๋Œ€๋Ÿ‰์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ „๋ฌธ ๊ฒ€์ƒ‰๊ณผ ๊ตฌ์กฐ ๊ฒ€์ƒ‰ ๋ชจ๋‘๋ฅผ ์ง€์›ํ•œ๋‹ค.

kibana

elasticsearch๋Š” restfulํ•œ ์†์„ฑ๊ณผ json ๋ฌธ์„œ ๊ธฐ๋ฐ˜์˜ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋ฏ€๋กœ http ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ์™€๋„ ์†์‰ฝ๊ฒŒ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

kibana๋Š” elasticsearch๋ฅผ ์—ฐ๊ฒฐํ•ด ์‰ฝ๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๊ณ , elastic stack์„ ํƒ์ƒ‰ํ•˜์—ฌ, ์ฟผ๋ฆฌ ๋ถ€ํ•˜ ์ถ”์ ๋ถ€ํ„ฐ ์•ฑ์„ ํ†ตํ•ด ์š”์ฒญ์ด ํ๋ฅด๋Š” ๋ฐฉ์‹์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ํ”Œ๋žซํผ์ด๋‹ค. ๋กœ๊ทธ์™€ ์‹œ๊ณ„์—ด ๋ถ„์„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง, ์šด์˜ ์ธํ…”๋ฆฌ์ „์Šค ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์‚ฌ์šฉ๋˜์–ด ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ํƒ์ƒ‰์„ ๋‹ด๋‹นํ•œ๋‹ค.

  • Discover: elasticsearch์— ์ƒ‰์ธ๋œ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋“ค์˜ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฉ”๋‰ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒ€์ƒ‰๋œ ๋ฐ์ดํ„ฐ์˜ ์›๋ณธ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ณด๊ณ  ์‹ถ์€ ํ•„๋“œ๋งŒ ์„ ํƒํ•ด์„œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์กฐํšŒ ๊ฐ€๋Šฅ ํ•˜๋‹ค.
  • Visualize: aggregation ์ง‘๊ณ„ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ์˜ ํ†ต๊ณ„๋ฅผ ๋‹ค์–‘ํ•œ ์ฐจํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจ๋„์„ ๋งŒ๋“œ๋Š” ๋ฉ”๋‰ด๋‹ค. ๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์—ฌ๊ธฐ์„œ ๋งŒ๋“ค์–ด์ง„ ํŒจ๋„์„ ์กฐํ•ฉํ•ด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • Dashboard: Visualize ๋ฉ”๋‰ด์—์„œ ๋งŒ๋“ค์–ด์ง„ ์‹œ๊ฐํ™” ๋„๊ตฌ๋“ค์„ ์กฐํ•ฉํ•ด ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด์„ ๋งŒ๋“ค๊ณ , ์ €์žฅ, ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒ€์ƒ‰์ฐฝ์— ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์‹œ๊ฐํ™” ๋„๊ตฌ๋“ค์„ ํด๋ฆญํ•ด์„œ ์กฐํšŒํ•  ๋ฐ์ดํ„ฐ๋“ค์˜ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๊ณ , URL๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ json ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ, ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

prometheus

ํ˜„์žฌ kubernetes ์ƒ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ด์ž, ์‹œ๊ณ„์—ด DB์˜ ํ•œ ์ข…๋ฅ˜.

๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ์„ ์‰ฝ๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ key-valueํ˜•ํƒœ๋กœ label ์ง‘๊ณ„ ํ›„ Kibana/Grafana๊ฐ™์€ ๋Œ€์‹œ ๋ณด๋“œ ์‹œ์Šคํ…œ์—์„œ ๊ทธ๋ž˜ํ”„๋กœ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋Œ€์‹œ ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ์ „์ฒด ์ธํ”„๋ผ ํ™˜๊ฒฝ๊ณผ application์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ์ค‘์š”ํ•ด์กŒ๋‹ค. ์ „์ฒด์ ์ธ ๊ฐ€์‹œ์„ฑ์„ ํ™•๋ณดํ•ด์•ผ application์˜ ๊ฐ€์šฉ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ™” ๊ณ ๋„ํ™”๋œ cloud native system์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์ง€ํ‘œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ๊ฐ€ ๋–ด์„ ๋•Œ ์‹œ๊ณ„์—ด๋กœ ํผ์„ผํŠธ๋ฅผ ๊ณ„์† ์ €์žฅํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค. ์•„์ฃผ ๋‹ค์–‘ํ•œ ์‹œ๊ณ„์—ด ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ, ์น˜ํƒ€์—์„œ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ •๋ณด๋ฅผ ๋ฝ‘์•„์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Kube-state-metrics

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‚ฌ์šฉ ์ค‘์— ์šด์˜ ๊ด€์ ์—์„œ ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ฑฐ๋‚˜, ํŠน์ •ํ•œ ์ƒํ™ฉ(Pod์˜ ์žฅ์•  ์ƒํ™ฉ ๋ฐœ์ƒ)์— ๋ณ„๋„ ์ฑ„๋„๋กœ ์•Œ๋ฆผ์„ ๋ฐœ์†กํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ ˆ๋ฒจ์—์„œ ์›Œ์ปค๋…ธ๋“œ๋กœ ์‚ฌ์šฉ์ค‘์ธ ์„œ๋ฒ„์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์˜ Pod๊ฐ€ ์‚ฌ์šฉ์ค‘์ธ ๋ฆฌ์†Œ์Šค ๋ฉ”ํŠธ๋ฆญ๊ณผ ๋„คํŠธ์›Œํฌ IO, Deployment ๊ฐœ์ˆ˜, Pod ๊ฐœ์ˆ˜ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•œ๋‹ค.

kube-state-metrics๋Š” ์œ„์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ /metrics๋ผ๋Š” HTTP ์—”๋“œํฌ์ธํŠธ๋กœ ์ œ๊ณตํ•ด์ค€๋‹ค. (๋””ํดํŠธ ํฌํŠธ๋Š” 8080)

kube-state-metrics/docs at master ยท kubernetes/kube-state-metrics

Node-exporter

Prometheus Node Exporter๋Š” UNIX๊ณ„์—ด ์ปค๋„์„ ๊ฐ€์ง„ ํ•˜๋“œ์›จ์–ด์˜ ์ƒํƒœ์™€ ์„œ๋ฒ„ ์‹œ์Šคํ…œ(cpu, loadAvg, memory) ๋ฐ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ •๋ณด๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์ง‘๊ธฐ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ DaemonSet ๋ฆฌ์†Œ์Šค๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ฐ ๋…ธ๋“œ๋“ค์— node-exporter๊ฐ€ ์„ค์น˜ ๋œ๋‹ค.

node-exporter๋Š” ์„ค์น˜๋œ ๋…ธ๋“œ์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ๊ฐ™์€ ํ˜ธ์ŠคํŠธ ๊ด€๋ จ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•ด API๋กœ ๋…ธ์ถœํ•œ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด host system์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค.
https://github.com/prometheus/node_exporter

Node feature discovery

NFD๋Š” ํ”Œ๋žซํผ์˜ ํ•˜๋“œ์›จ์–ด ๋ฐ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์„ ๊ฐ์ง€ํ•˜๊ณ  ์•Œ๋ฆฌ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ, ์ด๋ฅผ ํ†ตํ•ด ์›Œํฌ๋กœ๋“œ์˜ ์ง€๋Šฅ์ ์ธ ์Šค์ผ€์ฅด๋ง์„ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋Œ€ํ•œ ๋…ธ๋“œ ๊ธฐ๋Šฅ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์„ ๊ฐ์ง€ํ•˜๊ณ , ๋…ธ๋“œ ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์•Œ๋ ค์ค€๋‹ค.

์•„๋ž˜ 3๊ฐ€์ง€ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

nfd-master: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API์— ๋Œ€ํ•œ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ฐ๋ชฌ. nfd-worker๋กœ๋ถ€ํ„ฐ ๋ ˆ์ด๋ธ”๋ง ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

nfd-worker: ๊ธฐ๋Šฅ ๊ฐ์ง€๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ์‹ค์ œ ๋…ธ๋“œ ๋ ˆ์ด๋ธ”๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” NFD-master์— ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. nfd-worker์˜ ํ•œ๊ฐœ ์ธ์Šคํ„ด์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ๋˜์–ด์•ผ ํ•œ๋‹ค.

nfd-topology-updater: worker ๋…ธ๋“œ์— ํ• ๋‹น ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒ€์‚ฌํ•ด ์˜์—ญ๋ณ„๋กœ ์ƒˆ ํŒŒ๋“œ์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ๋ชฌ์ด๋‹ค. ๊ทธ ๋‹ค์Œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ํ•ด๋‹นํ•˜๋Š” NodeResouceTopology CR์„ ์ƒ์„ฑํ•˜๋Š” nfd-master์— ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. nfd-topology-updater์˜ ํ•œ ๊ฐœ ์ธ์Šคํ„ด์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ๋˜์–ด์•ผ ํ•œ๋‹ค.
https://github.com/kubernetes-sigs/node-feature-discovery

Istio

๊ฐœ๋ฐœ๊ณผ ์šด์˜ ๊ณผ์ •์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ฐ๊ฒฐ, ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ณด์•ˆ๊ณผ ๊ฐ™์€ ์ค‘์•™์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•˜๋„๋ก ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ๋ฉ”์‹œ ํˆด์ด๋‹ค.

Public Cloud ํ™˜๊ฒฝ์˜ K8s Web Application ๋ฐฐํฌ์—์„œ, ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก Ingress Controller๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ๋ชจ๋“  Service๋ฅผ Loadbalancer ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ์—” ๋น„์šฉ๊ณผ ํฉ์–ด์ง„ Entrypoint ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Ingress Controller๋ฅผ ์ตœ์ „์„ ์— ๋‘๊ณ  Ingress Rule์„ ์ถ”๊ฐ€ํ•˜์—ฌ Hostname๊ณผ Path์— ๋”ฐ๋ผ ์ง€์ •๋œ ์„œ๋น„์Šค๋กœ Routingํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ K8s์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  Third-party App(ex: ALB, Nginx, Traefik)์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋œ๋‹ค.

Istio๋Š” ์—ฌ๊ธฐ์„œ ํ•œ์ธต ๋” ๋ฐœ์ „ํ•ด Service Mesh์˜ ๊ฒฝ๊ณ„์—์„œ Inbound/Outbound ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Loadbalancer๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์ด๋ฅผ 'Gateway'๋ผ๋Š” Istio Resource๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

(์˜คํ”ˆ์†Œ์Šค์ด๋ฏ€๋กœ ์–ด๋–ค ํด๋Ÿฌ์Šคํ„ฐ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” use case๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ์˜ ์‚ฌ์šฉ์ด๋‹ค.)

Istio๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค, ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŒ…,ย k8s ์ปจํ…Œ์ด๋„ˆ, ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

๐Ÿค”ย  ์„œ๋น„์Šค ๋ฉ”์‹œ : ๋ณด์•ˆ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, ๋ชจ๋‹ˆํ„ฐ๋ง, HealthCheck, ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค, ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋กœ์ง ๋“ฑ ์„œ๋น„์Šค๊ฐ„์˜ ํ†ต์‹ ์„ ์ธํ”„๋ผ ๋‚ด๋ถ€์—์„œ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ ์ œ๊ณต ํ•˜๋Š” ๊ฒƒ์„ ์„œ๋น„์Šค ๋ฉ”์‹œ๋ผ๊ณ  ํ•œ๋‹ค.

Filebeat

๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก๊ธฐ.

๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ์ƒ์„ฑํ•˜๋Š” ๋กœ๊ทธ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์ผ์ผ์ด ssh ํ„ฐ๋ฏธ๋„์„ ์ด์šฉํ•ด ๋กœ๊ทธ ํŒŒ์ผ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ•ฉ๋ฆฌ์ ์ด๋‹ค. ์ด์— ๋กœ๊ทธ ๋ฐ ํŒŒ์ผ์„ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ค‘์•™ ์ง‘์ค‘ํ™” ํ•˜์—ฌ ์ž‘์—…์„ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” producer์ธ Filebeat๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Filebeat๋Š” ์ง€์ •ํ•œ ๋กœ๊ทธ ํŒŒ์ผ ๋˜๋Š” ์œ„์น˜๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด ๋กœ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ๋‹ค์Œ ์ธ๋ฑ์‹ฑ์„ ์œ„ํ•ด Elasticsearch ๋˜๋Š” Logstash(๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘)๋กœ ์ „๋‹ฌํ•œ๋‹ค.

grafana

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ.

๋‹ค์–‘ํ•œ DB๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ„๋‹จํžˆ ๋งˆ์šฐ์Šค ํด๋ฆญ์œผ๋กœ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์–ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ธฐ๋Šฅ ํ™•์žฅ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

dcgm exporter

NIVIDIA์—์„œ ์ œ๊ณตํ•˜๋Š” Tesla ์‹œ๋ฆฌ์ฆˆ์˜ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋ฅผ ์žฅ์ฐฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ์„ผํ„ฐ ํ™˜๊ฒฝ์—์„œ ๋น„๊ต์  ๊ฐ€๋ฒผ์šด cost๋กœ GPU๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

GPU ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ , ์›Œํฌ๋กœ๋“œ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ฑฐ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ GPU๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” NVIDIA DCGM์— ๋Œ€ํ•œ Go API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋„๊ตฌ. Prometheus์™€ ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ์†”๋ฃจ์…˜์„ ์œ„ํ•ด HTTP ์—”๋“œํฌ์ธํŠธ์—์„œ GPU ๋ฉ”ํŠธ๋ฆญ์„ ๋…ธ์ถœํ•œ๋‹ค.

๋…๋ฆฝ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, k8s ํด๋Ÿฌ์Šคํ„ฐ์˜ GPU ๋…ธ๋“œ์— ๋ฐ๋ชฌ ์„ธํŠธ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

argo workflow

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” workflow engine์ด๋‹ค. ์›Œํฌ ํ”Œ๋กœ์šฐ๋ž€ ์ž‘์—…์˜ ํ๋ฆ„์œผ๋กœ์„œ, ๊ธฐ๊ณ„ ํ•™์Šต์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ปดํ“จํŒ… ์ง‘์•ฝ์ ์ธ ์ž‘์—…์„ ๋‹จ์‹œ๊ฐ„์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค CRD(Custom Resource Definition)์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

์›ํ•˜๋Š” Job์„ ๊ตฌ์„ฑํ•ด ๊ฐ Job๊ฐ„์˜ ์ข…์†์„ฑ์„ ๋ถ€์—ฌํ•˜๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ณ‘๋ ฌ๋กœ ์—ฌ๋Ÿฌ Job์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • ๋™์ž‘ ๋ฐฉ๋ฒ•
    1. ์‚ฌ์šฉ์ž๊ฐ€ YAML DAG ๋ช…์„ธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋งˆ์Šคํ„ฐ์— ์š”์ฒญ.
    2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์„œ๋ฒ„๊ฐ€ ๋ช…์„ธ๋ฅผ ๋ฐ›์•„ etcd DB์— workflow ์ •๋ณด๋ฅผ ์ €์žฅ.
    3. Argo controller๊ฐ€ reconcilation loop์—์„œ etcd DB์˜ ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  kube-scheduler์— ํ•„์š”ํ•œ Pod๋ฅผ ์š”์ฒญ.
    4. kube-scheduler๋Š” Pod๋ฅผ ์ ์ ˆํ•œ ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง.
    5. Argo controller๊ฐ€ ๋‹ค์Œ๋ฒˆ reconcilation loop์—์„œ ๋‹ค์Œ dependency๊ฐ€ ๊ฑธ๋ ค ์žˆ๋Š” Job์„ ์š”์ฒญ.
  • ์žฅ์ 
    1. ์‹คํ–‰ ๋‹จ์œ„๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์ด๋ฏ€๋กœ ๊ณ ๋ฆฝ์„ฑ์ด ๋†’๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ณ„ Job๋งˆ๋‹ค ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋‹ค์–‘ํ•ด๋„ ์„œ๋กœ ์—‰ํ‚ค์ง€ ์•Š๊ณ  ๋‹จ๋…์ ์œผ๋กœ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ์„ ๋‹ด๋‹นํ•˜๋Š” Job์„ ๋‹จ์ผํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    1. Pod๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ๋น„์šฉ์ด ์ ์ง€ ์•Š์•„ ์ž‘์€ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Job์„ ๋งŽ์ด ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์ฐจ๋ผ๋ฆฌ ํ”„๋กœ์„ธ์Šค, ์“ฐ๋ ˆ๋“œ ๋ ˆ๋ฒจ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
    2. ๊ฐ ์Šคํƒญ๋งˆ๋‹ค ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ Job๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๋น„๊ต์  ํž˜๋“ค๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€