SlideShare a Scribd company logo
1 of 57
Download to read offline
Kubernetes Administration from Zero to
(junior) Hero
László Budai – Component Soft Ltd.
2
(c) 2018 Component Soft Ltd. - v1.11revdraf
Agenda
1.Introduction
2.Accessing the kubernetes API
3.Kubernetes workloads
4.Accessing applications
5.Volumes and persistent storage
3
(c) 2018 Component Soft Ltd. - v1.11revdraf
Introduction
● Cloud computing in general
● Cloud native computing
● Kubernetes overview
● Kubernetes architecture
4
(c) 2018 Component Soft Ltd. - v1.11revdraf
Cloud computing in general
● a model for enabling ubiquitous network access to a
shared pool of configurable computing resources*
– resources (compute, storage, network, apps) as services
● resources are allocated on demand
– scaling and removal also happens rapidly ( seconds-minutes)
● multi-tenancy
– share resources among thousands of users
– resource quotas
– cost effective IT
● Pay-As-You-Go model
– pay per hour/gigabyte instead of flat rate
● maximized effectiveness of the shared resources
– maybe over-provisioning
● lower barriers to entry (nice for startups)
– focus on your business instead of your infrastructure
*definition by NIST
5
(c) 2018 Component Soft Ltd. - v1.11revdraf
Cloud native computing
– a new computing paradigm that is optimized for modern
distributed systems environments capable of scaling to tens of
thousands of self healing multi-tenant nodes.
– Main properties:
● Container packaged – containers represents an isolated unit of application
deployment.
● Dynamically managed - actively scheduled and actively managed by a
central orchestrating process.
● Micro-services oriented - loosely coupled with dependencies explicitly
described (e.g. through service endpoints).
6
(c) 2018 Component Soft Ltd. - v1.11revdraf
Application containers
– OS level virtualization – OS partitioning (virtual OS vs virtual HW)
– Allows us to run multiple isolated user-space application
instances in parallel.
– Instances will have:
● Application code
● Required libraries
● Runtime
– Self sufficient – no external dependencies
– Portable
– Lightweight
– Immutable images Hardware
Operating system
Libraries,
binaries
Application
Libraries,
binaries
Application
Libraries,
binaries
Application
7
(c) 2018 Component Soft Ltd. - v1.11revdraf
Container orchestration
– tools that are providing an enterprise-level framework for
integrating and managing containers at scale.
– aim to simplify container management
● a framework for defining initial container deployment
● availability
● scaling
● networking
– Docker Swarm
– Mesosphere Marathon
– Kubernetes
8
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes
– Kubernetes – ancient Greek word for helmsman
or pilot of the ship
– Initially developed by google
– Has its origins in Borg cluster manager
– “Kubernetes is an open-source system for
automating deployment, scaling, and
management of containerized applications.”
– Places containers on nodes
– Recovers from failure
– Basic monitoring, logging, health checking
– Enables containers to find each other
9
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes concepts
– Kubernetes Master – maintains the desired state for the cluster
– Kubernetes Node – runs the applications
– Kubernetes objects - abstractions that represent the state of
the cluster.
● A “record of intent” - a desired state of the cluster
● Objects have
– Spec – describes its desired state
– State – describes the actual state; updated by Kubernetes.
– Name – client provided; unique for a kind in a namespace, can be
reused
– Namespaces – virtual clusters; provides a scope for names.
– Labels – key-value pairs attached to objects
– Label selector – is the core grouping primitive
– Annotations – attach arbitrary non-identifying metadata to
objects
10
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes objects categories
– Workloads – used to manage and run the containers (Pod,
ReplicationController, deployment)
– Discovery & LB – "stitck" workloads together into an externally
accessible, load-balanced Service (Service, Ingress).
– Config & Storage – objects we can use to inject initialization
data into applications, and to persist data that is external to the
containers (Volume, Secret).
– Metadata – objects used to configure the behavior of other
resources within the cluster (LimitRange)
– Cluster – objects responsible for defining the configuration of
the cluster itself (Namespace, Binding)
11
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes architecture
– Kubernetes master
– Kubernetes node
Kubernetes master
API Server
Controller
Manager
Scheduler
etcd
Kubernetes node
Kubelet Kube-Proxy
Pod Pod Pod Pod
...
.
.
.
Container engine
Kubernetes node
Kubelet Kube-Proxy
Pod Pod Pod Pod
...
Container engine
Users
Kubernetes node
Devops
12
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes master
– provide the cluster’s control plane
– kube-apiserver
● Exposes the Kubernetes API – the front-end
for the Kubernetes control plane.
● Designed to scale horizontally.
– etcd
● Is the backing store of Kubernetes.
● Distributed key-value store
– Kube-controller-manager
● background threads that handle routine tasks
– Node Controller
– Replication Controller
– Endpoints Controller
– Service Account & Token Controllers
– kube-scheduler
● Assigns nodes to the newly created pods
Kubernetes master
API Server
Controller
Manager
Scheduler
etcd
13
(c) 2018 Component Soft Ltd. - v1.11revdraf
Kubernetes node
– kubelet - the primary node agent. It watches for pods that have
been assigned to its node and:
● Mounts the pod’s required volumes.
● Downloads the pod’s secrets.
● Runs the pod’s containers.
● Periodically executes any requested container
liveness probes.
● Reports the status of the pod.
● Reports the status of the node.
– kube-proxy
● enables the Kubernetes service abstraction by maintaining network rules
on the host and performing connection forwarding
– Container engine
● Used to run the containers
● Docker by default, rkt optionally.
● Container Runtime Interface – paves the way to alternative runtimes
Kubernetes node
Kubelet Kube-Proxy
Pod Pod
...
Container engine
14
(c) 2018 Component Soft Ltd. - v1.11revdraf
Exercise 1: The lab environment
– Understanding
the classroom
environment
– Using kubectl
br_management
10.10.10.0/24
Lab machine:
KVM
instances
master1 worker2 worker3
eth0 eth0 eth0
worker1
eth0
15
(c) 2018 Component Soft Ltd. - v1.11revdraf
2. Accessing the kubernetes API
– Ways to access the API
– Controlling access to the API
– Authentication
– Authorization
– Role Based Access Control
16
(c) 2018 Component Soft Ltd. - v1.11revdraf
Accessing the kubernetes cluster
– kubectl – the command line tool for deploying and managing
applications on kubernetes
● Inspect cluster resources
● Create, delete, update components
● Configuration file: ~/.kube/config – information for finding and accessing
a cluster
● bash autocompletion
– Dashboard – web based user interface (add-on)
● Manage applications
● Manage the cluster itself
– Direct access to the API
● HTTP REST
17
(c) 2018 Component Soft Ltd. - v1.11revdraf
Controlling access to the API
– A request for the API will pass several stages before reaching it
Authentication Authorization
Admission
control
Resource
Resource
Request
– Authentication – Ensures that the user it is who it pretends to be
– Kubernetes has 2 categories of users:
● Service accounts – managed by kubernetes
● Normal users – managed by an independent service
– API requests can be treated as anonymous ones if are not tied
to a user or service account.
– Kubernetes uses client certificates, bearer tokens, an
authenticating proxy, or HTTP basic auth to authenticate API
requests through authentication plugins.
18
(c) 2018 Component Soft Ltd. - v1.11revdraf
Authorization
– After the user authentication step the request will have to pass the
authorization step.
– All parts of an API request must be allowed by some policy →
permissions are denied by default.
– Authorization modules
● Node
● ABAC – Attribute-based access control
● RBAC – Role-based access control
● Webhook
19
(c) 2018 Component Soft Ltd. - v1.11revdraf
Role Based Access Control
– RBAC allows fine grained rules for accessing the cluster
– allows dynamic configuration of policies through the Kubernetes API.
– uses the “rbac.authorization.k8s.io” API group
– It defines Roles and RoleBindings in order to assign permissions to
subjects.
– These permissions can be set
● Clusterwide – can be used for cluster-scoped resources, non-resource
endpoints, namespaced resources across all namespaces
● Within a namespace.
● For one single resource.
– Subjects can be users, groups, and service accounts
20
(c) 2018 Component Soft Ltd. - v1.11revdraf
Roles and ClusterRoles
– RBAC roles contains the rules that represent the permissions
– Permissions are purely additive
– A role can be defined within a namespace, or cluster-wide
(ClusterRole)
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
– ClusterRoles are not namespaced
21
(c) 2018 Component Soft Ltd. - v1.11revdraf
Role bindings
– Role binding grants the permissions defined in a role to a subject.
– Permissions can be granted within a namespace with a RoleBinding,
or cluster-wide with a ClusterRoleBinding
– A RoleBinding can use a ClusterRole. The rules will apply to the
namespace of the binding.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: read-pods
namespace: development
subjects:
- kind: User
name: dave
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-pod-reader
apiGroup: rbac.authorization.k8s.io
22
(c) 2018 Component Soft Ltd. - v1.11revdraf
Exercise 2: RBAC
– Use RBAC to control access to the API
23
(c) 2018 Component Soft Ltd. - v1.11revdraf
3. Kubernetes workloads
– Pod
– Replication controllers
– Deployments, Replica sets
– Jobs and CronJobs
– DaemonSets
24
(c) 2018 Component Soft Ltd. - v1.11revdraf
The pod
– Pod - the smallest deployable object in the Kubernetes object model.
– It runs a single instance of an application
– Contains
● One or more application containers
● Storage resources
● A unique IP address
● Options about how the container(s) should run.
– Containers in one pod are sharing the
network namespace and storage resources
– A pod is scheduled on a node and remains
there until terminated or evicted
– Pods do not self-heal by themselves →
controller.
Volume
Pause
Container1
Container2
eth0
Network
Namesp
ace
Network
25
(c) 2018 Component Soft Ltd. - v1.11revdraf
The pod (cont)
– Pod lifecycle:
● Pending – pod has been accepted by the Kubernetes system, but one or more
of the Container images has not been created.
● Running – has been bound to a node, all of the containers have been created.
At least one container is still running (or starting / restarting).
● Succeeded – all containers have terminated in success, and will not be
restarted
● Failed - All Containers have terminated; at least one has terminated in failure.
● Unknown – the state of the pod could not be obtained
– Probes – performed by the kubelet on a Container using a handler
● Probe types – what is testing: readinessProbe, livenessProbe
● Handler Types – how is testing: ExecAction, TCPSocketAction, HTTPGetAction
● Probe result: Success, Failure, Unknown
– Restart policy – restarts a pod based on the liveness test result
● restartPolicy: Always, OnFailure, Never
– Pods are restarted on the same node, only controllers can schedule
a new pod on a different node.
26
(c) 2018 Component Soft Ltd. - v1.11revdraf
Our first Pod
Describe the Pod using a YAML file:
apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  restartPolicy: OnFailure
  containers:
   ­ name: busybox
     image: busybox
     command:
       ­ sleep
     args:
       ­ "100"
27
(c) 2018 Component Soft Ltd. - v1.11revdraf
Operations on pods
– Create the pod using the kubectl command:
● kubectl create -f pod1.yaml
– Check the pod status
● kubectl get pod busybox [-o wide]
● kubectl get pod --watch
– Get information about the pod
● kubectl describe pod busybox
● kubectl get pod busybox -o yaml
– Check the logs of a pod
● kubectl logs busybox
– Execute a command inside the pod
● kubectl exec -ti busybox sh
– Delete the pod
● kubectl delete pod busybox
28
(c) 2018 Component Soft Ltd. - v1.11revdraf
ReplicaSet
– The ReplicaSet controller simply
ensures that the desired number of
pods matches its label selector
exists and are operational
– If the labels of the pod are modified
and they do not match the label
selector, then a new pod is spawned,
the old one stays there.
– The ReplicaSet provide a declarative
definition of what a Pod should be
and how many of it should be running
at a time.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
rs1.yaml
29
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with ReplicaSet
– Create the ReplicaSet
● kubectl create -f rs1.yaml
– Check the status
● kubectl get rs [--watch]
● kubectl describe rs nginx
– Change the number of replicas
● kubectl scale rs nginx --replicas=3
– Delete the ReplicaSet
● kubectl delete rs nginx
30
(c) 2018 Component Soft Ltd. - v1.11revdraf
Deployments
– A Deployment provides declarative updates for Pods and
ReplicaSets
– Deployment creates ReplicaSet, which creates the Pods
– Updating a deployment creates new ReplicaSet and updates the
revision of the deployment.
– During update pods from the initial RS are scaled down, while pods
from the new RS are scaled up.
– Rollback to an earlier revision, will update the revision of Deployment
– The --record flag of kubectl allows us to record current command in
the annotations of the resources being created or updated
– Strategy – how to replace the old pods
● Rolling update (default): maxUnavailable, maxSurge
● Recreate
31
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with Deployments
– Creating a deployment
● kubectl run ghost --image=ghost --record
● kubectl create -f dep1.yaml --record
● dep1.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
32
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with Deployments (cont)
– Check the status
● kubectl get deployment nginx [--watch]
● kubectl get deployment nginx -o yaml
● kubectl describe deployment nginx
– Scale a deployment
● kubectl scale deployment nginx --replicas=4
33
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with Deployments (cont)
– Update a deployment
● kubectl set image deployment/nginx nginx=nginx:1.7.9 --all=true
● kubectl edit deployment nginx
– Check the status of a rollout
● kubectl rollout status deployment nginx
● kubectl rollout history deployment nginx
– Undo a rollout
● kubectl rollout undo deployment/nginx [--to-revision=2]
– Pause and resume a deployment – allows multiple changes
● kubectl rollout pause deployment/nginx
● kubectl rollout resume deployment/nginx
34
(c) 2018 Component Soft Ltd. - v1.11revdraf
Jobs, CronJobs
– A job creates one or more pods and ensures that a specified number
of them successfully terminate.
– Jobs can be used to reliably run a Pod to completion the specified
number of times (.spec.completions)
– Jobs can run multiple Pods in parallel (.spec.parallelism)
– Pods in a Job can only use Never or OnFailure as their RestartPolicy
– It is up to the user to delete old jobs after noting their status
– Deleting a Job will delete the related Pods
– If Pods are failing, the Job will create new Pods forever. The
.spec.activeDeadlineSeconds will limit the time for which a Job will
create new Pods.
– CronJobs can create Jobs once or repeatedly at specified times
– .spec.jobTemplate will specify the Job to be created
– concurrencyPolicy: Allow, Forbid, Replace
35
(c) 2018 Component Soft Ltd. - v1.11revdraf
Jobs example
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
completions: 10
parallelism: 3
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
36
(c) 2018 Component Soft Ltd. - v1.11revdraf
CronJobs example
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: cron-pi
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
completions: 10
parallelism: 3
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
37
(c) 2018 Component Soft Ltd. - v1.11revdraf
DaemonSets
– A DaemonSet ensures that all (or some) nodes run a copy of a pod
– When nodes are added to the cluster, pods are added to them
– When nodes are removed from the cluster, those pods are garbage
collected
– To run pods only on some nodes:
● .spec.template.spec.nodeSelector – pods started on nodes that match the
node selector
● .spec.template.spec.affinity – pods are created on nodes that match the node
affinity
– If node labels are changed, the DaemonSet will promptly adapt
– Deleting a DaemonSet will delete the pods (except –cascade=false)
– UpdateStrategy:
● OnDelete - new pods will only be created when the old ones are manually
deleted
● RollingUpdate - after you update a DaemonSet template, old pods will be killed
38
(c) 2018 Component Soft Ltd. - v1.11revdraf
Exercise 3: Kubernetes workloads
– Task 1: Working with pods
– Task 2: Working with deployments
39
(c) 2018 Component Soft Ltd. - v1.11revdraf
4. Accessing the applications
– Services
40
(c) 2018 Component Soft Ltd. - v1.11revdraf
Services
– Service – an abstraction which defines a logical set of Pods and a
policy by which to access them
– The service maps an incoming port to a target port
– The pods targeted are defined by the selector → Endpoints
– We can have services without selector → no Endpoints object is
created automatically
– iptables proxies depends on working readiness probes
– Service discovery:
● Environment variables – are created when the pod is created → requires
ordering (the service should be defined first)
● DNS – optional cluster add-on. No ordering is required.
41
(c) 2018 Component Soft Ltd. - v1.11revdraf
Service types
– ClusterIP: Exposes the service on a cluster-internal IP – only
reachable from within the cluster. Default
– NodePort: Exposes the service on each Node’s IP at a static port.
The service will be reachable from outside the cluster using
NodeIP:NodePort
– LoadBalancer: Exposes the service externally using a cloud
provider’s load balancer.
– ExternalName: Maps the service to the contents of the
externalName field, by returning a CNAME record with its value.
42
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with Services
– Expose the ports of a deployment/RC
● kubectl expose deployment nginx --port=80 --type=NodePort
– Create services from file:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 80
kubectl create -f svc1.yaml
43
(c) 2018 Component Soft Ltd. - v1.11revdraf
Working with Services
– Get service information:
● kubectl get svc
● kubectl describe svc
– Check service discovery
● kubectl exec -ti busybox env
● kubectl exec -ti busybox nslookup nginx
– Check the iptables rules on the nodes
● iptables -t nat -L -n
● iptables -L -n
44
(c) 2018 Component Soft Ltd. - v1.11revdraf
Exercise 4: Services
– Working with services
45
(c) 2018 Component Soft Ltd. - v1.11revdraf
5. Persistent storage in kubernetes
– Volumes
– Persistent volumes and volume claims
– Secrets
– ConfigMaps
46
(c) 2018 Component Soft Ltd. - v1.11revdraf
Volumes
– By default the container filesystem is ephemeral – recreated each
time when the container starts → a clean state each time → can be
a problem for non trivial applications
– A pod can have multiple containers that are sharing files.
– A volume in the simplest form is just a directory which is accessible
to the containers in a pod.
– The type of volume determines the backend for the directory.
– The pod definition specifies what volumes are provided (the
spec.volumes field), and where are these mounted in the containers
(the spec.containers.volumeMounts field).
– The containers are independently specifying where to mount each
volume (the same volume can be mounted on different path in
different containers).
47
(c) 2018 Component Soft Ltd. - v1.11revdraf
Volume example
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
48
(c) 2018 Component Soft Ltd. - v1.11revdraf
Volume types
– Kubernetes supports several volume types:
● emptyDir – initially empty; deleted when the pod is deleted (survives crashes)
● hostPath – mounts a directory from the host into the pod. The content is host
specific → pods with identical specs can behave differently on different nodes.
● gcePersistentDisk – mounts a Google Compute Engine (GCE) Persistent Disk
into the pod. Content preserved on pod delete → prepopulate, data “hand off”
● awsElasticBlockStore - mounts an Amazon Web Services EBS Volume into the
pod. Content preserved.
● nfs – allows an existing NFS share to be mounted into the pod. Allows multiple
writers. The server should be configured. Content is preserved.
● iscsi – single writer. Can be mounted read only by multiple pods.
● glusterfs – multiple writers.
● rbd - single writer. Can be mounted read only by multiple pods.
● cephfs – multiple writers.
● secret
● persistentVolumeClaim
49
(c) 2018 Component Soft Ltd. - v1.11revdraf
Persistent Volumes
– PersistentVolume (PV) – a cluster resource that hides the details of
storage implementation from the pod.
● Can be of different types (HostPath, NFS, iSCSI, RBD, … plugins)
● Are independent from the pods that are using them.
– PersistentVolumeClaim (PVC) – a request for storage by a pod.
● PVCs will consume PV resources.
● PVC can request size, access mode, storage class.
– StorageClass – describes the “classes” of storages
● Classes can map to quality-of-service levels, backup policies, …
● Allows for dynamic provisioning of Pvs.
– The pod definition will use the PVC for defining the volumes
consumed by the containers.
– Dynamic provisioning is possible using the StorageClass definition.
● A StorageClass will contain the provisioner and parameter fields.
50
(c) 2018 Component Soft Ltd. - v1.11revdraf
Persistent Volume example
– First we define the PV:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs001
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
nfs:
path: /tmp
server: 10.10.10.1
51
(c) 2018 Component Soft Ltd. - v1.11revdraf
Persistent Volume example (cont)
– We define the PVC (the claim):
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: slow
52
(c) 2018 Component Soft Ltd. - v1.11revdraf
Persistent Volume example (cont)
– the Pod (the consumer):
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: dockerfile/nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
53
(c) 2018 Component Soft Ltd. - v1.11revdraf
Secrets
– Secret objects are intended to hold sensitive information, such as
passwords.
– Safer than putting sensitive information into pod definition, or docker
images.
– Secrets can be used by pods as files in a volume, or injected by the
kubelet.
– Secrets can be created from files, or directly specifying them:
● kubectl create secret generic mysql --from-literal=password=mypasswd
– Checking secrets:
● kubectl get secret mysql -o yaml
54
(c) 2018 Component Soft Ltd. - v1.11revdraf
Using Secrets as environmental variables
. . .
spec:
containers:
- image: mysql:5.5
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql
key: password
55
(c) 2018 Component Soft Ltd. - v1.11revdraf
Using Secrets as volumes
...
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
volumeMounts:
- mountPath: /mysqlpassword
name: mysql
name: busy
volumes:
- name: mysql
secret:
secretName: mysql
● kubectl exec -ti busybox -- cat /mysqlpassword/password
56
(c) 2018 Component Soft Ltd. - v1.11revdraf
ConfigMaps
– ConfigMap objects are intended for passing information that tends to
be stored in a single config file
– Can store key-value pairs, or plain configuration files
● kubectl create configmap special-config --from-literal=special.how=very
● kubectl create configmap mymap –from-file=app.conf
– Check the values stored in the map
● kubectl get configmap mymap -o yaml
– Passing values to pods:
● As environmental variables (part of the pod definition):
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
● As volumes:
volumes:
- name: config-volume
configMap:
name: special-config
57
(c) 2018 Component Soft Ltd. - v1.11revdraf
Exercise 5: Storage in Kubernetes
– Use a volume in two containers

More Related Content

Similar to Kubernetes Administration from Zero to Hero.pdf

Load Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLoad Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLee Calcote
 
Introducing Kubernetes
Introducing Kubernetes Introducing Kubernetes
Introducing Kubernetes VikRam S
 
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...NETWAYS
 
An intro to Kubernetes operators
An intro to Kubernetes operatorsAn intro to Kubernetes operators
An intro to Kubernetes operatorsJ On The Beach
 
5 - Hands-on Kubernetes Workshop:
5 - Hands-on Kubernetes Workshop:5 - Hands-on Kubernetes Workshop:
5 - Hands-on Kubernetes Workshop:Kangaroot
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesRishabh Indoria
 
1. CNCF kubernetes meetup - Ondrej Sika
1. CNCF kubernetes meetup - Ondrej Sika1. CNCF kubernetes meetup - Ondrej Sika
1. CNCF kubernetes meetup - Ondrej SikaJuraj Hantak
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMwareVMUG IT
 
Why kubernetes for Serverless (FaaS)
Why kubernetes for Serverless (FaaS)Why kubernetes for Serverless (FaaS)
Why kubernetes for Serverless (FaaS)Krishna-Kumar
 
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless  - Serverless Summit 2017 - Krishna KumarKubernetes for Serverless  - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless - Serverless Summit 2017 - Krishna KumarCodeOps Technologies LLP
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Ryan Jarvinen
 
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Amazon Web Services Korea
 
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020VMware Tanzu
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesRonny Trommer
 
