Ejecuta contenedores en instancias

Puedes ejecutar un contenedor de Docker en una máquina que ejecute Container-Optimized OS de la misma manera que lo harías en la mayoría de las demás distribuciones de imágenes de nodo, con el comando docker run. Por ejemplo:

docker run --rm busybox echo "hello world"

Aparece este resultado:

Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
. . .
Status: Downloaded newer image for busybox:latest
hello world

Cuando se administran las claves SSH en metadatos, todas las cuentas de usuario que administra Compute Engine en la imagen cos se agregan al grupo docker de forma predeterminada. Esto permite que cualquier usuario que accedió ejecute comandos de docker sin privilegios de administrador. Cuando administras claves SSH con OS Login, la cuenta de usuario debe agregarse de forma manual al grupo de docker. De lo contrario, el usuario debe agregar sudo para cada comando de docker.

Accede a Container Registry público

La compatibilidad de Container Registry está integrada en la imagen de nodo cos. Para iniciar un contenedor desde Container Registry, ejecuta lo siguiente:

docker run --rm gcr.io/google-containers/busybox echo "hello world"

Aparece este resultado:

Unable to find image 'gcr.io/google-containers/busybox:latest' locally
Pulling repository gcr.io/google-containers/busybox
. . .
Status: Downloaded newer image for gcr.io/google-containers/busybox:latest
hello world

Accede a Container Registry privado

A partir de las actualizaciones del evento importante 60, docker-credential-gcr está preinstalado en las imágenes de Container-Optimized OS. Es la forma recomendada de acceder a Container Registry privado.

Para usar docker-credential-gcr, ejecuta el siguiente comando:

docker-credential-gcr configure-docker

Aparece este resultado:

/home/username/.docker/config.json configured to use this credential helper

Para los registros de Container Registry, usa el siguiente comando:

docker run --rm gcr.io/your-project/your-image

De manera alternativa, puedes recuperar los tokens de acceso de OAuth adecuados en los metadatos de Compute Engine y usarlos con el comando docker login de forma manual, como se muestra en el siguiente ejemplo:

METADATA=http://metadata.google.internal/computeMetadata/v1
SVC_ACCT=$METADATA/instance/service-accounts/default
ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token | cut -d'"' -f 4)
docker login -u oauth2accesstoken -p $ACCESS_TOKEN https://gcr.io
docker run … gcr.io/your-project/your-image

Los nombres de host compatibles con Container Registry son los siguientes:

  • us.gcr.io
  • eu.gcr.io
  • asia.gcr.io

Usa cloud-init con Container Registry

En este ejemplo de cloud-init, se usa el formato de Cloud Config para iniciar un contenedor de Docker desde una imagen almacenada en el registro de contenedores de Docker, llamado DockerHub. En el siguiente ejemplo, se usa el formato de Cloud Config para iniciar un contenedor de Docker desde una imagen almacenada en Container Registry:

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container
    Wants=gcr-online.target
    After=gcr-online.target

    [Service]
    Environment="HOME=/home/cloudservice"
    ExecStartPre=/usr/bin/docker-credential-gcr configure-docker
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice gcr.io/google-containers/busybox:latest /bin/sleep 3600
    ExecStop=/usr/bin/docker stop mycloudservice
    ExecStopPost=/usr/bin/docker rm mycloudservice

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service

Cómo ejecutar un clúster de Kubernetes

El enfoque recomendado para ejecutar un clúster de Kubernetes en Google Cloud es utilizar Google Kubernetes Engine (GKE). Sin embargo, si deseas ejecutar una versión con administración automática de Kubernetes de código abierto, sigue estas instrucciones.

  1. Asegúrate de que se puede acceder a la instancia principal de Kubernetes mediante la apertura del puerto 443 en el firewall.
  2. Descarga los objetos binarios de la versión de Kubernetes, descomprime y abre el clúster de la siguiente manera:

    # Download and extract the latest kubernetes release.
    cd <empty-dir>
    KUBERNETES_VERSION="v1.4.6"
    curl -sSL -o kubernetes.tar.gz https://github.com/kubernetes/kubernetes/releases/download/${KUBERNETES_VERSION}/kubernetes.tar.gz
    tar xzf kubernetes.tar.gz
    cd kubernetes
    
    # Configure environment to use Container-Optimized OS
    export KUBE_OS_DISTRIBUTION=cos
    
    # Start up a cluster and verify that it is running:
    cluster/kube-up.sh
    cluster/kubectl.sh get nodes
    cluster/kubectl.sh get pods --namespace=kube-system
    
  3. Ahora puedes ejecutar la aplicación en el clúster. Por ejemplo, puedes iniciar un clúster de Redis con el siguiente ejemplo:

    cluster/kubectl.sh create -f \
      examples/guestbook/all-in-one/guestbook-all-in-one.yaml
    cluster/kubectl.sh get pods
    cluster/kubectl.sh describe pods redis-master-pod-name
    

Para las instancias que se ejecutan como parte de un clúster de GKE, los registros de Docker y Kubelet también se exportan automáticamente al registro de Google Cloud's operations suite. Los registros para Docker, Kubelet y kube-proxy están disponibles en Google Cloud's operations suite, en la sección Instancia de VM de Compute Engine, cuando se usa Google Cloud Console.

Una vez que ya no se necesite el clúster, puedes eliminarlo:

cluster/kube-down.sh