telematics lec 02

This commit is contained in:
Ivan I. Ovchinnikov 2023-02-27 15:52:29 +03:00
parent bf020ed978
commit bb3d6c3f63
2 changed files with 232 additions and 22 deletions

View File

@ -133,7 +133,7 @@ DevOps-инженер -- высококвалифицированный спец
Используемые инструменты -- Jenkins, Docker, Kubernetes, Git, Приложения для управления инфраструктурой (Terraform), платформенные и облачные сервисы, утилиты мониторинга и оповещений. Используемые инструменты -- Jenkins, Docker, Kubernetes, Git, Приложения для управления инфраструктурой (Terraform), платформенные и облачные сервисы, утилиты мониторинга и оповещений.
\section{Система контейнеризации Docker} \section{Система контейнеризации Docker}
Виртуализация и контейнеризация \subsection{Виртуализация и контейнеризация}
Микросервисная архитектура -- это такой подход, при котором единое приложение строится как набор небольших сервисов, каждый из которых работает в собственном процессе и коммуницирует с остальными, используя легковесные механизмы. Такой подход получил распространение в середине 2010х годов в связи с развитием гибких практик разработки. Микросервисная архитектура -- это такой подход, при котором единое приложение строится как набор небольших сервисов, каждый из которых работает в собственном процессе и коммуницирует с остальными, используя легковесные механизмы. Такой подход получил распространение в середине 2010х годов в связи с развитием гибких практик разработки.
@ -146,36 +146,41 @@ DevOps-инженер -- высококвалифицированный спец
\item повсеместное использование виртуализации \item повсеместное использование виртуализации
\end{itemize} \end{itemize}
Виртуализацция -- это технология с помощью которой на одном физическом устройстве можно создать несколько виртуальных компьютеров. На компьютере с одной ОС можно запустить несколько других ОС или приложений. ОС запускаются в виртуальной среде, но используется инфраструктура хоста и позволяет им работать на одном устройстве изолированно друг от друга. Виртуализацция -- это технология с помощью которой на одном физическом устройстве можно создать несколько виртуальных компьютеров. На компьютере с одной ОС можно запустить несколько других ОС или приложений. ОС запускаются в виртуальной среде, но используется инфраструктура хоста и позволяет им работать на одном устройстве изолированно друг от друга. ОС компьютера, на котором работает виртуальная среда, называется хост-системой, а ОС, которая запускается в этой виртуальной среде -- гостевой системой. Хостовая и гостевая ОС могут иметь взаимоисключающие компоненты, но виртуальная среда позволяет урегулировать эти конфликты.
Виртуальная среда создаётся при помощи программной или аппаратной схемы - гипервизора -- инструмента, обеспечивающего параллельное управление несколькими ОС на одном хосте. Виртуальная среда создаётся при помощи программной или аппаратной схемы -- гипервизора -- инструмента, обеспечивающего параллельное управление несколькими ОС на одном хосте.
Виртуализация. Типы гипервизоров \subsection{Виртуализация}
Гипервизор -- это инструмент, обеспечивающий параллельное управление несколькими ОС на хосте.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-t-00-hyperv.svg}
\end{figure}
Типы гипервизоров
Гипервизоры: Гипервизоры:
\begin{itemize} \begin{itemize}
\item аппаратные -- VMWare ESX, Citrix Hyper-V \item аппаратные -- VMWare ESX, Citrix XenServer, MS Hyper-V;
\item устанавливаемые поверх базовой ОС -- MS Virtual PC \item устанавливаемые поверх базовой ОС -- MS Virtual PC, VMWare Workstation, VirtualBox;
\item гибридные -- \item гибридные -- Citrix XenServer, Microsoft Hyper-V.
\end{itemize} \end{itemize}
Новый подход к виртуализации Назрела необходимость в ином подходе к построению архитектуры приложений, при котором ядро ОС поддерживают несколько изолированных экземпляров пользовательского пространства вместо одного (namespaces)\footnote{namespace -- это функция ядра Linux, позволяющая изолировать и виртуализировать глобальные системные ресурсы множества процессов.}. Возникновение контейнеризации -- контейнерной виртуализации. Контейнеризация использует ядро хост системы, оставаясь при этом не менее функциональной и обеспечивающей необходимую изоляцию.
Назрела необходимость в ином подходе к построению архитектуры приложений, при котором ядро ОС поддерживают несколько изолированных экземпляров пользовательского пространства вместо одного (namespaces). Возникновение контейнеризации -- контейнерной виртуализации. К использует ядро хост системы, оставаясь при этом не менее функциональной и обеспечивающей необходимую изоляцию. Контейнерная виртуализация -- это способ, при котором виртуальная среда запускается прямо из ядра хотовой ОС (то есть без установки другой ОС). В данном случае изоляцию ОС и приложений поддерживает контейнер. Контейнер содержит всё, что нужно для запускаемого в нём приложения: код, библиотеки, инструменты и настройки. Всё это упаковано в отдельный образ, работу которого запускает контейнерный движок.
КВ -- это способ, при котором вирт среда запускается прямо из ядра хотовой ОС (то есть без установки другой ОС). В данном случае изоляцию ОС и приложений поддерживает контейнер. Контейнер создержит всё, что нужно для запускаемого в нём приложения: код, библиотеки, инструменты и настройки. Всё это упаковано в отдельный образ, работу которого запускает контейнерный движок. В случае с контейнерами у нас есть базовая аппаратная инфраструктура (железа компьютера), ОС и движок, установленный на этой ОС. Движок управляет контейнерами, которые работают с библиотеками и зависимостями сами, в одиночку. В случае виртуальной машины у нас есть ОС на базовом оборудовании (наше железо), затем гипервизор, а затем виртуальные машины. У каждой ВМ внутри своя ОС. Контейнеры загружаются быстрее и работают эффективнее.
В случае с контейнерами у нас есть... Проблемы контейнеризации. Для контейнеров используется виртуализация на уровне ядра, то есть от гипервизора можно отказаться. Однако:
Проблемы контейнеризации
Для контейнеров используется виртуализация на уровне ядра, то есть от гипервизора можно отказаться. однако:
\begin{itemize} \begin{itemize}
\item контейнео использует ядро хост системы, проблемы с безопасностью \item контейнер использует ядро хост системы, а отсюда проблемы с безопасностью;
\item в контейнере может быть запущен экземпляр ОС только с тем же ядром, что и у хост ОС. \item в контейнере может быть запущен экземпляр ОС только с тем же ядром, что и у хост ОС.
\end{itemize} \end{itemize}
Возможно получить доступ к возможностям Windows и Linux одновременно при помощи WSL. Возможно получить доступ к возможностям Windows и Linux одновременно при помощи WSL.
Как решить проблемы проблемы контейнеризации Как решить проблемы проблемы контейнеризации:
\begin{itemize} \begin{itemize}
\item следование принципу единственной ответственности (Single responsibility principle) \item следование принципу единственной ответственности (Single responsibility principle)
\item Всё необходимое должно быть в самом контейнере \item Всё необходимое должно быть в самом контейнере
@ -183,9 +188,9 @@ DevOps-инженер -- высококвалифицированный спец
\item контейнер должен быть эфемерным \item контейнер должен быть эфемерным
\end{itemize} \end{itemize}
Контейнеризаторы приложений Контейнеризаторы приложений (Docker, LXC)
Докер -- платформа автоматизации и доставки приложений. Докер -- платформа автоматизации и доставки приложений с открытым исходным кодом. Платформа позволяет быстрее тестировать и выкладывать приложения, запускать на одной машине требуемое количество контейнеров.
\begin{itemize} \begin{itemize}
\item сервер dockerd \item сервер dockerd
\item API \item API
@ -194,16 +199,16 @@ DevOps-инженер -- высококвалифицированный спец
Компоненты докер Компоненты докер
\begin{itemize} \begin{itemize}
\item хост -- хост ПК \item хост -- хост ПК, компьютер, на котором работает докер.
\item демон -- фоновый процесс, работающий на хосте постоянно и ожидающий команды управления. Имеет информацию обо всех контейнерах на хосте. \item демон -- фоновый процесс, работающий на хосте постоянно и ожидающий команды управления. Имеет информацию обо всех контейнерах на хосте. Демон знает всё о контейнерах, запущенных на одном хосте -- сколько всего контейнеров, какие из них работают, где хранятся образы и так далее.
\item клиент -- клиент при помощи с котрого пользователь взаимодействует с демоном \item клиент -- клиент при помощи с котрого пользователь взаимодействует с демоном. Это может быть консоль, API или графический интерфейс.
\item образ -- неизменяемый образ приложения (можно представить как установочный диск) \item образ -- неизменяемый образ приложения (можно представить как установочный диск)
\item контейнер -- развёрнутое на основе образа и запущенное приложение. \item контейнер -- развёрнутое на основе образа и запущенное приложение.
\item докерфайл -- файл-инструкция для сборки докер-образа. Строки файла это слои образа. Инструкции обрабатываются последовательно. \item докерфайл -- файл-инструкция для сборки докер-образа. Строки файла это слои образа. Инструкции обрабатываются последовательно.
\item docker registry -- репозиторий, в котором хранятся образы (докерхаб) \item docker registry -- репозиторий, в котором хранятся образы (докерхаб)
\end{itemize} \end{itemize}
Образ -- шаблон с набором инструкций, предназначенных для создания контейнера. Приложения упаковываются в образ Образ -- шаблон с набором инструкций, предназначенных для создания контейнера. Приложения упаковываются в образ, из которого затем создаются контейнеры.
Контейнер -- уже собранное, настроенное и запущенное на основе образа приложение в изолированное среде. Контейнер -- уже собранное, настроенное и запущенное на основе образа приложение в изолированное среде.