JDO 2019: What you should be aware of before setting up kubernetes on premise...
JDO 2019: What you should be aware of before setting up kubernetes on premise...JDO 2019: What you should be aware of before setting up kubernetes on premise...
JDO 2019: What you should be aware of before setting up kubernetes on premise...PROIDEA
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectPatrick Chanezon
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesGabriel Carro
 
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...Cloud Native Day Tel Aviv
 
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)Shift Conference
 

Similar to Kubernetes Administration from Zero to Hero.pdf (20)

Load Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & KubernetesLoad Balancing in the Cloud using Nginx & Kubernetes
Load Balancing in the Cloud using Nginx & Kubernetes
 
Introducing Kubernetes
Introducing Kubernetes Introducing Kubernetes
Introducing Kubernetes
 
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...
OSDC 2019 | KubeVirt: Converge IT infrastructure into one single Kubernetes p...
 
An intro to Kubernetes operators
An intro to Kubernetes operatorsAn intro to Kubernetes operators
An intro to Kubernetes operators
 
5 - Hands-on Kubernetes Workshop:
5 - Hands-on Kubernetes Workshop:5 - Hands-on Kubernetes Workshop:
5 - Hands-on Kubernetes Workshop:
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
1. CNCF kubernetes meetup - Ondrej Sika
1. CNCF kubernetes meetup - Ondrej Sika1. CNCF kubernetes meetup - Ondrej Sika
1. CNCF kubernetes meetup - Ondrej Sika
 
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
01 - VMUGIT - Lecce 2018 - Fabio Rapposelli, VMware
 
