Implementación de un clúster de Kubernetes con el motor de AKS en Azure Stack Hub
Puede implementar un clúster de Kubernetes en Azure Stack Hub desde una máquina virtual cliente que ejecuta el motor de AKS. En este artículo, se examina la escritura de una especificación de clúster, la implementación de un clúster con el archivo apimodel.json y la comprobación del clúster mediante la implementación de MySQL con Helm.
Definición de una especificación de clúster
Puede indicar una especificación de clúster en un archivo de documento mediante el formato JSON denominado modelo de API. El motor de AKS usa una especificación de clúster en el modelo de API para crear el clúster.
Puede encontrar ejemplos del modelo de API para su número de versión del motor de AKS y sistema operativo para las versiones recientes en Motor de AKS y la asignación de imagen correspondiente.
- Busque el número de versión del motor de AKS, por ejemplo,
v.0.63.0
, en la tabla. - En la tabla de ejemplos del modelo de API, seleccione y abra el vínculo del sistema operativo.
- Seleccione Raw. Puede usar la dirección URL de las instrucciones siguientes.
Una dirección URL al modelo de API puede tener el siguiente aspecto:
https://raw.githubusercontent.com/Azure/aks-engine-azurestack/master/examples/azure-stack/kubernetes-azurestack.json
Para cada uno de los ejemplos siguientes, reemplace <URL for the API Model>
por la dirección URL.
Actualización del modelo de API
En esta sección se examina la creación de un modelo de API para el clúster.
Comience por utilizar un archivo de modelo de API de Azure Stack Hub para Linux o Windows. En la máquina donde ha instalado el motor de AKS, ejecute:
curl -o kubernetes-azurestack.json <URL for the API Model>
Nota:
Si está desconectado, puede descargar el archivo y copiarlo manualmente en la máquina desconectada en la que piensa editarlo. Puede copiar el archivo en la máquina Linux con herramientas como PuTTY o WinSCP.
Para abrir el modelo de API en un editor, puede usar nano:
nano ./kubernetes-azurestack.json
Nota:
Si no tiene nano instalado, puede instalar nano en Ubuntu:
sudo apt-get install nano
.En el archivo kubernetes-azurestack.json , busque orchestratorRelease y orchestratorVersion. Seleccione una de las versiones de Kubernetes compatibles; puede encontrar la tabla de versiones en las notas de la versión. Especifique
orchestratorRelease
como x.xx y orchestratorVersion como x.xx.x. Para obtener una lista de las versiones actuales, consulte Versiones admitidas del motor de AKS.Busque
customCloudProfile
y proporcione la dirección URL al portal del inquilino. Por ejemplo,https://portal.local.azurestack.external
.Agregue
"identitySystem":"adfs"
si utiliza AD FS. Por ejemplo,"customCloudProfile": { "portalURL": "https://portal.local.azurestack.external", "identitySystem": "adfs" },
Nota:
Si usa el identificador de Entra de Microsoft para el sistema de identidades, no es necesario agregar el campo identitySystem .
En
masterProfile
, establezca los campos siguientes:Campo Descripción dnsPrefix Escriba una cadena única que sirva para identificar el nombre de host de las máquinas virtuales. Por ejemplo, un nombre basado en el nombre del grupo de recursos. count Escriba el número de maestros que desea para la implementación. El mínimo para una implementación de alta disponibilidad es tres, pero se permite uno para implementaciones que no son de alta disponibilidad. vmSize Escriba un tamaño admitido por Azure Stack Hub, ejemplo Standard_D2_v2
.Distribuciones Escriba aks-ubuntu-18.04
oaks-ubuntu-20.04
.En
agentPoolProfiles
, actualice:Campo Descripción count Escriba el número de agentes que desea para la implementación. El número máximo de nodos que se usarán por suscripción es 50. Si va a implementar más de un clúster por suscripción, asegúrese de que el número total de agentes no supere los 50. Asegúrese de usar los elementos de configuración especificados en el archivo JSON del modelo de API de ejemplo. vmSize Escriba un tamaño admitido por Azure Stack Hub, ejemplo Standard_D2_v2
.Distribuciones Escriba aks-ubuntu-18.04
,aks-ubuntu-20.04
oWindows
.
UtiliceWindows
para los agentes que se van a ejecutar en Windows. Por ejemplo, consulte kubernetes-windows.json.En
linuxProfile
, actualice:Campo Descripción adminUsername Escriba el nombre de usuario administrador para la máquina virtual. ssh Escriba la clave pública que se usará para la autenticación SSH con máquinas virtuales. Use ssh-rsa
y, después, la clave. Para obtener instrucciones para crear una clave pública, consulte Creación de una clave SSH para Linux.Si va a realizar la implementación en una red virtual personalizada, puede encontrar instrucciones para encontrar la clave y los valores necesarios y agregarlos a las matrices adecuadas del modelo de API en Implementación de un clúster de Kubernetes en una red virtual personalizada en Azure Stack Hub.
Nota:
El motor de AKS para Azure Stack Hub no permite proporcionar sus propios certificados para la creación del clúster.
Si utiliza Windows, actualice los valores de
adminUsername:
yadminPassword
enwindowsProfile
:"windowsProfile": { "adminUsername": "azureuser", "adminPassword": "", "sshEnabled": true }
Más información sobre el modelo de API
- Para obtener una referencia completa de todas las opciones disponibles en el modelo de API, consulte Definiciones de clúster.
- Para obtener información destacada sobre opciones específicas para Azure Stack Hub, consulte los detalles específicos de la definición de clúster de Azure Stack Hub.
Adición de un certificado al usar ASDK
Si va a implementar un clúster en el Kit de desarrollo de Azure Stack (ASDK) y usa Linux, deberá agregar el certificado raíz al almacén de certificados de confianza de la máquina virtual cliente que ejecuta el motor de AKS.
- Busque el certificado raíz en el siguiente directorio de la máquina virtual:
/var/lib/waagent/Certificates.pem.
- Copie el archivo de certificado:
sudo cp /var/lib/waagent/Certificates.pem /usr/local/share/ca-certificates/azurestacka.crt sudo update-ca-certificates
Implementación de un clúster de Kubernetes
Cuando haya recopilado todos los valores necesarios en el modelo de API, puede crear el clúster. En este momento, debe tener:
Solicite al operador de Azure Stack Hub que:
- Compruebe el estado del sistema, sugiera la ejecución de
Test-AzureStack
y la herramienta de supervisión de hardware del proveedor de OEM. - Compruebe la capacidad del sistema, incluidos los recursos como la memoria, el almacenamiento y las direcciones IP públicas.
- Proporcione detalles de la cuota asociada a su suscripción para que pueda comprobar que todavía hay suficiente espacio para el número de máquinas virtuales que piensa usar.
Continúe con la implementación de un clúster:
Revise los parámetros disponibles para el motor de AKS en las marcas de la CLI de Azure Stack Hub.
Parámetro Ejemplo Descripción azure-env AzureStackCloud Para indicar al motor de AKS que la plataforma de destino es Azure Stack Hub, utilice AzureStackCloud
.identity-system adfs Opcional. Especifique la solución de administración de identidad si usa los Servicios de federación de Active Directory (AD FS). ubicación local El nombre de la región de la instancia de Azure Stack Hub. Para ASDK, la región se establece en local
.resource-group kube-rg Escriba el nombre del nuevo grupo de recursos o seleccione uno existente. El nombre del recurso debe ser alfanumérico y estar en minúsculas. api-model ./kubernetes-azurestack.json Ruta de acceso al archivo de configuración del clúster o modelo de API. output-directory kube-rg Escriba el nombre del directorio para que contenga el archivo de salida apimodel.json y otros archivos generados. client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el GUID de la entidad de servicio. El identificador de cliente indicado como identificador de la aplicación cuando el administrador de Azure Stack Hub creó la entidad de servicio. client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Escriba el secreto de la entidad de servicio. Configure el secreto de cliente al crear el servicio. subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx escriba el identificador de la suscripción. Debe proporcionar una suscripción para el inquilino. No se admite la implementación en la suscripción administrativa. Para más información, consulte Suscripción a una oferta. Este es un ejemplo:
Nota:
Para AKSe versión 0.75.3 y posteriores, el comando para implementar un clúster de motor de AKS es
aks-engine-azurestack deploy
.aks-engine deploy \ --azure-env AzureStackCloud \ --location <for asdk is local> \ --resource-group kube-rg \ --api-model ./kubernetes-azurestack.json \ --output-directory kube-rg \ --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ --identity-system adfs # required if using AD FS
Si por algún motivo se produce un error en la ejecución después de que se haya creado el directorio de salida, puede corregir el problema y volver a ejecutar el comando. Si vuelve a ejecutar la implementación y ha usado el mismo directorio de salida antes, el motor de AKS devolverá un error que indica que el directorio ya existe. Puede sobrescribir el directorio existente mediante el uso de la marca
--force-overwrite
.Guarde la configuración de clúster del motor de AKS en una ubicación segura y cifrada.
Busque el archivo apimodel.json. Cópielo en una ubicación segura. Este archivo se usará como entrada en todas las demás operaciones del motor de AKS.
El archivo apimodel.json generado contiene la entidad de servicio, el secreto y la clave pública SSH que se usa en el modelo de API de entrada. El archivo también tiene todos los demás metadatos necesarios por el motor de AKS para realizar todas las demás operaciones. Si pierde el archivo, el motor de AKS no podrá configurar el clúster.
Los secretos están sin cifrar. Mantenga el archivo en un lugar seguro y cifrado.
Comprobación del clúster
Para comprobar el clúster, conéctese a kubectl
, obtenga la información y, a continuación, obtenga los estados de los nodos.
Obtenga el archivo
kubeconfig
para conectarse al plano de control.- Si ya ha
kubectl
instalado, compruebe elkubeconfig
archivo del clúster recién creado en esta ruta de acceso de/kubeconfig/kubeconfig.json
directorio. Puede agregar al/kubeconfig.json
.kube
directorio y cambiar su nombre a "config" para acceder al nuevo clúster.
Si no ha instaladokubectl
, visite el artículo sobre cómo instalar herramientas para instalar la herramienta de línea de comandos de Kubernetes. De lo contrario, siga las instrucciones siguientes para acceder al clúster desde uno de los nodos del plano de control.
- Si ya ha
Obtenga la dirección IP pública de uno de los nodos del plano de control con el portal de Azure Stack Hub.
Desde una máquina con acceso a la instancia de Azure Stack Hub, conéctese mediante SSH al nuevo nodo del plano de control mediante un cliente como PuTTY o MobaXterm.
Para el nombre de usuario ssh, use "azureuser" y el archivo de clave privada del par de claves que proporcionó para la implementación del clúster.
Compruebe que los puntos de conexión del clúster se están ejecutando:
kubectl cluster-info
La salida debe tener una apariencia similar a la siguiente:
Kubernetes master is running at https://democluster01.location.domain.com CoreDNS is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://democluster01.location.domain.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
A continuación, revise los estados del nodo:
kubectl get nodes
La salida debe ser similar a la siguiente:
k8s-linuxpool-29969128-0 Ready agent 9d v1.15.5 k8s-linuxpool-29969128-1 Ready agent 9d v1.15.5 k8s-linuxpool-29969128-2 Ready agent 9d v1.15.5 k8s-master-29969128-0 Ready master 9d v1.15.5 k8s-master-29969128-1 Ready master 9d v1.15.5 k8s-master-29969128-2 Ready master 9d v1.15.5
Solución de problemas de implementación de clústeres
Al encontrar errores al implementar un clúster de Kubernetes mediante el motor de AKS, puede comprobar lo siguiente:
- ¿Usa las credenciales de entidad de servicio (SPN) correctas?
- ¿Tiene el SPN tiene un rol "Colaboradores" en la suscripción a Azure Stack Hub?
- ¿Tiene una cuota suficientemente grande en el plan de Azure Stack Hub?
- ¿Se aplica la instancia de Azure Stack Hub que tiene una revisión o una actualización?
Para más información, consulte el artículo Solución de problemas en el repositorio de GitHub Azure/aks-engine-azurestack .
Rotación del secreto de la entidad de servicio
Después de la implementación del clúster de Kubernetes con el motor de AKS, la entidad de servicio se usa para administrar las interacciones con la instancia de Azure Resource Manager en Azure Stack Hub. En algún momento, es posible que el secreto de esta entidad de servicio expire. Si el secreto expira, puede actualizar las credenciales mediante:
- Actualización de cada nodo con el nuevo secreto de la entidad de servicio.
- O bien, mediante la actualización de las credenciales del modelo de API y la ejecución de la actualización.
Actualización de cada nodo manualmente
- Obtenga un nuevo secreto para la entidad de servicio del operador de la nube. Para obtener instrucciones para Azure Stack Hub, consulte Uso de una identidad de aplicación para acceder a recursos de Azure Stack Hub.
- Use las nuevas credenciales proporcionadas por el operador de nube para actualizar /etc/kubernetes/azure.json en cada nodo. Después de realizar la actualización, reinicie y
kubele
kube-controller-manager
.
Actualización del clúster con la actualización del motor de AKS
Como alternativa, puede reemplazar las credenciales de la apimodel.json y ejecutar la actualización mediante el archivo de .json actualizado a la misma versión de Kubernetes o más reciente. Para obtener instrucciones sobre cómo actualizar el modelo, consulte Actualización de un clúster de Kubernetes en Azure Stack Hub.