205
pics/04-t-00-hyperv.svg Normal file
View File

@ -0,0 +1,205 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg2875"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="04-t-00-hyperv.svg">
<defs
id="defs2869" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="209.14026"
inkscape:cy="622.06381"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="true"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:window-width="1533"
inkscape:window-height="1205"
inkscape:window-x="46"
inkscape:window-y="72"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid3438" />
</sodipodi:namedview>
<metadata
id="metadata2872">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="52.771973"
y="197.55246"
id="text3442"><tspan
sodipodi:role="line"
id="tspan3440"
x="52.771973"
y="197.55246"
style="stroke-width:0.264583">Хост компьютер</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="58.073284"
y="189.61496"
id="text3446"><tspan
sodipodi:role="line"
id="tspan3444"
x="58.073284"
y="189.61496"
style="stroke-width:0.264583">гипервизор</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="26.323286"
y="179.8588"
id="text3450"><tspan
sodipodi:role="line"
id="tspan3448"
x="26.323286"
y="179.8588"
style="stroke-width:0.264583">гостевая ОС</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="58.073284"
y="179.8588"
id="text3450-2"><tspan
sodipodi:role="line"
id="tspan3448-8"
x="58.073284"
y="179.8588"
style="stroke-width:0.264583">гостевая ОС</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="89.823288"
y="179.8588"
id="text3450-8"><tspan
sodipodi:role="line"
id="tspan3448-9"
x="89.823288"
y="179.8588"
style="stroke-width:0.264583">гостевая ОС</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="26.296759"
y="171.09412"
id="text3490"><tspan
sodipodi:role="line"
id="tspan3488"
x="26.296759"
y="171.09412"
style="stroke-width:0.264583">приложения</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="58.046757"
y="171.09412"
id="text3490-2"><tspan
sodipodi:role="line"
id="tspan3488-8"
x="58.046757"
y="171.09412"
style="stroke-width:0.264583">приложения</tspan></text>
<text
xml:space="preserve"
style="font-size:4.9389px;line-height:1.25;font-family:'PT Astra Serif';-inkscape-font-specification:'PT Astra Serif';stroke-width:0.264583"
x="89.796761"
y="171.09412"
id="text3490-8"><tspan
sodipodi:role="line"
id="tspan3488-86"
x="89.796761"
y="171.09412"
style="stroke-width:0.264583">приложения</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3528"
width="95.25"
height="6.614573"
x="23.8125"
y="193.14583" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3530"
width="95.25"
height="7.9375"
x="23.8125"
y="183.88542" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3532"
width="30.427082"
height="7.9375"
x="23.8125"
y="174.625" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3534"
width="31.75"
height="7.9375"
x="55.5625"
y="174.625" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3536"
width="30.427082"
height="7.9375"
x="88.635414"
y="174.625" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3538"
width="30.427082"
height="6.6145935"
x="23.8125"
y="166.6875" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3540"
width="31.75"
height="6.6145935"
x="55.5625"
y="166.6875" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.264999"
id="rect3542"
width="30.427084"
height="6.6145935"
x="88.635414"
y="166.6875" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB