Abstraction Layer | Physical Layer | Uses Namespace | Description |
---|---|---|---|
Pod | Container | ✅ | A Pod is the minimal work unit of Kubernetes, it is generally equivalent to one applicative container but it can be composed of multiple ones. |
Replicaset | Load Balancing | ✅ | A ReplicaSet keeps track of and maintain the amount of instances expected and running for a given pod. |
Deployment | - | ✅ | A Deployment keeps track of and maintain the required configuration for a pod and replicaset. |
StatefulSet | - | ✅ | A StatefulSet is a Deployment with insurance on the start order and volume binding, to keep state consistent in time. |
Node | Host | ❌ | A Node can be a physical or virtual machine that is ready to host pods. |
Service | Network | ✅ | A Service will define an entrypoint to a set of pods semantically tied together. |
Ingress | Reverse Proxy | ✅ | An Ingress publishes Services outside the Cluster. |
Cluster | Datacenter | ❌ | A Cluster is the set of available nodes, including the Kubernetes controllers. |
Namespace | - | ➖ | A Namespace defines an isolated pseudo cluster in the current cluster. |
StorageClass | Disk | ❌ | A StorageClass configures filesystems sources that can be used to dynamically create PersistentVolumes. |
PersistentVolume | Disk Partition | ❌ | A PersistentVolume describe any kind of filesystem ready to be mounted on a pod. |
PersistentVolumeClaim | - | ✅ | A PersistentVolumeClaim binds a PersistentVolume to a pod, which can then actively use it while running. |
ConfigMap | Environment Variables | ✅ | A ConfigMap defines widely accessible properties. |
Secret | Secured Env. Var. | ✅ | A Secret defines widely accessible properties with potential encryption and access limitations. |
Last active
September 20, 2021 09:09
-
-
Save aveuiller/0177f86ef3e4732edd2db820517bd91c to your computer and use it in GitHub Desktop.
medium_Kubernetes_Apprentice_Cookbook
Field | File type | Content |
---|---|---|
apiVersion |
All files | Version to use while parsing the file. |
kind |
All files | Type of resource that the file is describing. |
metadata |
All files | Resource identification and labeling. |
data |
Data centric files (Secret, ConfigMap) | Content entry point for data mapping. |
spec |
Most files (Pod, Deployment, Ingress, ...) | Content entry point for resource configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# <metadata> narrows down selection and identify the resource | |
metadata: | |
# The <name> entry is required and used to identify the resource | |
name: my-resource | |
namespace: my-namespace-or-default | |
# <labels> is optional but often needed for resource selection | |
labels: | |
app: application-name | |
category: back | |
# <annotations> is optional and not needed for the configuration of Kubernetes | |
annotations: | |
version: 4.2 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
# <kind> defines the resource described in this file | |
kind: ConfigMap | |
metadata: | |
name: my-config | |
data: | |
# <data> configures data to load | |
configuration_key: "configuration_value" | |
properties_entry: | | |
# Any multiline content is accepted | |
multiline_config=true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
# <kind> defines the resource described in this file | |
kind: Pod | |
metadata: | |
name: my-web-server | |
spec: | |
# <spec> is a domain specific description of the resource. | |
# The specification entries will be very different from one kind to another |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
kind: Secret | |
metadata: | |
name: simple-web-secrets | |
# Opaque <type> can hold generic secrets, so no validation will be done. | |
type: Opaque | |
data: | |
# Secrets should be encoded in base64 | |
secret_configuration_key: "c2VjcmV0IHZhbHVl" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
valueFrom: | |
secretKeyRef: | |
name: simple-web-secrets | |
key: secret_configuration_key |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
kind: ConfigMap | |
metadata: | |
name: simple-web-config | |
namespace: default | |
data: | |
configuration_key: "Configuration value" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
valueFrom: | |
configMapKeyRef: | |
name: simple-web-config | |
key: configuration_key |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
kind: Pod | |
metadata: | |
name: my-web-server | |
spec: | |
# <containers> is a list of container definition to embed in the pod | |
containers: | |
- name: web | |
image: nginx | |
ports: | |
- name: web | |
containerPort: 80 | |
protocol: TCP | |
env: | |
- name: SOME_CONFIG | |
# Create a line "value: <config_entry>" from the ConfigMap data | |
valueFrom: | |
configMapKeyRef: | |
name: simple-web-config | |
key: configuration_key | |
- name: SOME_SECRET | |
# Create a line "value: <config_entry>" from the Secret data | |
valueFrom: | |
secretKeyRef: | |
name: simple-web-secrets | |
key: secret_configuration_key |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: my-web-server-deployment | |
namespace: default | |
labels: | |
app: webserver | |
spec: | |
# <selector> should retrieve the Pod defined below, and possibly more | |
selector: | |
matchLabels: | |
app: webserver | |
instance: nginx-ws-deployment | |
# <replicas> asks for 3 pods running in parallel at all time | |
replicas: 3 | |
# The content of <template> is a Pod definition file, without <apiVersion> nor <kind> | |
template: | |
metadata: | |
name: my-web-server | |
namespace: default | |
labels: | |
app: webserver | |
instance: nginx-ws-deployment | |
spec: | |
containers: | |
- name: web | |
image: nginx | |
ports: | |
- name: web | |
containerPort: 80 | |
protocol: TCP | |
env: | |
- name: SOME_CONFIG | |
# Create a line "value: <config_entry>" from the ConfigMap data | |
valueFrom: | |
configMapKeyRef: | |
name: simple-web-config | |
key: configuration_key | |
- name: SOME_SECRET | |
# Create a line "value: <config_entry>" from the Secret data | |
valueFrom: | |
secretKeyRef: | |
name: simple-web-secrets | |
key: secret_configuration_key |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: simple-web-service-clusterip | |
spec: | |
# ClusterIP is the default service <type> | |
type: ClusterIP | |
# Select all pods declaring a <label> entry "app: webserver" | |
selector: | |
app: webserver | |
ports: | |
- name: http | |
protocol: TCP | |
# <port> is the port to bind on the service side | |
port: 80 | |
# <targetPort> is the port to bind on the Pod side | |
targetPort: 80 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: networking.k8s.io/v1 | |
kind: Ingress | |
metadata: | |
name: simple-web-ingress | |
annotations: | |
nginx.ingress.kubernetes.io/rewrite-target: / | |
spec: | |
rules: | |
# Using <host> redirects all request matching the given DNS name to this rule | |
- host: "*.minikube.internal" | |
http: | |
paths: | |
- path: /welcome | |
pathType: Prefix | |
backend: | |
service: | |
name: simple-web-service-clusterip | |
port: | |
number: 80 | |
# All other requests will be redirected through this rule | |
- http: | |
paths: | |
- path: / | |
pathType: Prefix | |
backend: | |
service: | |
name: simple-web-service-clusterip | |
port: | |
number: 80 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# <kind> is the type of resource to create (e.g. deployment, secret, namespace, quota, ...) | |
$ kubectl create <kind> <name> | |
$ kubectl edit <kind> <name> | |
$ kubectl delete <kind> <name> | |
# All those commands can be used through a description file. | |
$ kubectl create -f <resource>.yaml | |
$ kubectl edit -f <resource>.yaml | |
$ kubectl delete -f <resource>.yaml |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Create and update any resource | |
$ kubectl apply -f <resource>.yaml | |
# Delete any resource | |
$ kubectl delete -f <resource>.yaml |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Fetch everything | |
$ kubectl get all | |
NAME READY STATUS RESTARTS AGE | |
pod/my-web-server-deployment-58c4fd887f-5vm2b 1/1 Running 0 128m | |
pod/my-web-server-deployment-58c4fd887f-gq6lr 1/1 Running 0 128m | |
pod/my-web-server-deployment-58c4fd887f-gs6qb 1/1 Running 0 128m | |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE | |
service/simple-web-service-clusterip ClusterIP 10.96.96.241 <none> 80/TCP,443/TCP 60m | |
service/simple-web-service-lb LoadBalancer 10.108.182.232 <pending> 80:31095/TCP,443:31940/TCP 60m | |
service/simple-web-service-np NodePort 10.101.77.203 <none> 80:31899/TCP,443:31522/TCP 60m | |
NAME READY UP-TO-DATE AVAILABLE AGE | |
deployment.apps/my-web-server-deployment 3/3 3 3 136m | |
NAME DESIRED CURRENT READY AGE | |
replicaset.apps/my-web-server-deployment-58c4fd887f 3 3 3 128m | |
# We can ask for more details | |
$ kubectl get deployment -o wide | |
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR | |
my-web-server-deployment 3/3 3 3 121m web nginx app=webserver | |
# Some resources are not visible using "all" but available | |
$ kubectl get configmap | |
NAME DATA AGE | |
kube-root-ca.crt 1 38d | |
simple-web-config 3 3h17m |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Let's describe the ingress for the sake of example | |
$ kubectl describe ingress/simple-web-ingress | |
Name: simple-web-ingress | |
Namespace: default | |
Address: 192.168.64.2 | |
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>) | |
Rules: | |
Host Path Backends | |
---- ---- -------- | |
*.minikube.internal | |
/welcome simple-web-service-clusterip:80 (172.17.0.4:80,172.17.0.5:80,172.17.0.6:80 + 1 more...) | |
* | |
/ simple-web-service-clusterip:80 (172.17.0.4:80,172.17.0.5:80,172.17.0.6:80 + 1 more...) | |
Annotations: nginx.ingress.kubernetes.io/rewrite-target: / | |
Events: | |
Type Reason Age From Message | |
---- ------ ---- ---- ------- | |
Normal UPDATE 7m6s (x6 over 23h) nginx-ingress-controller Ingress default/simple-web-ingress |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ kubectl logs deployments/my-web-server-deployment | |
Found 3 pods, using pod/my-web-server-deployment-755b499f77-4n5vn | |
# [logs] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# As for logs, when called on any resource enclosing Pods, | |
# Kubernetes will randomly chose one to execute the action | |
$ kubectl exec -it deployment/my-web-server-deployment -- /bin/bash | |
root@my-web-server-deployment-56c4554cf9-qwtm6:/# ls | |
# [...] |
Operation | Docker | Kubernetes |
---|---|---|
Running containers | docker ps |
kubectl get pods |
Configuration details | docker inspect <name> |
kubectl describe <name> |
Show logs | docker logs <name> |
kubectl logs <name> |
Enter container | docker exec -it <name> /bin/bash |
kubectl exec -it <name> -- /bin/bash |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment