OpenShift
OpenShift is a platform based on Kubernetes to host and manage applications in containers.
Core concepts
Software
Containers & pods
- Docker containers
- Units for running processes. Contain the software code, all dependencies (programming libraries, operating system tools & libraries). Allows to run processes in isolation. Containers usually run single services (e.g. web server, database, …) called micro-services.
- Images
- Binary file that contains instructions for building a container. Images are commonly based on other images (e.g. you application image is based on an ubuntu image). By creating multiple containers from the same image, you can use load-balancing for your processes.
- Image tags
- usually contain the version number and potentially other info (e.g. OS, base-image, …). Used to distinguish realted images in the same repository or stream.
- Image registries
- Stores images in image repositories (containing images with different tags) and deploys the images into containers.
- Pods
- Collection of one or more containers. Containers in the same pod share the same compute resources (i.e. same cluster & local network, see below). You define, deploy and manage pods and not containers separately. A pod has an internal IP-adress. Containers within pods share their local storage and networking. You cannot change running pods; you stop them and recreate them with the modification.
- Restart Policy
- When containers in a pod exit (finish application task or failing), the pod can be restarted “always”, “OnFailure” or “Never”. If a pod fails, a new pod is created (possibly losing temporary files, etc.).
- Services
- Load balancer that distributes and proxies connections to the pods. Head-less services run without load balancers.
- Labels
- Pods can be given labels and thus organized into groups. Services use these to select groups of pods to proxy to.
Projects & users
- Users
- People or roles that can interact with the components of OpenShift. There are regular users (humans), system users (technical accounts: cluster admins, per-node users, …) and service accounts (accounts to that are used by application processes)
- Kubernets namespaces
- Logical groups of resources (nodes & services) to avoid naming collisions, organize authoriy and resource consumption. (e.g. dev-namespace, test-namespace, prod-namespace)
- Projects
- A project is a kubernetes namespaces with additional features. It defines its objects (pods, services, replication controllers, …), policy rules, resource constraints & service accounts.
Builds & Deployments
- Builds
- A build is the process that transforms the specifications and source code into a runnable image. These are then pushed into the image registry. Openshift uses Source-to-Image (S2I) as the tool that builds the images. Build pipelines can be constructed using Jenkins and defined in jenkins files that are referenced by the build-configuration.
- Image streams
- give you an overview of related images like in image repositories. Deployment pipelines can watch streams to trigger new deployments, when new images arrive.
- Replication controller
- Controls the number of replicas of a pod. It makes sure that there is the specified amount of replicas running at all times. It does not autoscale on its own. Used for continuously running pods.
- Job
- creates pods like a replication controller does. It is however used for one-time running pods. It tracks if the pods have run successfully.
- Deployments
- The process of starting up pods with their respective images. A deployment creates a new replication controller and has it ship the pods as specified. The deploymentConfig defines the replication controller, the triggers for the deployment and lifecycle hooks.
Hardware
- Node
- Compute hardware unit. A single machine, where the container runs on.
- Cluster
- Group of nodes that are orchestrated to share resources and load.
- Endpoint
- Server that backs a service (see above).
More information: OpenShift: Core Concepts Google Cloud: What are Containers Docker Docs: Docker overview