Введение
В предыдущем блоге Изучение шаблона проектирования коляски в K8s — часть 1 мы представили шаблон проектирования коляски, используя термины непрофессионала. В этом блоге мы будем использовать KCL, современный, типобезопасный язык конфигурации, чтобы продемонстрировать описание ресурсов пода. В последующих блогах мы будем использовать KCL для изучения практического применения шаблона Sidecar.
1. Определение OpenAPI для модулей
Вернемся к простейшему примеру Nginx, где файл YAML следует аналогичному шаблону:
apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - image: nginx name: main-container ports: - containerPort: 80
Здесь данные Pod соответствуют определению модели io.k8s.api.core.v1.Pod в спецификации Kubernetes. Полное определение OpenAPI можно найти здесь. Внимательно проанализировав его, мы можем увидеть, что apiVersion и информация о виде являются часто используемыми конфигурациями по умолчанию. Нам нужен более современный язык конфигурации, чтобы упростить его.
2. Определение ресурсов пода с помощью KCL
KCL — это язык политики конфигурации для облачного домена. Для получения дополнительной информации, пожалуйста, обратитесь к официальному сайту. Базовые программы конфигурации KCL по-прежнему используют формат K=V
, похожий на YAML. Например, мы можем переписать конфигурацию контейнера Nginx, используя следующий код KCL:
import k8s.api.core.v1 as k8core k8core.Pod { metadata.name = "web-app" spec.containers = [{ name = "main-container" image = "nginx" ports = [{containerPort: 80}] }] }
Здесь оператор import
импортирует пакет k8s/api/core/v1
из пакета k8s, а определение структуры Pod
соответствует модели Pod
. Значения по умолчанию для apiVersion и kind уже включены, поэтому нам нужно добавить только свойства metadata.name
и spec.containers
(KCL также предоставляет синтаксический сахар для некоторых многоуровневых вложенных свойств). Мы можем использовать инструмент управления пакетами kpm, чтобы создать программу KCL для определения ресурса Pod и выполнить программу, чтобы получить соответствующий YAML:
# 1. Initialize a kcl program package called hello. kpm init hello # 2. Edit the main.k file inside the hello package and add the KCL configuration code mentioned earlier. cat <<EOF > hello/main.k import k8s.api.core.v1 as k8core k8core.Pod { metadata.name = "web-app" spec.containers = [{ name = "main-container" image = "nginx" ports = [{containerPort: 80}] }] } EOF # 3. Navigate to the hello package, add the k8s dependency, and run the hello package. cd hello && kpm add k8s && kpm run
Можно получить следующий вывод YAML:
apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - image: nginx name: main-container ports: - containerPort: 80
3. Заключение
В этом блоге мы кратко рассказали, как использовать KCL для создания более гибких и надежных конфигураций Pod. В последующих блогах мы будем использовать KCL для извлечения и абстрагирования лучших практик шаблонов Sidecar, включая использование KCL для абстрагирования модели Sidecar и использование KCL для внедрения Sidecars в существующие исходные конфигурации YAML.