Kubernetes.Конфигмапы (ConfigMap) - теория. часть8

Thank you for reading this post, don't forget to subscribe!

Исполь­зо­ва­ние кон­фиг­ма­пов (ConfigMaps) поз­во­ля­ет раз­де­лять кон­фи­гу­ра­ци­он­ные фай­лы и кон­тей­не­ры с при­ло­же­ни­я­ми, избав­ляя от необ­хо­ди­мо­сти упа­ко­вы­вать кон­фи­ги в docker-образ. В дан­ной ста­тье рас­смот­рим несколь­ко при­ме­ров исполь­зо­ва­ния конфигмапов.

Для созда­ния объ­ек­та ConfigMap в кла­сте­ре Kubernetes исполь­зу­ет­ся команда:

C помо­щью этой коман­ды мож­но созда­вать кон­фиг­ма­пы из ката­ло­гов, фай­лов и аргу­мен­тов команд­ной стро­ки. Раз­бе­рем каж­дый из пере­чис­лен­ных вари­ан­тов на примерах.

Созда­ние кон­фиг­ма­па (ConfigMap) из ката­ло­га под­ра­зу­ме­ва­ет созда­ние объ­ек­та из одно­го или несколь­ких фай­лов, рас­по­ло­жен­ных в одной дирек­то­рии. Напри­мер, созда­ем ката­лог и ска­чи­ва­ем в него два фай­ла с параметрами:

Созда­ем кон­фиг­мап из каталога:

Про­ве­рим, что создан­ный кон­фиг­мап дей­стви­тель­но состо­ит из двух файлов:

Про­ве­рим содер­жи­мое кон­фиг­ма­па (сек­ция data:), вывод сокращен:

Созда­ние кон­фиг­ма­па из фай­ла тоже не долж­но вызы­вать сложностей:

Про­вер­ка:

К сло­ву, есть воз­мож­ность несколь­ко раз ука­зы­вать пара­метр --from-file для дан­ной коман­ды - при этом будет создан кон­фиг­мап из несколь­ких фай­лов, например:

Есть воз­мож­ность созда­вать кон­фиг­ма­пы из фай­лов с пере­мен­ны­ми (env-file). Эти фай­лы долж­ны содер­жать инфор­ма­цию в фор­ма­те ключ=значение (по одно­му на стро­ку), пустые стро­ки и стро­ки, начи­на­ю­щи­е­ся с сим­во­ла # игно­ри­ру­ют­ся. Напри­мер, созда­дим в нашем ката­ло­ге файл с име­нем game-env-file.properties и сле­ду­ю­щим содержимым:

Теперь созда­дим из это­го фай­ла кон­фиг­мап командой:

Cодер­жи­мое конфигмапа:

Сто­ит отме­тить, что при пере­да­че несколь­ких пара­мет­ров --from-env-file для созда­ния кон­фиг­ма­па, будет исполь­зо­ван толь­ко послед­ний из ука­зан­ных файлов.

Так­же полез­ной может ока­зать­ся воз­мож­ность ука­зы­вать ключ, назва­ние кото­ро­го отли­ча­ет­ся от име­ни фай­ла с пара­мет­ра­ми, при созда­нии кон­фиг­ма­па. Например:

Обра­ти­те вни­ма­ние на назва­ние ключа:

Еще одна воз­мож­ность - созда­вать кон­фиг­ма­пы ука­зы­вая пара­мет­ры пря­мо в команд­ной стро­ке с помо­щью --from-literal:

Про­ве­рим:

Напо­сле­док - самый удоб­ный (на мой взгляд) вари­ант созда­ния кон­фиг­ма­пов - опи­са­ние их в отдель­ном yaml-фай­ле (по ана­ло­гии с дру­ги­ми объ­ек­та­ми Kubernetes). Созда­дим два таких файла:

Теперь мы можем исполь­зо­вать создан­ные выше кон­фиг­ма­пы при опи­са­нии пода (Pod):

В дан­ном при­ме­ре для настрой­ки пода мы явно ука­зы­ва­ем с каких кон­фиг­ма­пов и зна­че­ния каких клю­чей необ­хо­ди­мо брать.

Мож­но создать кон­фиг­мап с несколь­ки­ми пара­ми ключ=значение, например:

Такой кон­фиг­мап в опи­са­нии пода будет выгля­деть несколь­ко проще:

Еще одна важ­ная (и самая вос­тре­бо­ван­ная) осо­бен­ность - воз­мож­ность мон­ти­ро­вать кон­фиг­ма­пы в кон­тей­не­ры в каче­стве томов. При­мер с исполь­зо­ва­ни­ем создан­но­го ранее кон­фиг­ма­па special-config:

При стар­те дан­но­го пода коман­да ls /etc/config/ выве­дет на экран следующее:

Мож­но ука­зы­вать кон­крет­ный путь для мон­ти­ро­ва­ния дан­ных из кон­фиг­ма­па. Напри­мер, сущ­ность special.level из кон­фиг­ма­па с име­нем special-config может быть смон­ти­ро­ва­на в /etc/config/keys внут­ри контейнера:

При запус­ке пода коман­да cat /etc/config/keys выве­дет на экран:

Напо­сле­док сто­ит отме­тить, что смон­ти­ро­ван­ные внутрь кон­тей­не­ра кон­фиг­ма­пы будут обнов­лять­ся авто­ма­ти­че­ски (за исклю­че­ни­ем мон­ти­ро­ва­ния как subPath). Пери­од обнов­ле­ния, как ука­за­но в доку­мен­та­ции, состав­ля­ет kubelet sync period + ttl of ConfigMaps cache in kubelet.