Императив срещу Декларация

От Андрю Чен и Доминик Торнов

Kubernetes е двигател за оркестрация на контейнери, предназначен да хоства контейнерни приложения на набор от възли, обикновено наричани клъстер. Използвайки подход за моделиране на системи, тази серия има за цел да разшири разбирането за Kubernetes и неговите основни концепции.

Kubernetes често се описва като декларативна система и се сравнява с императивни системи. Значението на термините „декларативен“ и „императивен“ обаче не е лесно очевидно. Тази публикация в блога предоставя кратък модел за илюстриране на приликите и разликата между двете.

Модел на изчисление

Останалата част от тази публикация ще възприеме прост държавен машинен модел на изчисление. В модела на състоянието машина, изчислението се дефинира като прилагане на команда, която преминава системата от едно състояние в друго. Следователно работеща система е поредица от команди, които прехвърлят системата през различни състояния.

Фигура 1. Модел на изчисление на държавната машина

Системата се счита за съвпаднала, ако текущото състояние е равно на желаното състояние. За разлика от тях се счита, че системата е в отклонение от състояние, ако текущото състояние не е равно на желаното състояние. Наборът от команди, който преминава системата от текущото й състояние в дадено желано състояние, се нарича набор от смекчаващи действия.

Например, като се има предвид първоначалното състояние S, командата c преминава системата в състояние S ’. По подобен начин, c „преминава системата към S“ и така нататък. Тъй като S е текущото състояние, а S 'е желаното състояние, наборът от смекчаващи действия е равен на {c, c', c ’'}.

Фигура 2. Структурна диаграма, подчертаваща участниците в модела на изчислението на държавната машина

Фигура 2. подчертава участниците, участващи в изчислителния модел на държавната машина. Автоматът е отговорен за прилагането на дадена команда към текущото състояние, което преминава системата в следващото състояние. Обаче средата, в която съществува системата, също може да повлияе на държавата.

Тук, предвидена промяна на състоянието е всяка промяна в състоянието, която е резултат от изрично предоставена команда. За разлика от тях, непреднамерена промяна в състоянието е всяка промяна в състоянието, която е резултат от взаимодействие с околната среда.

В контекста на Kubernetes, предвидената промяна в състоянието може да бъде разполагането на Pod или ReplicaSet, докато непреднамерената промяна в състоянието може да бъде един контейнер или цял възел, който се спуска надолу.

Императивни системи

В императивна система потребителят знае желаното състояние, определя последователността на командите за преминаване на системата в желаното състояние и предоставя представяне на командите към системата. Компонентът на системата, която прилага командата за преход на състоянието, се нарича процесор.

Фигура 3. Императивни системи

Декларативни системи

За разлика от това, в декларативна система потребителят знае желаното състояние, предоставя представяне на желаното състояние в системата, след това системата чете текущото състояние и определя последователността на командите за преход на системата в желаното състояние. Компонентът, който определя необходимата последователност от команди, се нарича контролер.

Фигура 4. Декларативни системи

Декларативните системи имат ясното предимство, че могат да реагират на нежелани промени в състоянието без по-нататъшен надзор: В случай на неволна промяна на състоянието, водеща до изместване на състоянието, системата може автономно да определя и прилага набора от смекчаващи действия, водещи до съвпадение на състоянието , Този процес се нарича контролен цикъл, популярен избор за внедряване на контролери.

Kubernetes

Kubernetes е декларативна система. Вместо един контролер обаче той има няколко контролера, всеки от които е отговорен за различен тип обекти на Kubernetes, като ReplicaSet или Deployment, например. API сървърът действа като процесор и прилага командите, дадени от контролерите, в системното състояние, което се съхранява в Kubernetes Object Store.

Фигура 5. Кубернети като декларативна система

в обобщение

Определящият аспект на императивните и декларативни системи е отговорът на въпроса кой е на мястото на водача. Потребителят или системата отговаря ли за организирането на прехода в желаното състояние?

В императивна система потребителят е отговорен за това, че знае как да насочи системата до желаното състояние, докато в декларативна система системата е отговорна за това как да знае как да се насочи към желаното състояние.

За тази публикация

Тази публикация в блога е част от усилията за сътрудничество между CNCF, Google и SAP за постигане на разбиране за Kubernetes и неговите основни концепции.