Используйте стек технологий K8S для создания личного частного облака (сериализация: управление ресурсами K8S)

задняя часть Командная строка Docker CentOS
Используйте стек технологий K8S для создания личного частного облака (сериализация: управление ресурсами K8S)

[Использование стека технологий K8S для создания персонального каталога статей в частном облаке]

Примечание:Эта статья была впервые опубликована на моем официальном аккаунтеCodeSheep,Могунажиматьилисканированиепоследующийбудь остороженЗаходи подписывайся ↓ ↓ ↓

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资源控制架构图

После того, как с принципом покончено, поговорим о том, как реализовать уровень кода.


Клиент управления ресурсами K8S

Подводя итог вышесказанному, несложно заметить, что CRUD-контроль ресурсов, связанных с k8s, может быть реализован через Restful-интерфейс. Чтобы использовать Kubernetes REST API для написания приложений, большинство языков могут легко реализовывать HTTP-запросы для работы с restful-интерфейсом kubernetes для управления и запроса ресурсов, но в этой статье в основном используется существующий клиент kubernetes для более элегантной реализации управления ресурсами kubernetes. Вам не нужно писать свой собственный API для вызова, запроса/ответа и т. д., вы можете напрямую использовать готовую клиентскую библиотеку для реализации.

Существует множество проектов с открытым исходным кодом для клиентов k8s, которые официально поддерживаются сообществом.

Официально поддерживаемые клиентские библиотеки Kubernetes относительно ограничены, включая следующие:

官方支持的Kubernetes客户端库

Клиентские библиотеки, поддерживаемые сообществом, более многочисленны и поддерживаются основными популярными языками программирования.Следующие клиентские библиотеки Kubernetes API поддерживаются создателями сообщества, и команда Kubernetes не будет обеспечивать поддержку и обслуживание:

社区维护的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 находятся здесь:


Если вам интересно, вы также можете уделить время прочтению некоторых статей автора о контейнеризации и микросервисах:


CodeSheep · 程序羊