/етц/ресолв.цонф за Кубернетес подове, опцију ндотс:5, како ово може негативно утицати на перформансе апликације

/етц/ресолв.цонф за Кубернетес подове, опцију ндотс:5, како ово може негативно утицати на перформансе апликације

Недавно смо покренули Кубернетес 1.9 на АВС-у користећи Копс. Јучер, док сам глатко покретао нови саобраћај у највећи од наших Кубернетес кластера, почео сам да примећујем необичне грешке у резолуцији ДНС имена које је забележила наша апликација.

Има доста тога о овоме на ГитХубу говорио, па сам одлучио да и ја то схватим. На крају сам схватио да је то у нашем случају узроковано повећаним оптерећењем на kube-dns и dnsmasq. Најзанимљивије и ново за мене је био сам разлог значајног повећања промета ДНС захтјева. Мој пост је о томе и шта да се ради о томе.

ДНС резолуција унутар контејнера – као иу сваком Линук систему – одређена је конфигурационим фајлом /etc/resolv.conf. Подразумевани Кубернетес dnsPolicy ово ClusterFirst, што значи да ће сваки ДНС захтјев бити прослијеђен на dnsmasq, трчање у махуни kube-dns унутар кластера, који ће заузврат проследити захтев апликацији kube-dns, ако се име завршава суфиксом кластера, или, у супротном, на ДНС сервер вишег нивоа.

фајл /etc/resolv.conf унутар сваког контејнера подразумевано ће изгледати овако:

nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local 
eu-west-1.compute.internal
options ndots:5

Као што видите, постоје три директиве:

  1. Сервер имена је ИП адреса услуге kube-dns
  2. Наведена су 4 локална домена за претрагу search
  3. Постоји опција ndots:5

Интересантан део ове конфигурације је како локална претрага домена и подешавања ndots:5 слагати заједно. Да бисте ово разумели, морате разумети како функционише ДНС резолуција за неквалификована имена.

Шта је пуно име?

Потпуно квалификовано име је име за које се неће вршити локална претрага и име ће се сматрати апсолутним током разрешавања имена. По конвенцији, ДНС софтвер сматра да је име потпуно квалификовано ако се завршава тачком (.), а иначе није потпуно квалификовано. То је google.com. потпуно дефинисан и google.com - Не.

Како се поступа са неквалификованим именом?

Када се апликација повеже са удаљеним хостом наведеним у имену, решавање ДНС имена се обично врши помоћу системског позива, нпр. getaddrinfo(). Али ако је име неквалификовано (не завршава се са .), питам се да ли ће системски позив прво покушати да разреши име као апсолутно име или ће прво проћи кроз домене локалне претраге? Зависи од опције ndots.

Из приручника resolv.conf:

ndots:n

устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.

То значи да ако за ndots ако има вредност 5 и име садржи мање од 5 тачака, системски позив ће покушати да га реши секвенцијално тако што ће прво прећи све домене локалне претраге и, ако не успе, на крају га решити као апсолутно име.

Зашто тако ndots:5 може ли негативно утицати на перформансе апликације?

Као што можете замислити, ако ваша апликација користи много спољног саобраћаја, за сваку успостављену ТЦП везу (или тачније, за свако разрешено име), она ће издати 5 ДНС упита пре него што име буде исправно решено, јер ће прво проћи кроз 4 локалну претрагу домена, а на крају ће издати апсолутни захтев за разрешење имена.

Следећи графикон приказује укупан саобраћај на наша 3 кубе-днс модула пре и након што смо неколико имена хостова конфигурисаних у нашој апликацији пребацили на потпуно квалификована.

/етц/ресолв.цонф за Кубернетес подове, опцију ндотс:5, како ово може негативно утицати на перформансе апликације

Следећи дијаграм приказује кашњење апликације пре и након што смо неколико имена хостова конфигурисаних у нашој апликацији пребацили на пуна имена (вертикална плава линија је примена):

/етц/ресолв.цонф за Кубернетес подове, опцију ндотс:5, како ово може негативно утицати на перформансе апликације

Решење #1 – Користите потпуно квалификована имена

Ако имате неколико статичких екстерних имена (тј. дефинисаних у конфигурацији апликације) на које креирате велики број веза, можда је најједноставније решење да их пребаците на потпуно квалификована тако што ћете их једноставно додати. на крају.

Ово није коначно решење, али помаже да се брзо, иако не чисто, поправи ситуација. Применили смо ову закрпу да решимо наш проблем, чији су резултати приказани на горњим снимцима екрана.

Решење #2 - прилагођавање ndots в dnsConfig

У Кубернетес 1.9, функционалност се појавила у алфа режиму (бета верзија в1.10), што вам омогућава да боље контролишете ДНС параметре преко својства под у dnsConfig. Између осталог, омогућава вам да конфигуришете вредност ndots за конкретну махуну, тј.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsConfig:
    options:
      - name: ndots
        value: "1"

izvori

Прочитајте и друге чланке на нашем блогу:

Извор: ввв.хабр.цом

Додај коментар