Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las actualizaciones de seguridad son una parte clave del mantenimiento de la seguridad y el cumplimiento del clúster de AKS con las correcciones más recientes para el sistema operativo subyacente. Estas actualizaciones incluyen las revisiones de seguridad del sistema operativo o las actualizaciones del kernel. Algunas actualizaciones requieren un reinicio del nodo para completar el proceso.
En este artículo se muestra cómo puede automatizar el proceso de actualización de los nodos de AKS mediante Acciones de GitHub y la CLI de Azure para crear una tarea de actualización basada en cron que se ejecute automáticamente.
Nota:
También puede realizar actualizaciones de imágenes de nodo automáticamente y programar estas actualizaciones mediante el mantenimiento planeado. Para más información, vea Actualización automática de imágenes de nodo.
Antes de empezar
- Este artículo supone que ya tiene un clúster de AKS. Si necesita un clúster de AKS, cree uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
- En este artículo también se da por hecho que tiene una cuenta de GitHub y un repositorio de perfiles para hospedar las acciones. Si no tiene un repositorio, cree uno con el mismo nombre que el nombre de usuario de GitHub.
- Es preciso que esté instalada y configurada la versión 2.0.59 o posterior de la CLI de Azure, o cualquier otra posterior. Ejecute
az --versionpara encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Actualizar nodos con az aks upgrade
El az aks upgrade comando proporciona una forma de tiempo de inactividad cero para aplicar actualizaciones. El comando realiza las siguientes acciones:
- Aplica las actualizaciones más recientes a todos los nodos del clúster.
- Acordona (hace que el nodo no esté disponible para la programación de nuevas cargas de trabajo) y purga (mueve las cargas de trabajo existentes a otro nodo) el tráfico a los nodos.
- Reinicia los nodos.
- Permite que los nodos actualizados reciban tráfico de nuevo.
AKS no reinicia automáticamente los nodos si los actualiza mediante un método diferente.
Nota:
Ejecutar az aks upgrade con la bandera --node-image-only solo actualiza las imágenes de nodo. Al ejecutar el comando sin la marca se actualizan las imágenes de nodo y la versión del plano de control de Kubernetes. Para obtener más información, consulte la documentación sobre las actualizaciones administradas en los nodos y los documentos para las actualizaciones del clúster.
Todos los nodos de Kubernetes se ejecutan en una máquina virtual de Azure (VM) estándar basada en Windows o Linux. Las máquinas virtuales basadas en Linux usan una imagen de Ubuntu con el sistema operativo configurado para comprobar automáticamente las actualizaciones cada noche.
Cuando se usa el comando az aks upgrade de Azure CLI, se crea un aumento de nuevos nodos con las últimas actualizaciones de seguridad y de kernel. Estos nuevos nodos se acordonan inicialmente para evitar que las aplicaciones se programen en ellos hasta que se complete la actualización. Una vez completada la actualización, Azure aísla y vacía los nodos antiguos y desacordona los nuevos, transfiriendo todas las aplicaciones programadas a los nuevos nodos.
Este proceso es mejor que actualizar los kernels basados en Linux manualmente porque Linux requiere un reinicio cuando se instala una nueva actualización del kernel. Si actualiza el sistema operativo manualmente, también debe reiniciar la máquina virtual, acordonar y purgar manualmente todas las aplicaciones.
Crea una acción de GitHub programada
cron es una utilidad que permite ejecutar un conjunto de comandos o trabajos en una programación automatizada. Para crear un trabajo para actualizar los nodos de AKS en un cronograma automatizado, necesita un repositorio para alojar sus acciones. Las acciones de GitHub normalmente se configuran en el mismo repositorio que la aplicación, pero puede usar cualquier repositorio.
Vaya al repositorio en GitHub.
Seleccione Acciones.
Seleccione Nuevo flujo de trabajo>Configurar un flujo de trabajo usted mismo.
Cree una acción de GitHub denominada Actualizar imágenes de nodo de clúster con un desencadenador programado para ejecutarse cada 15 días a las 3:00 de la mañana. Copie el código siguiente en YAML:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *'Cree un trabajo denominado upgrade-node que se ejecute en un agente de Ubuntu y se conecte a la cuenta de la CLI de Azure para ejecutar el comando de actualización del nodo. Copie el código siguiente en el YAML bajo la clave
on:jobs: upgrade-node: runs-on: ubuntu-latest
Configuración de la CLI de Azure en el flujo de trabajo
En la barra Buscar Acciones en Marketplace, busque Inicio de sesión de Azure.
Seleccione Inicio de sesión de Azure.
En Instalación, seleccione una versión, como v1.4.6, y copie el fragmento de código de instalación.
Agregue la
stepsclave y la siguiente información del fragmento de código de instalación al código YAML:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
Creación de credenciales para la CLI de Azure
En una nueva ventana del navegador, cree un nuevo principal de servicio usando el comando
az ad sp create-for-rbac. Asegúrese de reemplazar*{subscriptionID}*por su propio identificador de suscripción.Nota:
En este ejemplo se crea el rol
Contributoren el ámbito de la suscripción. Puede proporcionar el rol y el ámbito que satisfaga sus necesidades. Para más información, consulte Roles integrados de Azure y niveles de ámbito de RBAC de Azure.az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o jsonLa salida debe ser similar a la siguiente salida de ejemplo:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx", "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }Copie la salida y vaya al repositorio de GitHub.
Seleccione Configuración>Secretos y variables>Acciones>Nuevo secreto de repositorio.
En Nombre, escriba
AZURE_CREDENTIALS.Para Secreto, copie el contenido de la salida que ha recibido al crear la entidad de servicio.
Seleccione Agregar secreto.
Creación de los pasos para ejecutar los comandos de la CLI de Azure
Navegue a su ventana con el flujo de trabajo YAML.
En la barra Buscar acciones en Marketplace, busque Acción de la CLI de Azure.
Seleccione Acción de la CLI de Azure.
En Instalación, seleccione una versión, como v1.0.8, y copie el fragmento de código de instalación.
Pegue el contenido de la acción en yaML debajo del
*Azure Login*paso, similar al ejemplo siguiente:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yesSugerencia
Puede desacoplar los
--resource-groupparámetros y--namedel comando mediante la creación de nuevos secretos de repositorio como lo hizo paraAZURE_CREDENTIALS.Si crea secretos para estos parámetros, debe reemplazar los marcadores de posición
<resourceGroupName>y<aksClusterName>por sus homólogos secretos. Por ejemplo,${{secrets.RESOURCE_GROUP_NAME}}y${{secrets.AKS_CLUSTER_NAME}}Cambie el nombre de YAML a
upgrade-node-images.yml.Seleccione Confirmar cambios..., agregue un mensaje de confirmación y, a continuación, seleccione Confirmar cambios.
Ejecución manual de la acción de GitHub
Puede ejecutar el flujo de trabajo manualmente además de la ejecución programada agregando un nuevo on desencadenador denominado workflow_dispatch.
Nota:
Si desea actualizar un grupo de nodos único en lugar de todos los grupos de nodos del clúster, agregue el --name parámetro al az aks nodepool upgrade comando para especificar el nombre del grupo de nodos. Por ejemplo:
az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
Agregue el
workflow_dispatchdesencadenador bajo laonclave:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch:El código YAML debe tener un aspecto similar al del ejemplo siguiente:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch: jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes # Code for upgrading one or more node pools
Pasos siguientes
Para obtener más información sobre las actualizaciones de AKS, consulte los siguientes artículos y recursos:
Para obtener una explicación detallada de los procedimientos recomendados de actualización y otras consideraciones, consulte Guía de actualización y revisión de AKS.