
Saludos, Habr!
Nosotros, el equipo de arquitectos de TI de IBM, que se dedica a la creación y comercialización de soluciones industriales para diversas industrias. En nuestro tiempo libre, investigamos nuevas tecnologías, experimentamos y probamos las mejores prácticas.
En los últimos años, el tema de Internet de las cosas ha sido muy popular. Nuestros clientes preguntan acerca de las soluciones y plataformas de caja universal que se pueden ubicar localmente en su centro de datos. Lo más importante es que, sobre la base de tales "cajas", todos los nuevos servicios y aplicaciones deberían desarrollarse y lanzarse muy rápidamente, o más bien instantáneamente o "ayer".
Nos preguntamos: "¿Qué pasa si juntamos algo similar en tecnologías abiertas y públicas?"
Ya hemos hablado y mostrado mucho sobre el uso de los contenedores
Docker y sus herramientas de administración basadas en
Kubernetes . Sin embargo, hasta ahora no ha sido posible ver cómo todas estas tecnologías avanzadas se pueden utilizar a escala industrial para tareas comerciales, específicamente en Internet de las cosas. Así que llenemos este vacío. El concepto de microservicios, así como los enfoques de moda para el desarrollo (DevOps), la integración y el despliegue de aplicaciones (CI / CD) se considerarán una tarea ligeramente diferente y se reservarán para más adelante.
En este artículo queremos hablar sobre la preparación e instalación de uno de los componentes clave: IBM Cloud Private (de hecho, el ensamblaje industrial de Docker / Kubernetes y un poco más), que puede actuar como un núcleo de infraestructura condicional al crear una plataforma local de Internet de las cosas. Pregunta por qué él?
Porque prometimos tecnologías abiertas y públicas (versión gratuita para la comunidad y soporte de la comunidad):
hub.docker.com/r/ibmcom/icp-inceptionDescripción general de IBM Cloud Private
IBM Cloud Private (ICP) es una plataforma de nube privada para implementación y operaciones locales. ICP es un entorno integrado que le permite diseñar, desarrollar, implementar y administrar aplicaciones locales creadas teniendo en cuenta la arquitectura de contenedores. La entrega de ICP incluye un orquestador basado en Kubernetes (K8), un almacén de imágenes local, así como una consola de administración y herramientas de monitoreo compatibles.
¿Qué es una nube privada o privada?
Una nube privada es un modelo de computación en la nube que se ejecuta exclusivamente para una organización, generalmente en su territorio y recursos. Dicha nube puede ser gestionada y mantenida tanto por sus propios especialistas como por terceros. Se puede alojar una plataforma similar detrás del firewall de la compañía y fuera de él. Una nube privada proporciona los beneficios de una nube pública, incluida la implementación rápida y la escalabilidad, así como la facilidad de uso, administración y flexibilidad. Al mismo tiempo, la versión local proporciona un mayor control sobre el sistema, mayor productividad, costos predecibles con precisión, mayores requisitos de seguridad y capacidades de administración flexibles según las necesidades de la organización. Una nube privada le permite configurarla directamente para tareas comerciales específicas y requisitos de seguridad del cliente.
Antes de proceder con la instalación de ICP, definiremos la terminología:
Nodo maestro- Supervisa y controla el clúster K8.
- kubectl: una herramienta de línea de comandos para administrar un clúster.
- API REST: interfaz para interactuar con nodos de trabajo.
- etcd: es un almacén de claves asequible y persistente, que se utiliza como almacenamiento de respaldo de K8 para todos los datos del clúster.
- Kube-Scheduler: este componente supervisa los contenedores recién creados (pods) que no tienen un nodo asignado, y selecciona un nodo para ejecutarlos.
- Por lo general, se requieren 3 o más nodos principales para un funcionamiento estable y garantizar la tolerancia a fallas. En nuestro caso, para ahorrar recursos, instalaremos todos los componentes ICP necesarios en un único servidor dedicado (nodo único).
Nodo de trabajo- La máquina de trabajo en los K8 anteriormente conocida como Minion. Este nodo puede ser cualquiera de los hosts que recibe tareas del nodo principal y también controla el proceso de lanzamiento de contenedores en él. Dependiendo de la configuración del clúster, el nodo de trabajo puede ser una máquina virtual o un servidor físico.
- Los siguientes componentes se pueden ejecutar en cada nodo:
- kubelet: es el servicio principal del nodo de trabajo. Supervisa los contenedores que se asignaron a su nodo (ya sea para una conexión segura o mediante un archivo de configuración local).
- kube-proxy: muestra los servicios definidos en la API de K8s en cada nodo, admite reglas de red en el host y reenvía las conexiones.
- docker: lanzamiento de contenedores y entorno de gestión.
- supervisor: este es un sistema de control y proceso de monitoreo liviano que puede usar para mantener el kubelet y la ventana acoplable en funcionamiento.
- fluentd: este es un servicio que ayuda a garantizar el registro a nivel de clúster.
Contenedores- Una aplicación que se ejecuta en un entorno aislado.
- El conjunto de procesos ejecutables y la imagen lanzada del programa.
Capullos (vainas)- Un pod es un grupo de uno o más contenedores Docker, con un almacenamiento / red común y una especificación de cómo ejecutar contenedores en un nodo de trabajo.
- Cada Pod tiene su propia IP.
- Pod comparte el espacio de nombres PID, la red y el nombre de host.
Controlador de replicación- Proporciona accesibilidad y escalabilidad.
- Responsable de controlar el número de Pods desplegados.
- Utiliza una plantilla que describe lo que debe contener cada Pod.
Etiquetas- Metadatos asignados a los recursos de K8, por ejemplo: contenedores, servicios.
- Pares clave-valor unidos a objetos para identificación.
- Estos parámetros son críticos porque se basan en una solicitud de clúster de recursos con etiquetas específicas.
Servicios- Una colección de contenedores expuestos como punto final.
- Información sobre el estado del clúster K8s y la configuración de red, que se aplica a todos los nodos de trabajo.
- Con la configuración correcta, los pods creados por el controlador de replicación se registrarán automáticamente como el servicio correspondiente.
Información secreta (secretos)- Información confidencial para ser leída o utilizada por los contenedores.
- Se montan volúmenes especiales de la unidad de disco automáticamente para que los contenedores puedan leer el contenido.
- Cada entrada tiene su propio camino.
Arquitectura
A continuación se muestra una arquitectura ICP de alto nivel que enumera los componentes principales por nodos principales, de trabajo y proxy. Vale la pena señalar que en este artículo el énfasis principal se pone en una combinación de contenedores Docker y el entorno de gestión de Kubernetes. Estos componentes de código abierto son clave y fundamentales para la plataforma ICP. Sin embargo, para trabajar completamente con ICP, también necesitará conocimiento de Helm, el administrador de administración de paquetes de software. K8s se utiliza para implementar y alojar instancias de aplicaciones integradas en esquemas Helm, que a su vez se refieren a imágenes de Docker. Los esquemas de Helm contienen información sobre los detalles de su aplicación, y las imágenes de Docker contienen todos los paquetes de software necesarios para ejecutar su aplicación.