Why kubernetes for Serverless (FaaS)
Why kubernetes for Serverless (FaaS)Why kubernetes for Serverless (FaaS)
Why kubernetes for Serverless (FaaS)
 
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless  - Serverless Summit 2017 - Krishna KumarKubernetes for Serverless  - Serverless Summit 2017 - Krishna Kumar
Kubernetes for Serverless - Serverless Summit 2017 - Krishna Kumar
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17
 
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
 
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020
Delivering-Off-The-Shelf Software with Kubernetes- November 12, 2020
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to Kubernetes
 
JDO 2019: What you should be aware of before setting up kubernetes on premise...
JDO 2019: What you should be aware of before setting up kubernetes on premise...JDO 2019: What you should be aware of before setting up kubernetes on premise...
JDO 2019: What you should be aware of before setting up kubernetes on premise...
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby project
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...
Kuryr-Kubernetes: The perfect match for networking cloud native workloads - I...
 
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)
Metalkube: Deploy Kubernetes on Bare Metal - Yolanda Robla (Red Hat)
 

Recently uploaded

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?Watsoo Telematics
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutionsmonugehlot87
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 

Recently uploaded (20)

The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutions
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 

Kubernetes Administration from Zero to Hero.pdf

  • 1. Kubernetes Administration from Zero to (junior) Hero László Budai – Component Soft Ltd.
  • 2. 2 (c) 2018 Component Soft Ltd. - v1.11revdraf Agenda 1.Introduction 2.Accessing the kubernetes API 3.Kubernetes workloads 4.Accessing applications 5.Volumes and persistent storage
  • 3. 3 (c) 2018 Component Soft Ltd. - v1.11revdraf Introduction ● Cloud computing in general ● Cloud native computing ● Kubernetes overview ● Kubernetes architecture
  • 4. 4 (c) 2018 Component Soft Ltd. - v1.11revdraf Cloud computing in general ● a model for enabling ubiquitous network access to a shared pool of configurable computing resources* – resources (compute, storage, network, apps) as services ● resources are allocated on demand – scaling and removal also happens rapidly ( seconds-minutes) ● multi-tenancy – share resources among thousands of users – resource quotas – cost effective IT ● Pay-As-You-Go model – pay per hour/gigabyte instead of flat rate ● maximized effectiveness of the shared resources – maybe over-provisioning ● lower barriers to entry (nice for startups) – focus on your business instead of your infrastructure *definition by NIST
  • 5. 5 (c) 2018 Component Soft Ltd. - v1.11revdraf Cloud native computing – a new computing paradigm that is optimized for modern distributed systems environments capable of scaling to tens of thousands of self healing multi-tenant nodes. – Main properties: ● Container packaged – containers represents an isolated unit of application deployment. ● Dynamically managed - actively scheduled and actively managed by a central orchestrating process. ● Micro-services oriented - loosely coupled with dependencies explicitly described (e.g. through service endpoints).
  • 6. 6 (c) 2018 Component Soft Ltd. - v1.11revdraf Application containers – OS level virtualization – OS partitioning (virtual OS vs virtual HW) – Allows us to run multiple isolated user-space application instances in parallel. – Instances will have: ● Application code ● Required libraries ● Runtime – Self sufficient – no external dependencies – Portable – Lightweight – Immutable images Hardware Operating system Libraries, binaries Application Libraries, binaries Application Libraries, binaries Application
  • 7. 7 (c) 2018 Component Soft Ltd. - v1.11revdraf Container orchestration – tools that are providing an enterprise-level framework for integrating and managing containers at scale. – aim to simplify container management ● a framework for defining initial container deployment ● availability ● scaling ● networking – Docker Swarm – Mesosphere Marathon – Kubernetes
  • 8. 8 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes – Kubernetes – ancient Greek word for helmsman or pilot of the ship – Initially developed by google – Has its origins in Borg cluster manager – “Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.” – Places containers on nodes – Recovers from failure – Basic monitoring, logging, health checking – Enables containers to find each other
  • 9. 9 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes concepts – Kubernetes Master – maintains the desired state for the cluster – Kubernetes Node – runs the applications – Kubernetes objects - abstractions that represent the state of the cluster. ● A “record of intent” - a desired state of the cluster ● Objects have – Spec – describes its desired state – State – describes the actual state; updated by Kubernetes. – Name – client provided; unique for a kind in a namespace, can be reused – Namespaces – virtual clusters; provides a scope for names. – Labels – key-value pairs attached to objects – Label selector – is the core grouping primitive – Annotations – attach arbitrary non-identifying metadata to objects
  • 10. 10 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes objects categories – Workloads – used to manage and run the containers (Pod, ReplicationController, deployment) – Discovery & LB – "stitck" workloads together into an externally accessible, load-balanced Service (Service, Ingress). – Config & Storage – objects we can use to inject initialization data into applications, and to persist data that is external to the containers (Volume, Secret). – Metadata – objects used to configure the behavior of other resources within the cluster (LimitRange) – Cluster – objects responsible for defining the configuration of the cluster itself (Namespace, Binding)
  • 11. 11 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes architecture – Kubernetes master – Kubernetes node Kubernetes master API Server Controller Manager Scheduler etcd Kubernetes node Kubelet Kube-Proxy Pod Pod Pod Pod ... . . . Container engine Kubernetes node Kubelet Kube-Proxy Pod Pod Pod Pod ... Container engine Users Kubernetes node Devops
  • 12. 12 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes master – provide the cluster’s control plane – kube-apiserver ● Exposes the Kubernetes API – the front-end for the Kubernetes control plane. ● Designed to scale horizontally. – etcd ● Is the backing store of Kubernetes. ● Distributed key-value store – Kube-controller-manager ● background threads that handle routine tasks – Node Controller – Replication Controller – Endpoints Controller – Service Account & Token Controllers – kube-scheduler ● Assigns nodes to the newly created pods Kubernetes master API Server Controller Manager Scheduler etcd
  • 13. 13 (c) 2018 Component Soft Ltd. - v1.11revdraf Kubernetes node – kubelet - the primary node agent. It watches for pods that have been assigned to its node and: ● Mounts the pod’s required volumes. ● Downloads the pod’s secrets. ● Runs the pod’s containers. ● Periodically executes any requested container liveness probes. ● Reports the status of the pod. ● Reports the status of the node. – kube-proxy ● enables the Kubernetes service abstraction by maintaining network rules on the host and performing connection forwarding – Container engine ● Used to run the containers ● Docker by default, rkt optionally. ● Container Runtime Interface – paves the way to alternative runtimes Kubernetes node Kubelet Kube-Proxy Pod Pod ... Container engine
  • 14. 14 (c) 2018 Component Soft Ltd. - v1.11revdraf Exercise 1: The lab environment – Understanding the classroom environment – Using kubectl br_management 10.10.10.0/24 Lab machine: KVM instances master1 worker2 worker3 eth0 eth0 eth0 worker1 eth0
  • 15. 15 (c) 2018 Component Soft Ltd. - v1.11revdraf 2. Accessing the kubernetes API – Ways to access the API – Controlling access to the API – Authentication – Authorization – Role Based Access Control
  • 16. 16 (c) 2018 Component Soft Ltd. - v1.11revdraf Accessing the kubernetes cluster – kubectl – the command line tool for deploying and managing applications on kubernetes ● Inspect cluster resources ● Create, delete, update components ● Configuration file: ~/.kube/config – information for finding and accessing a cluster ● bash autocompletion – Dashboard – web based user interface (add-on) ● Manage applications ● Manage the cluster itself – Direct access to the API ● HTTP REST
  • 17. 17 (c) 2018 Component Soft Ltd. - v1.11revdraf Controlling access to the API – A request for the API will pass several stages before reaching it Authentication Authorization Admission control Resource Resource Request – Authentication – Ensures that the user it is who it pretends to be – Kubernetes has 2 categories of users: ● Service accounts – managed by kubernetes ● Normal users – managed by an independent service – API requests can be treated as anonymous ones if are not tied to a user or service account. – Kubernetes uses client certificates, bearer tokens, an authenticating proxy, or HTTP basic auth to authenticate API requests through authentication plugins.
  • 18. 18 (c) 2018 Component Soft Ltd. - v1.11revdraf Authorization – After the user authentication step the request will have to pass the authorization step. – All parts of an API request must be allowed by some policy → permissions are denied by default. – Authorization modules ● Node ● ABAC – Attribute-based access control ● RBAC – Role-based access control ● Webhook
  • 19. 19 (c) 2018 Component Soft Ltd. - v1.11revdraf Role Based Access Control – RBAC allows fine grained rules for accessing the cluster – allows dynamic configuration of policies through the Kubernetes API. – uses the “rbac.authorization.k8s.io” API group – It defines Roles and RoleBindings in order to assign permissions to subjects. – These permissions can be set ● Clusterwide – can be used for cluster-scoped resources, non-resource endpoints, namespaced resources across all namespaces ● Within a namespace. ● For one single resource. – Subjects can be users, groups, and service accounts
  • 20. 20 (c) 2018 Component Soft Ltd. - v1.11revdraf Roles and ClusterRoles – RBAC roles contains the rules that represent the permissions – Permissions are purely additive – A role can be defined within a namespace, or cluster-wide (ClusterRole) kind: Role apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] – ClusterRoles are not namespaced
  • 21. 21 (c) 2018 Component Soft Ltd. - v1.11revdraf Role bindings – Role binding grants the permissions defined in a role to a subject. – Permissions can be granted within a namespace with a RoleBinding, or cluster-wide with a ClusterRoleBinding – A RoleBinding can use a ClusterRole. The rules will apply to the namespace of the binding. kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: read-pods namespace: development subjects: - kind: User name: dave apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-pod-reader apiGroup: rbac.authorization.k8s.io
  • 22. 22 (c) 2018 Component Soft Ltd. - v1.11revdraf Exercise 2: RBAC – Use RBAC to control access to the API
  • 23. 23 (c) 2018 Component Soft Ltd. - v1.11revdraf 3. Kubernetes workloads – Pod – Replication controllers – Deployments, Replica sets – Jobs and CronJobs – DaemonSets
  • 24. 24 (c) 2018 Component Soft Ltd. - v1.11revdraf The pod – Pod - the smallest deployable object in the Kubernetes object model. – It runs a single instance of an application – Contains ● One or more application containers ● Storage resources ● A unique IP address ● Options about how the container(s) should run. – Containers in one pod are sharing the network namespace and storage resources – A pod is scheduled on a node and remains there until terminated or evicted – Pods do not self-heal by themselves → controller. Volume Pause Container1 Container2 eth0 Network Namesp ace Network
  • 25. 25 (c) 2018 Component Soft Ltd. - v1.11revdraf The pod (cont) – Pod lifecycle: ● Pending – pod has been accepted by the Kubernetes system, but one or more of the Container images has not been created. ● Running – has been bound to a node, all of the containers have been created. At least one container is still running (or starting / restarting). ● Succeeded – all containers have terminated in success, and will not be restarted ● Failed - All Containers have terminated; at least one has terminated in failure. ● Unknown – the state of the pod could not be obtained – Probes – performed by the kubelet on a Container using a handler ● Probe types – what is testing: readinessProbe, livenessProbe ● Handler Types – how is testing: ExecAction, TCPSocketAction, HTTPGetAction ● Probe result: Success, Failure, Unknown – Restart policy – restarts a pod based on the liveness test result ● restartPolicy: Always, OnFailure, Never – Pods are restarted on the same node, only controllers can schedule a new pod on a different node.
  • 26. 26 (c) 2018 Component Soft Ltd. - v1.11revdraf Our first Pod Describe the Pod using a YAML file: apiVersion: v1 kind: Pod metadata:   name: busybox spec:   restartPolicy: OnFailure   containers:    ­ name: busybox      image: busybox      command:        ­ sleep      args:        ­ "100"
  • 27. 27 (c) 2018 Component Soft Ltd. - v1.11revdraf Operations on pods – Create the pod using the kubectl command: ● kubectl create -f pod1.yaml – Check the pod status ● kubectl get pod busybox [-o wide] ● kubectl get pod --watch – Get information about the pod ● kubectl describe pod busybox ● kubectl get pod busybox -o yaml – Check the logs of a pod ● kubectl logs busybox – Execute a command inside the pod ● kubectl exec -ti busybox sh – Delete the pod ● kubectl delete pod busybox
  • 28. 28 (c) 2018 Component Soft Ltd. - v1.11revdraf ReplicaSet – The ReplicaSet controller simply ensures that the desired number of pods matches its label selector exists and are operational – If the labels of the pod are modified and they do not match the label selector, then a new pod is spawned, the old one stays there. – The ReplicaSet provide a declarative definition of what a Pod should be and how many of it should be running at a time. apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx rs1.yaml
  • 29. 29 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with ReplicaSet – Create the ReplicaSet ● kubectl create -f rs1.yaml – Check the status ● kubectl get rs [--watch] ● kubectl describe rs nginx – Change the number of replicas ● kubectl scale rs nginx --replicas=3 – Delete the ReplicaSet ● kubectl delete rs nginx
  • 30. 30 (c) 2018 Component Soft Ltd. - v1.11revdraf Deployments – A Deployment provides declarative updates for Pods and ReplicaSets – Deployment creates ReplicaSet, which creates the Pods – Updating a deployment creates new ReplicaSet and updates the revision of the deployment. – During update pods from the initial RS are scaled down, while pods from the new RS are scaled up. – Rollback to an earlier revision, will update the revision of Deployment – The --record flag of kubectl allows us to record current command in the annotations of the resources being created or updated – Strategy – how to replace the old pods ● Rolling update (default): maxUnavailable, maxSurge ● Recreate
  • 31. 31 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with Deployments – Creating a deployment ● kubectl run ghost --image=ghost --record ● kubectl create -f dep1.yaml --record ● dep1.yaml: apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  • 32. 32 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with Deployments (cont) – Check the status ● kubectl get deployment nginx [--watch] ● kubectl get deployment nginx -o yaml ● kubectl describe deployment nginx – Scale a deployment ● kubectl scale deployment nginx --replicas=4
  • 33. 33 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with Deployments (cont) – Update a deployment ● kubectl set image deployment/nginx nginx=nginx:1.7.9 --all=true ● kubectl edit deployment nginx – Check the status of a rollout ● kubectl rollout status deployment nginx ● kubectl rollout history deployment nginx – Undo a rollout ● kubectl rollout undo deployment/nginx [--to-revision=2] – Pause and resume a deployment – allows multiple changes ● kubectl rollout pause deployment/nginx ● kubectl rollout resume deployment/nginx
  • 34. 34 (c) 2018 Component Soft Ltd. - v1.11revdraf Jobs, CronJobs – A job creates one or more pods and ensures that a specified number of them successfully terminate. – Jobs can be used to reliably run a Pod to completion the specified number of times (.spec.completions) – Jobs can run multiple Pods in parallel (.spec.parallelism) – Pods in a Job can only use Never or OnFailure as their RestartPolicy – It is up to the user to delete old jobs after noting their status – Deleting a Job will delete the related Pods – If Pods are failing, the Job will create new Pods forever. The .spec.activeDeadlineSeconds will limit the time for which a Job will create new Pods. – CronJobs can create Jobs once or repeatedly at specified times – .spec.jobTemplate will specify the Job to be created – concurrencyPolicy: Allow, Forbid, Replace
  • 35. 35 (c) 2018 Component Soft Ltd. - v1.11revdraf Jobs example apiVersion: batch/v1 kind: Job metadata: name: pi spec: completions: 10 parallelism: 3 template: metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never
  • 36. 36 (c) 2018 Component Soft Ltd. - v1.11revdraf CronJobs example apiVersion: batch/v2alpha1 kind: CronJob metadata: name: cron-pi spec: schedule: "*/1 * * * *" jobTemplate: spec: completions: 10 parallelism: 3 template: metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never
  • 37. 37 (c) 2018 Component Soft Ltd. - v1.11revdraf DaemonSets – A DaemonSet ensures that all (or some) nodes run a copy of a pod – When nodes are added to the cluster, pods are added to them – When nodes are removed from the cluster, those pods are garbage collected – To run pods only on some nodes: ● .spec.template.spec.nodeSelector – pods started on nodes that match the node selector ● .spec.template.spec.affinity – pods are created on nodes that match the node affinity – If node labels are changed, the DaemonSet will promptly adapt – Deleting a DaemonSet will delete the pods (except –cascade=false) – UpdateStrategy: ● OnDelete - new pods will only be created when the old ones are manually deleted ● RollingUpdate - after you update a DaemonSet template, old pods will be killed
  • 38. 38 (c) 2018 Component Soft Ltd. - v1.11revdraf Exercise 3: Kubernetes workloads – Task 1: Working with pods – Task 2: Working with deployments
  • 39. 39 (c) 2018 Component Soft Ltd. - v1.11revdraf 4. Accessing the applications – Services
  • 40. 40 (c) 2018 Component Soft Ltd. - v1.11revdraf Services – Service – an abstraction which defines a logical set of Pods and a policy by which to access them – The service maps an incoming port to a target port – The pods targeted are defined by the selector → Endpoints – We can have services without selector → no Endpoints object is created automatically – iptables proxies depends on working readiness probes – Service discovery: ● Environment variables – are created when the pod is created → requires ordering (the service should be defined first) ● DNS – optional cluster add-on. No ordering is required.
  • 41. 41 (c) 2018 Component Soft Ltd. - v1.11revdraf Service types – ClusterIP: Exposes the service on a cluster-internal IP – only reachable from within the cluster. Default – NodePort: Exposes the service on each Node’s IP at a static port. The service will be reachable from outside the cluster using NodeIP:NodePort – LoadBalancer: Exposes the service externally using a cloud provider’s load balancer. – ExternalName: Maps the service to the contents of the externalName field, by returning a CNAME record with its value.
  • 42. 42 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with Services – Expose the ports of a deployment/RC ● kubectl expose deployment nginx --port=80 --type=NodePort – Create services from file: kind: Service apiVersion: v1 metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 80 kubectl create -f svc1.yaml
  • 43. 43 (c) 2018 Component Soft Ltd. - v1.11revdraf Working with Services – Get service information: ● kubectl get svc ● kubectl describe svc – Check service discovery ● kubectl exec -ti busybox env ● kubectl exec -ti busybox nslookup nginx – Check the iptables rules on the nodes ● iptables -t nat -L -n ● iptables -L -n
  • 44. 44 (c) 2018 Component Soft Ltd. - v1.11revdraf Exercise 4: Services – Working with services
  • 45. 45 (c) 2018 Component Soft Ltd. - v1.11revdraf 5. Persistent storage in kubernetes – Volumes – Persistent volumes and volume claims – Secrets – ConfigMaps
  • 46. 46 (c) 2018 Component Soft Ltd. - v1.11revdraf Volumes – By default the container filesystem is ephemeral – recreated each time when the container starts → a clean state each time → can be a problem for non trivial applications – A pod can have multiple containers that are sharing files. – A volume in the simplest form is just a directory which is accessible to the containers in a pod. – The type of volume determines the backend for the directory. – The pod definition specifies what volumes are provided (the spec.volumes field), and where are these mounted in the containers (the spec.containers.volumeMounts field). – The containers are independently specifying where to mount each volume (the same volume can be mounted on different path in different containers).
  • 47. 47 (c) 2018 Component Soft Ltd. - v1.11revdraf Volume example apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: gcr.io/google_containers/test-webserver name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {}
  • 48. 48 (c) 2018 Component Soft Ltd. - v1.11revdraf Volume types – Kubernetes supports several volume types: ● emptyDir – initially empty; deleted when the pod is deleted (survives crashes) ● hostPath – mounts a directory from the host into the pod. The content is host specific → pods with identical specs can behave differently on different nodes. ● gcePersistentDisk – mounts a Google Compute Engine (GCE) Persistent Disk into the pod. Content preserved on pod delete → prepopulate, data “hand off” ● awsElasticBlockStore - mounts an Amazon Web Services EBS Volume into the pod. Content preserved. ● nfs – allows an existing NFS share to be mounted into the pod. Allows multiple writers. The server should be configured. Content is preserved. ● iscsi – single writer. Can be mounted read only by multiple pods. ● glusterfs – multiple writers. ● rbd - single writer. Can be mounted read only by multiple pods. ● cephfs – multiple writers. ● secret ● persistentVolumeClaim
  • 49. 49 (c) 2018 Component Soft Ltd. - v1.11revdraf Persistent Volumes – PersistentVolume (PV) – a cluster resource that hides the details of storage implementation from the pod. ● Can be of different types (HostPath, NFS, iSCSI, RBD, … plugins) ● Are independent from the pods that are using them. – PersistentVolumeClaim (PVC) – a request for storage by a pod. ● PVCs will consume PV resources. ● PVC can request size, access mode, storage class. – StorageClass – describes the “classes” of storages ● Classes can map to quality-of-service levels, backup policies, … ● Allows for dynamic provisioning of Pvs. – The pod definition will use the PVC for defining the volumes consumed by the containers. – Dynamic provisioning is possible using the StorageClass definition. ● A StorageClass will contain the provisioner and parameter fields.
  • 50. 50 (c) 2018 Component Soft Ltd. - v1.11revdraf Persistent Volume example – First we define the PV: apiVersion: v1 kind: PersistentVolume metadata: name: nfs001 spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow nfs: path: /tmp server: 10.10.10.1
  • 51. 51 (c) 2018 Component Soft Ltd. - v1.11revdraf Persistent Volume example (cont) – We define the PVC (the claim): kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: - ReadWriteOnce resources: requests: storage: 8Gi storageClassName: slow
  • 52. 52 (c) 2018 Component Soft Ltd. - v1.11revdraf Persistent Volume example (cont) – the Pod (the consumer): kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: myclaim
  • 53. 53 (c) 2018 Component Soft Ltd. - v1.11revdraf Secrets – Secret objects are intended to hold sensitive information, such as passwords. – Safer than putting sensitive information into pod definition, or docker images. – Secrets can be used by pods as files in a volume, or injected by the kubelet. – Secrets can be created from files, or directly specifying them: ● kubectl create secret generic mysql --from-literal=password=mypasswd – Checking secrets: ● kubectl get secret mysql -o yaml
  • 54. 54 (c) 2018 Component Soft Ltd. - v1.11revdraf Using Secrets as environmental variables . . . spec: containers: - image: mysql:5.5 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql key: password
  • 55. 55 (c) 2018 Component Soft Ltd. - v1.11revdraf Using Secrets as volumes ... spec: containers: - image: busybox command: - sleep - "3600" volumeMounts: - mountPath: /mysqlpassword name: mysql name: busy volumes: - name: mysql secret: secretName: mysql ● kubectl exec -ti busybox -- cat /mysqlpassword/password
  • 56. 56 (c) 2018 Component Soft Ltd. - v1.11revdraf ConfigMaps – ConfigMap objects are intended for passing information that tends to be stored in a single config file – Can store key-value pairs, or plain configuration files ● kubectl create configmap special-config --from-literal=special.how=very ● kubectl create configmap mymap –from-file=app.conf – Check the values stored in the map ● kubectl get configmap mymap -o yaml – Passing values to pods: ● As environmental variables (part of the pod definition): env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how ● As volumes: volumes: - name: config-volume configMap: name: special-config
  • 57. 57 (c) 2018 Component Soft Ltd. - v1.11revdraf Exercise 5: Storage in Kubernetes – Use a volume in two containers