Added AIAP doc

Relates-To: #8

Signed-off-by: Pankaj Goyal <pgoyal@att.com>
Change-Id: Id86659fbf756bc20d39958f41016079517683357
This commit is contained in:
James Gu 2021-04-01 14:46:08 -07:00 committed by Pankaj Goyal
parent 6ee51e9ca5
commit 9e9bbb77a2

View File

@ -17,4 +17,162 @@
Airship in a Pod (AIAP)
=======================
Coming soon.
Airship-in-a-Pod (AIAP) is a Kubernetes pod definition that describes all of the components required to deploy a fully functioning Airship 2 in a working Kubernetes cluster. The pod consists of the following "Task" containers:
* airshipctl-builder: This container builds the airshipctl binary and makes it available to the other containers. Airshipctl manages the lifecycle of a site utilizing declarations about the infrastructure (stored in source code).
* infra-builder: This container creates the various virtual networks and machines required for an Airship deployment.
* runner: The runner container is the "meat" of the pod, and executes the deployment.
The pod also contains the following "Support" containers:
* libvirt: This provides virtualization.
* sushy-tools: This is used for its Bare Metal Container (BMC) emulator.
* docker-in-docker: This is used for nesting containers.
* nginx: This is used for image hosting.
Prerequisites
------------------
Airship in a Pod (AIAP) is a pod definition. Deploying and using AIAP is as simple as deploying it on any Kubernetes pod on a Linux machine matching the following requirements.
* Linux bare metal server\* with KVM (server recommended specs: CPUs 4, RAM 16G, free disk space 60GB)
* Kubernetes\**
* kubectl\**
* Kubernetes cluster
\* This is our initial AIAP deployment platform. Additional deployment platforms are under consideration for future AIAP installments.
\** Please note that for compatibility the Kubernetes and kubectl releases should be within 1 release of each other.
Deploying a Kubernetes Cluster
----------------------------------------
First, we need a working Kubernetes cluster and these can be provided by tools such as `kubeadm <https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/>`_, `minikube <https://minikube.sigs.k8s.io/docs/start/>`_ and `Docker Desktop <https://www.docker.com/products/docker-desktop>`_. The instructions to "Deploy AIAP" using kubectl are agnostic to how the kubernetes cluster is deployed.
In this example we shall utilize minikube to provide us with a Kubernetes cluster; minikube requires that we also deploy the docker-ce engine.
Pre-deploy needed utilites
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
sudo apt-get install apt-transport-https \
ca-certificates curl gnupg lsb-release
Deploy minikube
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exceute the following in a terminal (cmd or shell) window:
.. code-block:: bash
wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo chmod 755 minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
Deploy Docker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
sudo apt-get update
Add Docker GPG key
.. code-block:: bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Add stable directory
.. code-block:: bash
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
Update package
.. code-block:: bash
sudo apt update
apt-cache policy docker-ce
Install
.. code-block:: bash
sudo apt-get install docker-ce docker-ce-cli containerd.io
Add Docker User
.. code-block:: bash
sudo usermod -aG docker $USER && newgrp docker
To check Docker status
.. code-block:: bash
sudo systemctl status docker
Start minikube
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This will install kubernetes and create a kubernetes "default" cluster.
.. code-block:: bash
minikube start --cpus=4 --memory=16384 --driver=none
Please note that you can specify a smaller configuration or let minikube utilize the default configuraion by not specifying cpus or memory but, if resources permit, the above specifiction is highly recommended.
Deploy AIAP
--------------------
The `airship-in-a-pod.yaml <https://github.com/airshipit/airshipctl/blob/master/tools/airship-in-a-pod/airship-in-a-pod.yaml>`_ file contains declarations about the seven (7) containers (listed previously). To deploy AIAP once a kubernetes cluster is available:
.. code-block:: bash
$ kubectl apply -f https://raw.githubusercontent.com/airshipit/airshipctl/master/tools/airship-in-a-pod/airship-in-a-pod.yaml
You should see the message "airship-in-a-pod" created. The deployment of the containers will take some time.
View Pod Logs
~~~~~~~~~~~~~~
.. code-block:: bash
kubectl logs airship-in-a-pod -c $CONTAINER
Usage
-----------------------------
Interact with the Pod
~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
kubectl exec -it airship-in-a-pod -c $CONTAINER -- bash
where $CONTAINER is one of the containers listed above.
Output
~~~~~~~~~~~~~~~~~~~~~
Airship-in-a-pod produces the following outputs:
- The airshipctl repo and associated binary used with the deployment
- A tarball containing the generated ephemeral ISO, as well as the configuration used during generation.
These artifacts are placed at ARTIFACTS_DIR (defaults to /opt/aiap-artifacts).
Caching
~~~~~~~~~~~~~~~~~~~~~
As it can be cumbersome and time-consuming to build and rebuild binaries and images, some options are made available for caching. A developer may re-use artifacts from previous runs (or provide their own) by placing them in CACHE_DIR (defaults to /opt/aiap-cache). Special care is needed for the caching:
- If using a cached airshipctl, the airshipctl binary must be stored in the $CACHE_DIR/airshipctl/bin/ directory, and the developer must have set USE_CACHED_AIRSHIPCTL to true.
- If using a cached ephemeral iso, the iso must first be contained in a tarball named iso.tar.gz, must be stored in the $CACHE_DIR/ directory, and the developer must have set USE_CACHED_ISO to true.