Containers
A container is a process that runs on the Photon OS host with its own isolated application, file system, and networking.
Photon OS includes the open source version of Docker. With Docker, Photon OS becomes a Linux run-time host for containers, that is, a Linux cloud container.
The full version of Photon OS includes Kubernetes so you can manage clusters of containers.
1 - Docker Containers
On Photon OS, the Docker daemon is enabled by default. To view the status of the daemon, run the following command:
systemctl status docker
Docker is loaded and running by default on the full version of Photon OS. On the minimal version, it is loaded but not running by default. To start it, run the following command:
systemctl start docker
To obtain information about Docker, run the following command as root:
docker info
After Docker is enabled and started, you can create a container. For example, run the following docker command as root to create a container running Ubuntu 14.04 with an interactive terminal shell:
docker run -i -t ubuntu:14.04 /bin/bash
Photon OS also enables you to run a docker container that runs Photon OS:
docker run -i -t photon /bin/bash
2 - Kubernetes
The Kubernetes package provides several services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd
. Their configuration resides in a central location: /etc/kubernetes
.
For more information, see Running Kubernetes on Photon OS.
3 - Support for distributed builds using Kubernetes
The distributed system using Kubernetes allows the build system to utilize the maximum CPU power across a kubernetes cluster (pods) for faster build process.
Prerequisites
- Ensure that the NFS server is running
- Ensure that you have the Kubernetes cluster ready that has access to the NFS server
- Ensure that you have installed Kubernetes package and have
kubeconfig
accessible in the build VM.
Triggering Distributed Photon Builds
Perform the following steps in the Photon OS repository:
- Update the
'common/data/distributed_build_options.json'
configuration file . The following parameters need to be filled:
command→ target to run like 'make packages'
or 'make packages-minimal'
or 'make toolchain-stage-1'
or so on.
Note: Keep the command
with flag 'SCHEDULER_SERVER=enable'
.
nfs-server-ip→ IP address of the nfs server
pods→ number of builder/worker pods you want such as 10 or 20. The default value is 1.
nfs-server-path-> path of the nfs mount. For example,/mnt/NFS_PATH/MY_DIR
- Run
make distributed-build
.
Note:
- This process will make use of the
kubeconfig
file present under the home directory and start building packages over the specified cluster. - It creates one Master pod and multiple worker pods (numbers defined in config.json).
- The master pod runs the scheduler while the worker or the builder pods build the packages.
- Distributed Builder monitors the build mob and deletes everything when build has either completed successfully or failed.
The master starts the scheduler server to schedule the packages that have to be built.
The worker makes REST calls to scheduler server.get package and notify after the build.
The distributed build also builds cloud images.