[Использование стека технологий K8S для создания персонального каталога статей в частном облаке]
- Используйте стек технологий K8S для создания личного частного облака (сериализация: первая глава)
- Используйте стек технологий K8S для создания личного частного облака (сериал: построение кластера K8S)
- Используйте стек технологий K8S для создания личного частного облака (сериализация: понимание и практика среды K8S)
- Используйте стек технологий K8S для создания личного частного облака (сериал: базовое создание изображений и эксперимент)
- Используйте стек технологий K8S для создания личного частного облака (серия: Research on Resource Control)
- Используйте стек технологий K8S для создания личного частного облака (сериализация: создание клиента частного облака)
Примечание:Эта статья была впервые опубликована на моем официальном аккаунтеCodeSheep,Могунажиматьилисканированиепоследующийбудь остороженЗаходи подписывайся ↓ ↓ ↓
Принцип управления ресурсами частного облака K8S
Основываясь на подробной проработке предыдущей серии статей, мы можем вручную запустить образ Docker операционной системы CentOS 7.4 под командной строкой кластера K8S, а затем пользователи могут войти в контейнер CentOS через SSH для использования. Но в реальном использовании невозможно, чтобы разные пользователи каждый раз вручную заходили в командную строку для запуска образа CentOS, а затем с помощью команды проверяли IP-адрес и порт контейнера, а затем подключались через ssh. Нам лучше инкапсулировать запуск, запрос, удаление и т. д. контейнера Docker, а затем предоставить его пользователю через веб-страницу, которая соответствует потребностям пользователя!
Поскольку в нашей практике контейнеры Docker управляются в кластере kubernetes, ресурсы, задействованные в управлении ресурсами, здесь в основном представляют собой ресурсы kubernetes, такие как Pod, RC, Service и т. д.
Главный узел в kubernetes запускает модуль kube-apiserver, который обеспечивает спокойный интерфейс для внешнего мира.Мы можем программировать на основе этого интерфейса, чтобы завершить контроль и управление ресурсами кластера, такими как приложения, запросы и удаление Pod, RC, Service и др. задачи.
Чтобы CRUD ресурс kubernetes, такой как pod, вы должны сначала знать интерфейс для взаимодействия с кластером kubernetes. На главном узле kubernetes устанавливается клиентская программа kubectl, которая предоставляет пользователям интерфейс командной строки для взаимодействия с кластером kubernetes. kubectl передает пользовательские команды на apiserver через спокойный интерфейс для выполнения таких операций, как добавление, удаление и изменение ресурсов. Процесс можно проиллюстрировать следующим образом:
После того, как с принципом покончено, поговорим о том, как реализовать уровень кода.
Клиент управления ресурсами K8S
Подводя итог вышесказанному, несложно заметить, что CRUD-контроль ресурсов, связанных с k8s, может быть реализован через Restful-интерфейс. Чтобы использовать Kubernetes REST API для написания приложений, большинство языков могут легко реализовывать HTTP-запросы для работы с restful-интерфейсом kubernetes для управления и запроса ресурсов, но в этой статье в основном используется существующий клиент kubernetes для более элегантной реализации управления ресурсами kubernetes. Вам не нужно писать свой собственный API для вызова, запроса/ответа и т. д., вы можете напрямую использовать готовую клиентскую библиотеку для реализации.
Существует множество проектов с открытым исходным кодом для клиентов k8s, которые официально поддерживаются сообществом.
Официально поддерживаемые клиентские библиотеки Kubernetes относительно ограничены, включая следующие:
Клиентские библиотеки, поддерживаемые сообществом, более многочисленны и поддерживаются основными популярными языками программирования.Следующие клиентские библиотеки Kubernetes API поддерживаются создателями сообщества, и команда Kubernetes не будет обеспечивать поддержку и обслуживание:
В данной практике используется k8s-клиент Fabric8, реализованный на базе Java.
Поговорим о реализации уровня кода на базе Clinet.
Пример реализации кода управления ресурсами K8S
Ниже приведена комбинация кода, иллюстрирующая операции управления ресурсами k8s, обычно используемые Fabric8:
- Создать клиент K8S
String namespace = "default"; // namespace名
String master = "http://XXXX/"; // 配置为你的k8s集群的主节点地址
Config config = new ConfigBuilder().withMasterUrl(master).build();
KubernetesClient client = new DefaultKubernetesClient(config);
Далее управление, запрос и другие операции с ресурсами K8S в основном зависят от этого.clientЧтобы быть сделано!
- Создать модуль
Мы создаем ресурсы Pod из файла pod.yaml:
List<HasMetadata> resources = client.load(new FileInputStream(fileName)).get(); // fileName为一个外部的pod.yaml文件
if (resources.isEmpty()) {
System.err.println("No resources loaded from file: " +fileName);
return;
}
HasMetadata resource = resources.get(0);
if (resource instanceof Pod){
Pod pod = (Pod) resource;
System.out.println("Creating pod in namespace " + namespace);
NonNamespaceOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> pods = client.pods().inNamespace(namespace);
Pod result = pods.create(pod); // 此处创建pod资源!!!
System.out.println("Created pod " + result.getMetadata().getName());
} else {
System.err.println("Loaded resource is not a Pod! " + resource);
}
- удалить пакет
Удалить очень просто, если вы знаете пространство имен и имя, в котором находится под, вы можете сделать это с помощью одной строки кода.
client.pods().inNamespace("namespace名字").withName("pod名").delete();
- Модули запросов
Запросите журнал журнала Pod и распечатайте его на консоли:
client.pods().inNamespace("namespace名字").withName("pod名").tailingLines(10).watchLog(System.out))
Чтобы запросить некоторую другую информацию о модуле, вы можете обратиться к коду на шаге «Создать модуль»:
Pod result = pods.create(pod); // 此处创建pod资源!!!
System.out.println("Created pod " + result.getMetadata().getName()); // 类似于此处,除了获取Pod的名字外还可以获取很多类似信息
- Изменить конфигурацию модуля
Pod updatedPod = client.pods().inNamespace("namespace名字").withName("pod名").edit()
.editMetadata()
.addToLabels("server2", "nginx2")
.and().done();
log("Replaced testPod:", updatedPod);
Вышеприведенное описывает операцию CRUD ресурса Pod относительно полным образом, начиная с создания клиента K8S.Из-за нехватки места другие ресурсы, такие как RC, Service, Deployment и т. д., имеют аналогичные операции добавления, удаления, модификации и операции запроса, но названия разные, и их интерфейсы Соответствующий код управления ресурсами можно написать по небольшой аналогии с Pod.Здесь повторяться не будем.Очень важно делать выводы из одного случая.
постскриптум
Другие практические статьи автора SpringBt находятся здесь:
- Мониторинг приложений Spring Boot на практике
- Приложения SpringBoot развертываются во внешнем контейнере Tomcat.
- Практика поисковой системы ElasticSearch в SpringBt
- Предварительное изучение совместного программирования Kotlin+SpringBoot
- Практика ведения журнала Spring Boot
- Элегантное кодирование SpringBoot: благословение Ломбока
Если вам интересно, вы также можете уделить время прочтению некоторых статей автора о контейнеризации и микросервисах:
- Используйте стек технологий K8S для создания личного частного облака Серийная статья
- Подробная конфигурация сервера Nginx из списка конфигураций
- Строительство центра мониторинга визуализации контейнеров Docker
- Использование ELK для создания контейнерного центра журналов приложений Docker
- Практика фреймворка RPC: Apache Thrift
- Практика фреймворка RPC: Google gRPC
- Построение микросервисного центра отслеживания цепочки вызовов
- Контейнеры Docker обмениваются данными между хостами
- Предварительное исследование кластера Docker Swarm
- Несколько рекомендаций по эффективному написанию Dockerfile