Core Concepts
Kubernetes API Primitives
Kubernetes API primitive, also known as Kubernetes objects, are the basic building blocks of any application running in Kubernetes
Examples:
- Pod
- Node
- Service
- ServiceAccount
Two primary members
- Spec, desired state
- Status, current state
Resources
OpenShift
IKS
References
Prints all API Resources
oc api-resources
Prints all API Resources with their verbs.
oc api-resources -o wide
Prints all API Resources names only
oc api-resources -o name
Prints each of the available nodes, projects, services, deployments, and pods
oc get nodes,ns,po,deploy,svc
Prints the node’s description
oc describe node
Getting API Resources
kubectl api-resources
Viewing Resources
kubectl api-resources -o wide
Viewing Resources
kubectl api-resources -o name
Getting a list of specific objects
kubectl get nodes,ns,po,deploy,svc
Describing the resources
kubectl describe node --all
Creating Pods
A Pod is the basic execution unit of a Kubernetes application–the smallest and simplest unit in the Kubernetes object model that you create or deploy. A Pod represents processes running on your Cluster.
A Pod encapsulates an application’s container (or, in some cases, multiple containers), storage resources, a unique network IP, and options that govern how the container(s) should run. A Pod represents a unit of deployment: a single instance of an application in Kubernetes, which might consist of either a single container or a small number of containers that are tightly coupled and that share resources.
Resources
OpenShift
IKS
References
apiVersion: v1kind: Podmetadata:name: myapp-podlabels:app: myappspec:containers:- name: myapp-container
Get Current Pods in Project
oc get pods
Get Pod’s Description
oc describe pod <pod-name>
Get Pods with their IP and node location
oc get pods -o wide
Get Pods Stats
oc adm top pods
Get Current Pods in Project
kubectl get pods
Get Pod’s Description
kubectl describe pod <pod-name>
Delete a Pod
kubectl delete pod <pod-name>
Edit a Pod
kubectl edit pod <pod-name>
Projects/Namespaces
Namespaces are intended for use in environments with many users spread across multiple teams, or projects.
Namespaces provide a scope for names. Names of resources need to be unique within a namespace, but not across namespaces.
Namespaces are a way to divide cluster resources between multiple users (via resource quota).
It is not necessary to use multiple namespaces just to separate slightly different resources, such as different versions of the same software: use labels to distinguish resources within the same namespace. In practice namespaces are used to deploy different versions based on stages of the CICD pipeline (dev, test, stage, prod)
Resources
OpenShift
IKS
References:
apiVersion: v1kind: Namespacemetadata:name: foo
apiVersion: v1kind: Podmetadata:name: myapp-podnamespace: barlabels:app: myappspec:containers:
Create a new Project
oc new-project my-project
Viewing Current Project
oc project
Viewing Project Status
oc status
Getting all namespaces in cluster
kubectl get namespaces
Create a new namespace called bar
kubectl create ns bar
Setting Namespace in Context
kubectl set-context --current --namespace=bar