Para obtener una introducción detallada a la arquitectura y los componentes de la plataforma ICP, puede utilizar el enlace de documentación en el
IBM Knowledge Center .
Preparación
Para completar cómodamente la instalación de ICP en 20-30 minutos, se requieren los siguientes recursos mínimos de hardware y acceso a Internet:
• Un host (físico o virtual)
• CPU = 8 núcleos (o núcleos virtuales)
• RAM = 10 GB (de hecho, se pueden requerir hasta 14 GB)
• Disco = 40 GB (en SSD como siempre más rápido)
Nota: si tiene un poco más de tiempo libre y menos recursos de hardware, en 40-60 minutos puede instalar ICP en 1 núcleo virtual i5 y 10 GB de RAM.
Instalación
Descargar Ubuntu
Descargue la distribución de
Ubuntu Server versión 16.04.05 . Realice una instalación estándar del sistema operativo en una máquina virtual o física con las características anteriores.
Obtener dirección IP
Después de completar el proceso de instalación del sistema operativo, en la línea de comando, encuentre la dirección IP de su máquina virtual usando el siguiente comando:
ifconfig
Debe escribir / recordar la dirección IP de Ethernet (inet addr), así como Bcast y Mask. Estos parámetros se mostrarán después de ejecutar el comando correspondiente:
Figura 1. Un ejemplo del comando ifconfigConexión SSH
Si usó la función "Instalación fácil" cuando configuró la máquina virtual, luego de la instalación completa de Ubuntu Server deberá instalar el servidor OpenSSH. Puede hacer esto con los siguientes comandos:
apt install openssh-server sudo systemctl enable sshd
Después de ejecutar los comandos apropiados, podrá conectarse a la máquina virtual mediante SSH. Dependiendo del sistema operativo, puede usar diferentes métodos de conexión. Para Windows, puede usar la popular herramienta
PuTTY ; para MacOS, puede usar el comando ssh en la terminal.
Figura 2. Ejemplo de conexión a través de PuTTY para WindowsEl siguiente paso es establecer una contraseña para el superusuario (root):
sudo -i passwd
Figura 3. Configuración de una nueva contraseña para el usuario rootActualización de interfaz de red
Después de configurar la capacidad de conectarse a través de SSH y actualizar la contraseña de superusuario, necesitamos configurar la interfaz de red para determinar los parámetros de red estáticos. Esto se hace con el siguiente comando:
nano /etc/network/interfaces
Actualizamos la configuración de la interfaz de red (interfaz de red primaria) en función de la información obtenida durante el comando ifconfig, nuestro ejemplo se ve así:
auto ens33 iface ens33 inet static address 192.168.175.7 netmask 255.255.255.0 network 192.168.175.0 broadcast 192.168.175.255 gateway 192.168.175.2 dns-nameservers 192.168.175.2 8.8.8.8
Nota: Es importante especificar correctamente el servidor DNS, ya que el acceso a Internet es necesario para la instalación posterior de los componentes ICP.
Figura 4. Configuración de la interfaz de redGuarde el archivo actualizado con los siguientes pasos: Ctrl + X, Sí, Entrar.
Para simplificar el inicio de sesión en una máquina virtual con privilegios de superusuario (root), debe realizar cambios en la configuración del servicio SSH. Para hacer esto, ejecute el siguiente comando:
nano /etc/ssh/sshd_config
A continuación, busque la línea de permiso de acceso y edítela en consecuencia:
PermitRootLogin yes
Figura 5. Actualización de la configuración de SSHGuarde el archivo como en el paso anterior: Ctrl + X, Sí, Entrar.
Después de realizar todos los cambios, para aplicar los nuevos parámetros tiene sentido reiniciar completamente la máquina virtual o reiniciar los servicios correspondientes (redes y ssh), por ejemplo, con los siguientes comandos:
shutdown -r 0
o
service <service_name> restart
Después de reiniciar la máquina, debe iniciar sesión nuevamente a través de SSH.
Actualización de componentes
Actualice Ubuntu Server con el siguiente comando (el comando debe ejecutarse como root):
apt update
Nota: si se produce un error durante la actualización: "El repositorio 'cdrom: // Ubuntu-Server 16.04.5 LTS _Xenial Xerus_ - Release amd64 (20180731) xenial Release' no tiene un archivo de lanzamiento". Debe ejecutar el siguiente comando:
sudo nano /etc/apt/sources.list
Y comentar la línea:
deb cdrom:[Ubuntu-Server 16.04.5 LTS …
Figura 6. Corrección de un posible error.A continuación, guarde el archivo, como se hizo anteriormente: Ctrl + X, Sí, Enter
Después de corregir un posible error, ejecute el comando de actualización nuevamente y, como resultado, debería ver algo como esto:
Figura 7. Actualización de UbuntuInstalar IBM Cloud Private
Antes de instalar ICP, debe editar el archivo de hosts:
nano /etc/hosts
Reemplace la cadena 127.0.1.1 ubuntu con su dirección IP y cualquier nombre de host adecuado.
Asegúrese de que el nombre de host y el alias en la línea estén separados por una pestaña o espacio:
Figura 8. Cambio del archivo de hostsGuarde el archivo: Ctrl + X, Sí, Enter
Los siguientes 2 comandos le permitirán actualizar el sistema e instalar módulos adicionales.
apt update apt-get install apt-transport-https ca-certificates curl software-properties-common python-minimal jq
Verifique la terminal en busca de errores:
Figura 9. Instalación de componentes adicionalesAumente la memoria virtual máxima con el comando:
sysctl -w vm.max_map_count=262144
Los K8 no comenzarán con el intercambio habilitado. Puede deshabilitarlo con el comando:
swapoff –a
Nota: los dos comandos anteriores funcionarán en la sesión actual. Cuando reinicie, estos parámetros se perderán y deberá registrarlos nuevamente.
La aplicación de estos parámetros al cargar el sistema operativo se puede habilitar con los siguientes comandos:
sed -i '/ swap / s/^/#/' /etc/fstab echo "vm.max_map_count=262144" >> /etc/sysctl.conf
Agregar una clave GPG
Usamos el siguiente comando:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Agregar un repositorio para instalar Docker
Para completar la instalación del repositorio, debe ejecutar los siguientes 2 comandos:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update
Instalar Docker
Utilice el siguiente comando para instalar Docker (Docker versión 17.12.1 es la versión máxima admitida para IBM Cloud Private 2.1.0.3):
apt-get install docker-ce=17.12.1~ce-0~ubuntu
Figura 10. Proceso de instalación de DockerPuede verificar la funcionalidad de Docker con el siguiente comando:
docker version
Figura 11. Comprobación de DockerDescargar IBM Cloud Private
Para descargar la imagen ICP-ce (Community Edition) del recurso dockerHub, debe usar el kit de herramientas Docker. Puede hacer esto con el siguiente comando:
docker pull ibmcom/icp-inception:2.1.0.3
Figura 12. Descargar ICPIBM empaquetó todos los componentes esenciales necesarios para la instalación en un paquete (tenga en cuenta que puede cambiar la versión a una versión más nueva si es necesario). El comando de extracción cargará la imagen al sistema de archivos local (la imagen se iniciará para instalar ICP).
Cree un directorio y navegue hasta él:
mkdir /opt/icp cd /opt/icp
Copie el paquete ICP en este directorio:
docker run -e LICENSE=accept -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.3 cp -r cluster /data
Nota: este comando Docker toolkit ejecuta el comando de copia de Linux (cp) desde el directorio especificado (opción -v). El directorio del clúster se creará en / opt / icp con todos los archivos necesarios.
Configurar claves SSH
Cree nuevas claves ssh en el directorio / opt / icp / cluster:
ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N "" cat ~/.ssh/id_rsa.pub | sudo tee -a ~/.ssh/authorized_keys systemctl restart sshd cp ~/.ssh/id_rsa ./cluster/ssh_key
Verifique que la clave esté creada y ubicada en la carpeta / opt / icp / cluster:
ls /opt/icp/cluster
Figura 13. El contenido de la carpeta del clústerConfiguración de ICP
Agregue la dirección IP de cada nodo en el clúster al archivo / opt / icp / cluster / hosts (en nuestro caso, usamos la misma dirección IP para cada componente que especificamos en / etc / hosts). Hacemos esto con el siguiente comando:
nano /opt/icp/cluster/hosts
Figura 14. El contenido del archivo hostsGuarde el archivo: Ctrl + X, Sí, Enter
Puede encontrar información detallada sobre las opciones de instalación en el archivo de configuración:
more /opt/icp/cluster/config.yaml
No recomendamos cambiar la configuración de instalación predeterminada.
Nota: Los 2 archivos de instalación más importantes son hosts y config.yaml, que describen las opciones de instalación de ICP. En una configuración de varios trabajadores, debe especificar una lista de direcciones IP en la sección de trabajadores. Al instalar la versión actual de ICP en modo de nodo único, las direcciones IP en el archivo de hosts solo cambian.
Instalación de ICP
Vaya al directorio del clúster y ejecute la instalación:
cd /opt/icp/cluster docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 install
Dependiendo de los recursos disponibles, la instalación puede durar de 20 a 60 minutos. Si se producen errores (mensajes rojos), realice los cambios apropiados en los archivos de configuración. A veces, la instalación puede ralentizarse un poco debido a los intentos de reconexión a componentes que aún no se han iniciado (por ejemplo, al iniciar Cloudant o IAM).
La instalación debería verse así:
Figura 15. Resultado de instalación de ICPEn caso de errores, puede ser necesario desinstalar ICP:
docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 uninstall
Antes de continuar con el siguiente paso, espere unos 5 minutos para que todos los componentes de ICP se inicien correctamente.
Siga el enlace provisto después de que se complete la instalación, ingrese a la consola ICP (admin / admin):
https://<ip_address>:8443
Figura 16. La página de inicio de sesión del panel de controlPágina de bienvenida de ICP:
Figura 17. Interfaz web del panel de controlEn la esquina superior derecha, seleccione el menú Catálogo, se muestra una lista de aplicaciones disponibles:
Figura 18. Catálogo de componentesEste directorio contiene una lista de aplicaciones y software, cuya descripción puede estudiar a su gusto, pero hasta ahora no se apresure a implementarlos.
Todavía tenemos que aprender cómo manejar adecuadamente el ICP recién instalado (no solo a través de la interfaz web, sino también la consola en forma de CLI - Interfaz de línea de comandos), conectar el almacenamiento persistente y realizar pequeñas configuraciones.
En conclusión
Para resumir.
Implementamos con éxito la edición de la comunidad IBM Cloud Private (versión 2.1.0.3) en un host en una máquina virtual que ejecuta Ubuntu Server OS 16/04/05. Por el momento, hemos verificado personalmente la instalación en los hipervisores VMware e Hyper-V, definitivamente funciona en XenServer y no debería haber ninguna dificultad para VirtualBox y KVM.
¿Quién está realmente ansioso por sumergirse aún más en el estudio de ICP, es decir, una excelente selección del trabajo de laboratorio de nuestro colega aquí:
github.com/phthom/IBMCloudPrivateDe los próximos pasos: después de una nueva instalación, solo necesitamos configurar ICP un poco y comenzar a llenarlo con algo útil y cercano a tareas prácticas.
Si la comunidad de Habr respalda positivamente esta iniciativa, a medida que avancen nuestras investigaciones y experimentos, llenaremos el núcleo de la plataforma con los componentes necesarios para la recopilación de telemetría, el almacenamiento de datos, el procesamiento, el análisis, el pronóstico, la formación de interfaces de programas externos y la creación de aplicaciones de usuario. En consecuencia, desarrollar una serie de tales artículos.
Esperando sus comentarios y sugerencias!
Además, nuestra gente de ideas afines de
AIXportal.ru preparó un maravilloso video clip sobre la instalación de IBM Cloud Private en su canal de Youtube, alguien se sentirá más cómodo así:
youtu.be/eQwOOTzjM24Enlaces y materiales útiles
•
Página del producto en ruso• Quién quiere practicar inglés, el libro - “
ICP for Dummies ” 2018. (40 páginas)
•
Libros blancos para ICP 2.1.0.3 en el IBM Knowledge Center
• Comunidad
ICP abierta
en IBM developerWorks•
Recetas ICP para desarrolladores.