SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
© 2015 Mesosphere, Inc. All Rights Reserved. 1
An Introduction to the
Kubernetes API
Dr. Stefan Schimanski, Sergiusz Urbaniak
© 2015 Mesosphere, Inc. All Rights Reserved. 2
Engineers @ Mesosphere
Working on Kubernetes-on-Mesos
https://github.com/kubernetes/kubernetes/tree/master/contrib/mesos
Who are we?
Stefan
@the1stein
sttts@github
Sergiusz
@mieszkoman
s-urbaniak@github
© 2015 Mesosphere, Inc. All Rights Reserved. 3
The company behind:
● Apache Mesos (https://mesos.apache.org/)
A distributed systems kernel.
● Marathon (https://mesosphere.github.io/marathon/)
An Apache Mesos framework
for long-running applications.
● Chronos (http://mesos.github.io/chronos/)
A distributed cron replacement.
Who/What is Mesosphere?
DCOS
(https://mesosphere.com/)
A data center operating system.
© 2015 Mesosphere, Inc. All Rights Reserved. 4
- Archeology: before and without Kubernetes
- Deployment: kube-up, DCOS, GKE
- Compute Model: the pod, the service and the controller
No whitepaper talk. We dive deep!
Next 45 Minutes
© 2015 Mesosphere, Inc. All Rights Reserved. 5
Python based agent to deploy declarative pods using Docker.
How it all started
googlearchive / container-agent
...
Kubernetes:
© 2015 Mesosphere, Inc. All Rights Reserved. 6
[...] container group defined by the manifest to share:
● Network Namespaces
● Volumes
This creates a runtime environment where:
● Containers can connect to a service running in other containers of the same group
using localhost and a fixed port.
● Containers of the same group can't run services on the same ports.
● Containers of the same group can mount shared volumes defined in the manifest.
A Pod was described as a ...
googlearchive / container-agent
© 2015 Mesosphere, Inc. All Rights Reserved. 7
[...] container group defined by the manifest to share:
● Network Namespaces
● Volumes
This creates a runtime environment where:
● Containers can connect to a service running in other containers of the same group
using localhost and a fixed port.
● Containers of the same group can't run services on the same ports.
● Containers of the same group can mount shared volumes defined in the manifest.
A Pod was described as a ...
googlearchive / container-agent Still true with
Kubernetes
© 2015 Mesosphere, Inc. All Rights Reserved. 8
$ docker run -d --name mypod busybox sleep 9999999
$ docker run -d --ipc=container:mypod --net=container:mypod
-v /tmp/mypod:/tmp/mypod
-w /tmp/mypod ubuntu python3 -m http.server 80
$ docker run -it --ipc=container:mypod --net=container:mypod
-v /tmp/mypod:/tmp/mypod
sttts/busybox-curl /bin/sh
A Pod in Docker terms:
Back to the roots
“root”, “pause” or
“infrastructure” container
“webserver”
“busybox”, our worker
© 2015 Mesosphere, Inc. All Rights Reserved. 9
● webserver container to serve the data
● busybox container to update the data:
while true; do
curl -k 'https://mobile.twitter.com/search?q=%23kubernetes%20%23hamburg&s=typd' 
> /tmp/mypod/index.html
sleep 10
done
● different OSes, resource constraints, restart policies
A little Twitter Mirror Pod mypod with IP
eth0: 192.168.66.6
lo: 127.0.0.1
webserver:80
busybox
sleep
© 2015 Mesosphere, Inc. All Rights Reserved. 10
Getting a Kubernetes cluster: mesos/docker
$ git clone git@github.com:kubernetes/kubernetes.git
$ cd kubernetes
$ build/run.sh hack/build-go.sh && make
$ KUBERNETES_PROVIDER=mesos/docker cluster/kube-up.sh
$ alias kubectl=_output/local/bin/darwin/amd64/kubectl
$ kubectl get pods
Get a Kubernetes cluster: mesos/docker with kube-up
© 2015 Mesosphere, Inc. All Rights Reserved. 11
dcos config prepend package.sources 
https://github.com/mesosphere/multiverse/archive/version-1.x.zip
dcos package install kubernetes
dcos kubectl create -f nginx.yml
pods/nginx
dcos kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 1m
Package for
Mesosphere’s
DCOS
nginx.yml:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
© 2015 Mesosphere, Inc. All Rights Reserved. 12
Google
CKontainer
Engine
● install the gcloud cli
● prepare your Google Cloud account with a project with
enabled GCE APIs, e.g. “kube-test-1154”
$ gcloud auth login
$ gcloud config set project kube-test-1154
$ gcloud config set compute/zone europe-west1-b
$ gcloud components install kubectl
$ gcloud container clusters create demo-cluster --num-nodes=2
$ gcloud config set container/cluster demo-cluster
$ kubectl get pods
© 2015 Mesosphere, Inc. All Rights Reserved. 13
$ git clone git@github.com:kubernetes/kubernetes.git
$ cd kubernetes
$ build/run.sh hack/build-go.sh && make
$ KUBERNETES_PROVIDER=mesos/docker cluster/kube-up.sh
$ alias kubectl=_output/local/bin/darwin/amd64/kubectl
$ kubectl get pods
Get a Kubernetes cluster: mesos/docker with kube-up
© 2015 Mesosphere, Inc. All Rights Reserved. 14
Same Pod in Kubernetes
$ kubectl create -f mypod.yaml
pod "mypod" created
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: webserver
image: ubuntu
workingDir: /tmp/mypod
command: ["python3", "-m", "http.server", "80"]
volumeMounts:
- name: htdocs
mountPath: /tmp/mypod
- name: busybox
image: sttts/busybox-curl
tty: true
stdin: true
volumeMounts:
- name: htdocs
mountPath: /tmp/mypod
volumes:
- name: htdocs
hostPath:
path: /tmp/mypod
© 2015 Mesosphere, Inc. All Rights Reserved. 15
Or on the wire (JSON only)
$ curl -k -u admin:admin 
https://192.168.65.39:6443/api/v1/namespaces/default/pods/mypod
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "mypod",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/pods/mypod",
"uid": "37d657dc-b47a-11e5-938a-0242c0a84127",
"resourceVersion": "5792",
"creationTimestamp": "2016-01-06T13:34:32Z",
"annotations": {
"k8s.mesosphere.io/bindingHost": "192.168.65.44",
"k8s.mesosphere.io/executorId": "cf3cd4adb282b475_k8sm-executor",
"k8s.mesosphere.io/offerId": "20160106-081826-641837248-5050-1-O3680",
"k8s.mesosphere.io/slaveId": "20160106-081826-641837248-5050-1-S1",
"k8s.mesosphere.io/taskId": "pod.380df08e-b47a-11e5-8201-0242c0a8412b"
}
},
"spec": {
"volumes": [
{
"name": "htdocs",
"hostPath": {
"path": "/tmp/mypod"
}
},
{
"name": "default-token-b3a3b",
"secret": {
● increases automatically on each modification
● mandatory to pass the old value on PUT requests
● avoids write races
© 2015 Mesosphere, Inc. All Rights Reserved. 16
Browsing the API
● open https://192.168.65.65:6443/swagger-ui/
© 2015 Mesosphere, Inc. All Rights Reserved. 17
The source of truth: api/types.go
© 2015 Mesosphere, Inc. All Rights Reserved. 18
The source of truth: A Pod Spec
© 2015 Mesosphere, Inc. All Rights Reserved. 19
The source of truth: A Container Spec
© 2015 Mesosphere, Inc. All Rights Reserved. 20
Getting the Pod IP
$ kubectl get pod mypod -o yaml
…
hostIP: 192.168.65.68
phase: Running
podIP: 192.168.66.11
startTime: 2016-01-07T08:33:55Z
$ kubectl get pod mypod -o template --template='{{.status.podIP}}'
192.168.66.12
© 2015 Mesosphere, Inc. All Rights Reserved. 21
From Pod to Pod
consumer
192.168.66.42
busybox
mypod with IP
192.168.66.6
webserver:80
busybox
pause
pause
192.168.66.6:80
mypod2 with IP
192.168.66.8
webserver:80
busybox
pause
192.168.66.8:80
● cluster routable IPs
● native ports without conflicts
● no “pod” service discovery available
© 2015 Mesosphere, Inc. All Rights Reserved. 22
A Service
consumer
192.168.66.42
busybox
mypod with IP
192.168.66.6
webserver:80
busybox
pause
pause
10.10.10.7:80
mypod2 with IP
192.168.66.8
webserver:80
busybox
pause
10.10.10.7:80
● a service as a static API object
$ kubectl create -f service.yaml
● virtual, but static IP (usually 10.x.y.z)
● no service discovery necessary
Service“mypods”withvirtualIP10.10.10.7
endpoint for
mypod
endpoint for
mypod2
192.168.66.8:80
192.168.66.6:80
brilliant
© 2015 Mesosphere, Inc. All Rights Reserved. 23
Defining a Service
$ cat mypods-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mypods
spec:
ports:
- port: 80
selector:
name: mypod
$ kubectl create -f mypods-service.yaml
service "mypods" created
$ kubectl get services
NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE
k8sm-scheduler 10.10.10.34 <none> 10251/TCP <none> 6h
kubernetes 10.10.10.1 <none> 443/TCP <none> 6h
mypods 10.10.10.32 <none> 80/TCP name=mypods 5m
● match pods with these labels
● a service without any pod is completely valid
● services exist on their own
© 2015 Mesosphere, Inc. All Rights Reserved. 24
A Service, available on each node
consumer
192.168.66.42
busybox
mypod with IP
192.168.66.6
webserver:80
busybox
pause
pause
10.10.10.7:80
mypod2 with IP
192.168.66.8
webserver:80
busybox
pause
10.10.10.7:80
Service“mypods”withvirtualIP10.10.10.7
endpoint for
mypod
endpoint for
mypod2
192.168.66.8:80
192.168.66.6:80
● Implemented by kube-proxy
○ in user-mode (simple proxy)
○ or using iptables
● on every node!
traffic from a pod is
intercepted on the host of the
pod, not the destination of the
connection.
!
node A
Note: In addition kube-proxy makes
services available for other hosts, e.
g. for internet clients
© 2015 Mesosphere, Inc. All Rights Reserved. 25
mypod with IP
192.168.66.6
webserver:80
busybox
pause
mypod2 with IP
192.168.66.8
webserver:80
busybox
pause
Service“mypods”withvirtualIP10.10.10.7
endpoint for
mypod
endpoint for
mypod2
192.168.66.8:80
192.168.66.6:80
● 1 endpoint for each matching pod of a service
● endpoint = pod-IP:port, e.g. 192.168.66.6:80
$ kubectl get endpoints kube-ui
NAME ENDPOINTS AGE
mypods 192.168.65.68:8001 2s
Service Endpoints
Special in Kuberentes-Mesos because it
runs without overlay network here. Otherwise, :80
would be visible here.
© 2015 Mesosphere, Inc. All Rights Reserved. 26
Deep dive into Linux Kernel level
$ iptables -t nat -n -L
...
Chain KUBE-PORTALS-CONTAINER (1 references)
target prot opt source destination
REDIRECT tcp -- 0.0.0.0/0 10.10.10.3 /* kube-system/kube-ui: */ tcp dpt:80 redir ports 45123
REDIRECT tcp -- 0.0.0.0/0 10.10.10.181 /* default/k8sm-scheduler: */ tcp dpt:10251 redir ports 59722
REDIRECT tcp -- 0.0.0.0/0 10.10.10.1 /* default/kubernetes: */ tcp dpt:443 redir ports 55836
REDIRECT udp -- 0.0.0.0/0 10.10.10.10 /* kube-system/kube-dns:dns */ udp dpt:53 redir ports 57016
REDIRECT tcp -- 0.0.0.0/0 10.10.10.10 /* kube-system/kube-dns:dns-tcp */ tcp dpt:53 redir ports 42340
© 2015 Mesosphere, Inc. All Rights Reserved. 27
● state consists of all API objects, stored on the API-Server
● core Kubernetes architecture principle:
logic is in control loops (“controllers”) which
● are state-less (can recover from failure)
● and decoupled (communication via API-Server)
State plus Control
read state
process
state
write state
© 2015 Mesosphere, Inc. All Rights Reserved. 28
A Control Loop to run Pods
INPUT:
REPLICAS: number of mypods that should be running
ALGORITHM
1. running := number of running pods with label name=mypod
2. If running > REPLICAS => delete some mypods
3. If REPLICAS > running => launch some mypods
4. Goto 1
© 2015 Mesosphere, Inc. All Rights Reserved. 29
REPLICAS = int(sys.argv[1])
master = os.getenv("KUBERNETES_MASTER", "http://localhost:8080")
kubeclient = toolkit.KubeHTTPClient(api_server=master, debug=False)
while True:
# count mypods
response = kubeclient.execute_operation(method="GET",
ops_path="/api/v1/namespaces/default/pods?labelSelector=name%3Dmypod")
mypods = response.json()['items']
running_mypods = len(mypods)
print "{} running".format(running_mypods)
...
Getting # of running mypods
© 2015 Mesosphere, Inc. All Rights Reserved. 30
if running_mypods > REPLICAS:
to_delete = running_mypods - REPLICAS
print " Too many are running. Deleting {} pods:".format(to_delete)
for pod in mypods[:to_delete]:
print " Deleting pod {}".format(pod['metadata']['name'])
kubeclient.delete_resource(pod['metadata']['selfLink'])
If running > REPLICAS => delete some mypods
© 2015 Mesosphere, Inc. All Rights Reserved. 31
elif REPLICAS > running_mypods:
to_launch = REPLICAS - running_mypods
for n in range(0, to_launch):
mypod_spec, _ = util.load_yaml(filename="mypod.yaml")
mypod_spec["metadata"]["name"] += "-" + shortuuid.uuid()[:4].lower()
print "Launching pod {}".format(mypod_spec["metadata"]["name"])
response = kubeclient.execute_operation(method='POST',
ops_path = "/api/v1/namespaces/default/pods",
payload = util.serialize_tojson(mypod_spec))
If REPLICAS > running => launch some mypods
© 2015 Mesosphere, Inc. All Rights Reserved. 32
$ kubectl get pods -l "name=mypod" -w --v=9
=> GET https://192.168.65.39:6443/api/v1/watch/namespaces/default/pods?
labelSelector=name%3Dmypod
{"type":"ADDED","object":{"kind":"Pod","apiVersion":"v1", ...}}
{"type":"MODIFIED","object":{"kind":"Pod","apiVersion":"v1", …}}
{"type":"DELETED","object":{"kind":"Pod","apiVersion":"v1",...}}
Watches
© 2015 Mesosphere, Inc. All Rights Reserved. 33
apiVersion: v1
kind: ReplicationController
metadata:
name: mypod
spec:
replicas: 10
selector:
name: mypod
template:
metadata:
labels:
name: mypod
spec:
containers:
- name: webserver
image: ubuntu
...
$ kubectl create -f mypod-rc.yaml
$ kubectl scale --replicas=5 rc/mypod
Kubernetes Replication Controllers
© 2015 Mesosphere, Inc. All Rights Reserved. 34
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: mypod
spec:
selector:
name: mypod
template:
metadata:
labels:
name: mypod
spec:
nodeSelector:
env=dmz
containers:
- name: webserver
image: ubuntu
...
● DaemonSets run pods once per node
● MyCassandraController might run Cassandra instances
● MyGaleraController might run MySQL Galera instances
● MyHaproxyUpdateController might write haproxy.conf
● MyNodeUpdateController might do rolling security
updates on nodes or of containers
● MyBitcoinScheduler might schedule bitcoin pods for
spare resources
Other Controllers
© 2015 Mesosphere, Inc. All Rights Reserved. 35
Today’s Architecture
etcd apiserver
controller-manager
scheduler
node controller
endpoint controller
kube-proxy
kube-proxy
kube-proxy
kubelet
kubelet
kubelet
replication controller
daemonset controller
service controller
token controller
resource quota
controller
persistent volume
controller
service account
controller
...
© 2015 Mesosphere, Inc. All Rights Reserved. 36
Of course: we are hiring in Hamburg, Berlin & San Francisco!

Contenu connexe

Tendances

Git deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesGit deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesStefan Schimanski
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysCarlos Sanchez
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMartin Etmajer
 
Tectonic Summit 2016: Kubernetes 1.5 and Beyond
Tectonic Summit 2016: Kubernetes 1.5 and BeyondTectonic Summit 2016: Kubernetes 1.5 and Beyond
Tectonic Summit 2016: Kubernetes 1.5 and BeyondCoreOS
 
Extend and build on Kubernetes
Extend and build on KubernetesExtend and build on Kubernetes
Extend and build on KubernetesStefan Schimanski
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with KubernetesCarlos Sanchez
 
Package your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and KubernetesPackage your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and KubernetesArun Gupta
 
Kubernetes Hands-On Guide
Kubernetes Hands-On GuideKubernetes Hands-On Guide
Kubernetes Hands-On GuideStratoscale
 
Cluster management with Kubernetes
Cluster management with KubernetesCluster management with Kubernetes
Cluster management with KubernetesSatnam Singh
 
Meetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend itMeetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend itStefan Schimanski
 
Managing Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesManaging Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesMarc Sluiter
 
A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsRamit Surana
 
Scaling docker with kubernetes
Scaling docker with kubernetesScaling docker with kubernetes
Scaling docker with kubernetesLiran Cohen
 
Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2Hao H. Zhang
 
From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)佑介 九岡
 
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...KubeAcademy
 
Microservices at scale with docker and kubernetes - AMS JUG 2017
Microservices at scale with docker and kubernetes - AMS JUG 2017Microservices at scale with docker and kubernetes - AMS JUG 2017
Microservices at scale with docker and kubernetes - AMS JUG 2017Arjen Wassink
 
Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Vishnu Kannan
 

Tendances (20)

Git deep dive – chopping Kubernetes
Git deep dive – chopping KubernetesGit deep dive – chopping Kubernetes
Git deep dive – chopping Kubernetes
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on Kubernetes
 
Tectonic Summit 2016: Kubernetes 1.5 and Beyond
Tectonic Summit 2016: Kubernetes 1.5 and BeyondTectonic Summit 2016: Kubernetes 1.5 and Beyond
Tectonic Summit 2016: Kubernetes 1.5 and Beyond
 
Extend and build on Kubernetes
Extend and build on KubernetesExtend and build on Kubernetes
Extend and build on Kubernetes
 
Scaling Docker with Kubernetes
Scaling Docker with KubernetesScaling Docker with Kubernetes
Scaling Docker with Kubernetes
 
Kubernetes Node Deep Dive
Kubernetes Node Deep DiveKubernetes Node Deep Dive
Kubernetes Node Deep Dive
 
Package your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and KubernetesPackage your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and Kubernetes
 
Kubernetes Hands-On Guide
Kubernetes Hands-On GuideKubernetes Hands-On Guide
Kubernetes Hands-On Guide
 
Cluster management with Kubernetes
Cluster management with KubernetesCluster management with Kubernetes
Cluster management with Kubernetes
 
Meetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend itMeetup - Principles of the kube api and how to extend it
Meetup - Principles of the kube api and how to extend it
 
Managing Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing KubernetesManaging Docker Containers In A Cluster - Introducing Kubernetes
Managing Docker Containers In A Cluster - Introducing Kubernetes
 
A brief study on Kubernetes and its components
A brief study on Kubernetes and its componentsA brief study on Kubernetes and its components
A brief study on Kubernetes and its components
 
Kubernetes 101 Workshop
Kubernetes 101 WorkshopKubernetes 101 Workshop
Kubernetes 101 Workshop
 
Scaling docker with kubernetes
Scaling docker with kubernetesScaling docker with kubernetes
Scaling docker with kubernetes
 
Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2Kubernetes Architecture - beyond a black box - Part 2
Kubernetes Architecture - beyond a black box - Part 2
 
From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)From dev to prod: Kubernetes on AWS (short ver.)
From dev to prod: Kubernetes on AWS (short ver.)
 
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
KubeCon EU 2016: Templatized Application Configuration on OpenShift and Kuber...
 
Microservices at scale with docker and kubernetes - AMS JUG 2017
Microservices at scale with docker and kubernetes - AMS JUG 2017Microservices at scale with docker and kubernetes - AMS JUG 2017
Microservices at scale with docker and kubernetes - AMS JUG 2017
 
Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10Kubernetes deep dive - - Huawei 2015-10
Kubernetes deep dive - - Huawei 2015-10
 

En vedette

Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes MeetupKubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes MeetupStefan Schimanski
 
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App FactoryRevolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App FactoryImesh Gunaratne
 
Kubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionKubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionStefan Schimanski
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesSreenivas Makam
 
Introducing Apple iPhone 6
Introducing Apple iPhone 6Introducing Apple iPhone 6
Introducing Apple iPhone 6JJ Wu
 
Technical introduction to MidoNet
Technical introduction to MidoNetTechnical introduction to MidoNet
Technical introduction to MidoNetMidoNet
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerJean-Baptiste Claramonte
 
Building a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersBuilding a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersaslomibm
 
Self Heal Your OpenStack Control Plane!
Self Heal Your OpenStack Control Plane!Self Heal Your OpenStack Control Plane!
Self Heal Your OpenStack Control Plane!Shixiong Shang
 
Docker Meetup - Melbourne 2015 - Kubernetes Deep Dive
Docker Meetup - Melbourne 2015 - Kubernetes Deep DiveDocker Meetup - Melbourne 2015 - Kubernetes Deep Dive
Docker Meetup - Melbourne 2015 - Kubernetes Deep DiveKen Thompson
 
Building Clustered Applications with Kubernetes and Docker
Building Clustered Applications with Kubernetes and DockerBuilding Clustered Applications with Kubernetes and Docker
Building Clustered Applications with Kubernetes and DockerSteve Watt
 
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)Andrew Randall
 
Openstack Magnum: Container-as-a-Service
Openstack Magnum: Container-as-a-ServiceOpenstack Magnum: Container-as-a-Service
Openstack Magnum: Container-as-a-ServiceChhavi Agarwal
 
Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)Publicis Sapient Engineering
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersArun Gupta
 

En vedette (20)

Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes MeetupKubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App FactoryRevolutionizing WSO2 PaaS with Kubernetes & App Factory
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
 
Kubernetes Architecture and Introduction
Kubernetes Architecture and IntroductionKubernetes Architecture and Introduction
Kubernetes Architecture and Introduction
 
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and KubernetesService Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
 
Introducing Apple iPhone 6
Introducing Apple iPhone 6Introducing Apple iPhone 6
Introducing Apple iPhone 6
 
Technical introduction to MidoNet
Technical introduction to MidoNetTechnical introduction to MidoNet
Technical introduction to MidoNet
 
Docker. General overview
Docker. General overviewDocker. General overview
Docker. General overview
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Building a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containersBuilding a multi-tenant cloud service from legacy code with Docker containers
Building a multi-tenant cloud service from legacy code with Docker containers
 
Self Heal Your OpenStack Control Plane!
Self Heal Your OpenStack Control Plane!Self Heal Your OpenStack Control Plane!
Self Heal Your OpenStack Control Plane!
 
Docker Meetup - Melbourne 2015 - Kubernetes Deep Dive
Docker Meetup - Melbourne 2015 - Kubernetes Deep DiveDocker Meetup - Melbourne 2015 - Kubernetes Deep Dive
Docker Meetup - Melbourne 2015 - Kubernetes Deep Dive
 
Building Clustered Applications with Kubernetes and Docker
Building Clustered Applications with Kubernetes and DockerBuilding Clustered Applications with Kubernetes and Docker
Building Clustered Applications with Kubernetes and Docker
 
Multi tenancy for docker
Multi tenancy for dockerMulti tenancy for docker
Multi tenancy for docker
 
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
Container Networking: the Gotchas (Mesos London Meetup 11 May 2016)
 
Openstack Magnum: Container-as-a-Service
Openstack Magnum: Container-as-a-ServiceOpenstack Magnum: Container-as-a-Service
Openstack Magnum: Container-as-a-Service
 
Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)Paris Container Day 2016 : Etcd - overview and future (CoreOS)
Paris Container Day 2016 : Etcd - overview and future (CoreOS)
 
Elastic etcd
Elastic etcdElastic etcd
Elastic etcd
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developers
 
Xebicon'16 : Comment j'ai piloté mon train ?
Xebicon'16 : Comment j'ai piloté mon train ?Xebicon'16 : Comment j'ai piloté mon train ?
Xebicon'16 : Comment j'ai piloté mon train ?
 

Similaire à An Introduction to the Kubernetes API

Build Your Own CaaS (Container as a Service)
Build Your Own CaaS (Container as a Service)Build Your Own CaaS (Container as a Service)
Build Your Own CaaS (Container as a Service)HungWei Chiu
 
Kubernetes for the PHP developer
Kubernetes for the PHP developerKubernetes for the PHP developer
Kubernetes for the PHP developerPaul Czarkowski
 
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 + Python = ❤ - Cloud Native Prague
Kubernetes + Python = ❤ - Cloud Native PragueKubernetes + Python = ❤ - Cloud Native Prague
Kubernetes + Python = ❤ - Cloud Native PragueHenning Jacobs
 
Kubernetes extensibility
Kubernetes extensibilityKubernetes extensibility
Kubernetes extensibilityDocker, Inc.
 
Kubernetes - Sailing a Sea of Containers
Kubernetes - Sailing a Sea of ContainersKubernetes - Sailing a Sea of Containers
Kubernetes - Sailing a Sea of ContainersKel Cecil
 
JDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul BakkerJDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul BakkerPROIDEA
 
Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Inhye Park
 
Exploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonExploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonIvan Ma
 
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...
Kubernetes Cluster API - managing the infrastructure of  multi clusters (k8s ...Kubernetes Cluster API - managing the infrastructure of  multi clusters (k8s ...
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...Tobias Schneck
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to KubernetesPaul Czarkowski
 
Kubernetes - Starting with 1.2
Kubernetes  - Starting with 1.2Kubernetes  - Starting with 1.2
Kubernetes - Starting with 1.2William Stewart
 
Kubernetes workshop -_the_basics
Kubernetes workshop -_the_basicsKubernetes workshop -_the_basics
Kubernetes workshop -_the_basicsSjuul Janssen
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to KubernetesPaul Czarkowski
 
Lifecycle of a pod
Lifecycle of a podLifecycle of a pod
Lifecycle of a podHarshal Shah
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes IntroductionEric Gustafson
 
It's not too late to learn about k8s
It's not too late to learn about k8sIt's not too late to learn about k8s
It's not too late to learn about k8sCesar Tron-Lozai
 

Similaire à An Introduction to the Kubernetes API (20)

Build Your Own CaaS (Container as a Service)
Build Your Own CaaS (Container as a Service)Build Your Own CaaS (Container as a Service)
Build Your Own CaaS (Container as a Service)
 
Kubernetes for the PHP developer
Kubernetes for the PHP developerKubernetes for the PHP developer
Kubernetes for the PHP developer
 
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 + Python = ❤ - Cloud Native Prague
Kubernetes + Python = ❤ - Cloud Native PragueKubernetes + Python = ❤ - Cloud Native Prague
Kubernetes + Python = ❤ - Cloud Native Prague
 
Kubernetes extensibility
Kubernetes extensibilityKubernetes extensibility
Kubernetes extensibility
 
Kubernetes - Sailing a Sea of Containers
Kubernetes - Sailing a Sea of ContainersKubernetes - Sailing a Sea of Containers
Kubernetes - Sailing a Sea of Containers
 
JDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul BakkerJDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul Bakker
 
Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307Docker kubernetes fundamental(pod_service)_190307
Docker kubernetes fundamental(pod_service)_190307
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Exploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonExploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in Python
 
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...
Kubernetes Cluster API - managing the infrastructure of  multi clusters (k8s ...Kubernetes Cluster API - managing the infrastructure of  multi clusters (k8s ...
Kubernetes Cluster API - managing the infrastructure of multi clusters (k8s ...
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
Kubernetes security
Kubernetes securityKubernetes security
Kubernetes security
 
Kubernetes - Starting with 1.2
Kubernetes  - Starting with 1.2Kubernetes  - Starting with 1.2
Kubernetes - Starting with 1.2
 
Kubernetes workshop -_the_basics
Kubernetes workshop -_the_basicsKubernetes workshop -_the_basics
Kubernetes workshop -_the_basics
 
kubernetes for beginners
kubernetes for beginnerskubernetes for beginners
kubernetes for beginners
 
A DevOps guide to Kubernetes
A DevOps guide to KubernetesA DevOps guide to Kubernetes
A DevOps guide to Kubernetes
 
Lifecycle of a pod
Lifecycle of a podLifecycle of a pod
Lifecycle of a pod
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
It's not too late to learn about k8s
It's not too late to learn about k8sIt's not too late to learn about k8s
It's not too late to learn about k8s
 

Plus de Stefan Schimanski

Cutting the Kubernetes Monorepo in pieces
Cutting the Kubernetes Monorepo in piecesCutting the Kubernetes Monorepo in pieces
Cutting the Kubernetes Monorepo in piecesStefan Schimanski
 
Kubernetes API code-base tour
Kubernetes API code-base tourKubernetes API code-base tour
Kubernetes API code-base tourStefan Schimanski
 
Extending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooksExtending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooksStefan Schimanski
 
KubeCon EU 2018 – Sig API Machinery Deep Dive
KubeCon EU 2018 – Sig API Machinery Deep DiveKubeCon EU 2018 – Sig API Machinery Deep Dive
KubeCon EU 2018 – Sig API Machinery Deep DiveStefan Schimanski
 
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about gitCutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about gitStefan Schimanski
 
Kubernetes API - deep dive into the kube-apiserver
Kubernetes API - deep dive into the kube-apiserverKubernetes API - deep dive into the kube-apiserver
Kubernetes API - deep dive into the kube-apiserverStefan Schimanski
 
Kubernetes on Top of Mesos on Top of DCOS
Kubernetes on Top of Mesos on Top of DCOSKubernetes on Top of Mesos on Top of DCOS
Kubernetes on Top of Mesos on Top of DCOSStefan Schimanski
 

Plus de Stefan Schimanski (8)

Cutting the Kubernetes Monorepo in pieces
Cutting the Kubernetes Monorepo in piecesCutting the Kubernetes Monorepo in pieces
Cutting the Kubernetes Monorepo in pieces
 
Kubernetes API code-base tour
Kubernetes API code-base tourKubernetes API code-base tour
Kubernetes API code-base tour
 
Extending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooksExtending Kubernetes – Admission webhooks
Extending Kubernetes – Admission webhooks
 
KubeCon EU 2018 – Sig API Machinery Deep Dive
KubeCon EU 2018 – Sig API Machinery Deep DiveKubeCon EU 2018 – Sig API Machinery Deep Dive
KubeCon EU 2018 – Sig API Machinery Deep Dive
 
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about gitCutting the Kubernetes Monorepo in pieces – never learnt more about git
Cutting the Kubernetes Monorepo in pieces – never learnt more about git
 
Extending the Kube API
Extending the Kube APIExtending the Kube API
Extending the Kube API
 
Kubernetes API - deep dive into the kube-apiserver
Kubernetes API - deep dive into the kube-apiserverKubernetes API - deep dive into the kube-apiserver
Kubernetes API - deep dive into the kube-apiserver
 
Kubernetes on Top of Mesos on Top of DCOS
Kubernetes on Top of Mesos on Top of DCOSKubernetes on Top of Mesos on Top of DCOS
Kubernetes on Top of Mesos on Top of DCOS
 

Dernier

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 

Dernier (20)

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

An Introduction to the Kubernetes API

  • 1. © 2015 Mesosphere, Inc. All Rights Reserved. 1 An Introduction to the Kubernetes API Dr. Stefan Schimanski, Sergiusz Urbaniak
  • 2. © 2015 Mesosphere, Inc. All Rights Reserved. 2 Engineers @ Mesosphere Working on Kubernetes-on-Mesos https://github.com/kubernetes/kubernetes/tree/master/contrib/mesos Who are we? Stefan @the1stein sttts@github Sergiusz @mieszkoman s-urbaniak@github
  • 3. © 2015 Mesosphere, Inc. All Rights Reserved. 3 The company behind: ● Apache Mesos (https://mesos.apache.org/) A distributed systems kernel. ● Marathon (https://mesosphere.github.io/marathon/) An Apache Mesos framework for long-running applications. ● Chronos (http://mesos.github.io/chronos/) A distributed cron replacement. Who/What is Mesosphere? DCOS (https://mesosphere.com/) A data center operating system.
  • 4. © 2015 Mesosphere, Inc. All Rights Reserved. 4 - Archeology: before and without Kubernetes - Deployment: kube-up, DCOS, GKE - Compute Model: the pod, the service and the controller No whitepaper talk. We dive deep! Next 45 Minutes
  • 5. © 2015 Mesosphere, Inc. All Rights Reserved. 5 Python based agent to deploy declarative pods using Docker. How it all started googlearchive / container-agent ... Kubernetes:
  • 6. © 2015 Mesosphere, Inc. All Rights Reserved. 6 [...] container group defined by the manifest to share: ● Network Namespaces ● Volumes This creates a runtime environment where: ● Containers can connect to a service running in other containers of the same group using localhost and a fixed port. ● Containers of the same group can't run services on the same ports. ● Containers of the same group can mount shared volumes defined in the manifest. A Pod was described as a ... googlearchive / container-agent
  • 7. © 2015 Mesosphere, Inc. All Rights Reserved. 7 [...] container group defined by the manifest to share: ● Network Namespaces ● Volumes This creates a runtime environment where: ● Containers can connect to a service running in other containers of the same group using localhost and a fixed port. ● Containers of the same group can't run services on the same ports. ● Containers of the same group can mount shared volumes defined in the manifest. A Pod was described as a ... googlearchive / container-agent Still true with Kubernetes
  • 8. © 2015 Mesosphere, Inc. All Rights Reserved. 8 $ docker run -d --name mypod busybox sleep 9999999 $ docker run -d --ipc=container:mypod --net=container:mypod -v /tmp/mypod:/tmp/mypod -w /tmp/mypod ubuntu python3 -m http.server 80 $ docker run -it --ipc=container:mypod --net=container:mypod -v /tmp/mypod:/tmp/mypod sttts/busybox-curl /bin/sh A Pod in Docker terms: Back to the roots “root”, “pause” or “infrastructure” container “webserver” “busybox”, our worker
  • 9. © 2015 Mesosphere, Inc. All Rights Reserved. 9 ● webserver container to serve the data ● busybox container to update the data: while true; do curl -k 'https://mobile.twitter.com/search?q=%23kubernetes%20%23hamburg&s=typd' > /tmp/mypod/index.html sleep 10 done ● different OSes, resource constraints, restart policies A little Twitter Mirror Pod mypod with IP eth0: 192.168.66.6 lo: 127.0.0.1 webserver:80 busybox sleep
  • 10. © 2015 Mesosphere, Inc. All Rights Reserved. 10 Getting a Kubernetes cluster: mesos/docker $ git clone git@github.com:kubernetes/kubernetes.git $ cd kubernetes $ build/run.sh hack/build-go.sh && make $ KUBERNETES_PROVIDER=mesos/docker cluster/kube-up.sh $ alias kubectl=_output/local/bin/darwin/amd64/kubectl $ kubectl get pods Get a Kubernetes cluster: mesos/docker with kube-up
  • 11. © 2015 Mesosphere, Inc. All Rights Reserved. 11 dcos config prepend package.sources https://github.com/mesosphere/multiverse/archive/version-1.x.zip dcos package install kubernetes dcos kubectl create -f nginx.yml pods/nginx dcos kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 1m Package for Mesosphere’s DCOS nginx.yml: apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
  • 12. © 2015 Mesosphere, Inc. All Rights Reserved. 12 Google CKontainer Engine ● install the gcloud cli ● prepare your Google Cloud account with a project with enabled GCE APIs, e.g. “kube-test-1154” $ gcloud auth login $ gcloud config set project kube-test-1154 $ gcloud config set compute/zone europe-west1-b $ gcloud components install kubectl $ gcloud container clusters create demo-cluster --num-nodes=2 $ gcloud config set container/cluster demo-cluster $ kubectl get pods
  • 13. © 2015 Mesosphere, Inc. All Rights Reserved. 13 $ git clone git@github.com:kubernetes/kubernetes.git $ cd kubernetes $ build/run.sh hack/build-go.sh && make $ KUBERNETES_PROVIDER=mesos/docker cluster/kube-up.sh $ alias kubectl=_output/local/bin/darwin/amd64/kubectl $ kubectl get pods Get a Kubernetes cluster: mesos/docker with kube-up
  • 14. © 2015 Mesosphere, Inc. All Rights Reserved. 14 Same Pod in Kubernetes $ kubectl create -f mypod.yaml pod "mypod" created apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: webserver image: ubuntu workingDir: /tmp/mypod command: ["python3", "-m", "http.server", "80"] volumeMounts: - name: htdocs mountPath: /tmp/mypod - name: busybox image: sttts/busybox-curl tty: true stdin: true volumeMounts: - name: htdocs mountPath: /tmp/mypod volumes: - name: htdocs hostPath: path: /tmp/mypod
  • 15. © 2015 Mesosphere, Inc. All Rights Reserved. 15 Or on the wire (JSON only) $ curl -k -u admin:admin https://192.168.65.39:6443/api/v1/namespaces/default/pods/mypod { "kind": "Pod", "apiVersion": "v1", "metadata": { "name": "mypod", "namespace": "default", "selfLink": "/api/v1/namespaces/default/pods/mypod", "uid": "37d657dc-b47a-11e5-938a-0242c0a84127", "resourceVersion": "5792", "creationTimestamp": "2016-01-06T13:34:32Z", "annotations": { "k8s.mesosphere.io/bindingHost": "192.168.65.44", "k8s.mesosphere.io/executorId": "cf3cd4adb282b475_k8sm-executor", "k8s.mesosphere.io/offerId": "20160106-081826-641837248-5050-1-O3680", "k8s.mesosphere.io/slaveId": "20160106-081826-641837248-5050-1-S1", "k8s.mesosphere.io/taskId": "pod.380df08e-b47a-11e5-8201-0242c0a8412b" } }, "spec": { "volumes": [ { "name": "htdocs", "hostPath": { "path": "/tmp/mypod" } }, { "name": "default-token-b3a3b", "secret": { ● increases automatically on each modification ● mandatory to pass the old value on PUT requests ● avoids write races
  • 16. © 2015 Mesosphere, Inc. All Rights Reserved. 16 Browsing the API ● open https://192.168.65.65:6443/swagger-ui/
  • 17. © 2015 Mesosphere, Inc. All Rights Reserved. 17 The source of truth: api/types.go
  • 18. © 2015 Mesosphere, Inc. All Rights Reserved. 18 The source of truth: A Pod Spec
  • 19. © 2015 Mesosphere, Inc. All Rights Reserved. 19 The source of truth: A Container Spec
  • 20. © 2015 Mesosphere, Inc. All Rights Reserved. 20 Getting the Pod IP $ kubectl get pod mypod -o yaml … hostIP: 192.168.65.68 phase: Running podIP: 192.168.66.11 startTime: 2016-01-07T08:33:55Z $ kubectl get pod mypod -o template --template='{{.status.podIP}}' 192.168.66.12
  • 21. © 2015 Mesosphere, Inc. All Rights Reserved. 21 From Pod to Pod consumer 192.168.66.42 busybox mypod with IP 192.168.66.6 webserver:80 busybox pause pause 192.168.66.6:80 mypod2 with IP 192.168.66.8 webserver:80 busybox pause 192.168.66.8:80 ● cluster routable IPs ● native ports without conflicts ● no “pod” service discovery available
  • 22. © 2015 Mesosphere, Inc. All Rights Reserved. 22 A Service consumer 192.168.66.42 busybox mypod with IP 192.168.66.6 webserver:80 busybox pause pause 10.10.10.7:80 mypod2 with IP 192.168.66.8 webserver:80 busybox pause 10.10.10.7:80 ● a service as a static API object $ kubectl create -f service.yaml ● virtual, but static IP (usually 10.x.y.z) ● no service discovery necessary Service“mypods”withvirtualIP10.10.10.7 endpoint for mypod endpoint for mypod2 192.168.66.8:80 192.168.66.6:80 brilliant
  • 23. © 2015 Mesosphere, Inc. All Rights Reserved. 23 Defining a Service $ cat mypods-service.yaml apiVersion: v1 kind: Service metadata: name: mypods spec: ports: - port: 80 selector: name: mypod $ kubectl create -f mypods-service.yaml service "mypods" created $ kubectl get services NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE k8sm-scheduler 10.10.10.34 <none> 10251/TCP <none> 6h kubernetes 10.10.10.1 <none> 443/TCP <none> 6h mypods 10.10.10.32 <none> 80/TCP name=mypods 5m ● match pods with these labels ● a service without any pod is completely valid ● services exist on their own
  • 24. © 2015 Mesosphere, Inc. All Rights Reserved. 24 A Service, available on each node consumer 192.168.66.42 busybox mypod with IP 192.168.66.6 webserver:80 busybox pause pause 10.10.10.7:80 mypod2 with IP 192.168.66.8 webserver:80 busybox pause 10.10.10.7:80 Service“mypods”withvirtualIP10.10.10.7 endpoint for mypod endpoint for mypod2 192.168.66.8:80 192.168.66.6:80 ● Implemented by kube-proxy ○ in user-mode (simple proxy) ○ or using iptables ● on every node! traffic from a pod is intercepted on the host of the pod, not the destination of the connection. ! node A Note: In addition kube-proxy makes services available for other hosts, e. g. for internet clients
  • 25. © 2015 Mesosphere, Inc. All Rights Reserved. 25 mypod with IP 192.168.66.6 webserver:80 busybox pause mypod2 with IP 192.168.66.8 webserver:80 busybox pause Service“mypods”withvirtualIP10.10.10.7 endpoint for mypod endpoint for mypod2 192.168.66.8:80 192.168.66.6:80 ● 1 endpoint for each matching pod of a service ● endpoint = pod-IP:port, e.g. 192.168.66.6:80 $ kubectl get endpoints kube-ui NAME ENDPOINTS AGE mypods 192.168.65.68:8001 2s Service Endpoints Special in Kuberentes-Mesos because it runs without overlay network here. Otherwise, :80 would be visible here.
  • 26. © 2015 Mesosphere, Inc. All Rights Reserved. 26 Deep dive into Linux Kernel level $ iptables -t nat -n -L ... Chain KUBE-PORTALS-CONTAINER (1 references) target prot opt source destination REDIRECT tcp -- 0.0.0.0/0 10.10.10.3 /* kube-system/kube-ui: */ tcp dpt:80 redir ports 45123 REDIRECT tcp -- 0.0.0.0/0 10.10.10.181 /* default/k8sm-scheduler: */ tcp dpt:10251 redir ports 59722 REDIRECT tcp -- 0.0.0.0/0 10.10.10.1 /* default/kubernetes: */ tcp dpt:443 redir ports 55836 REDIRECT udp -- 0.0.0.0/0 10.10.10.10 /* kube-system/kube-dns:dns */ udp dpt:53 redir ports 57016 REDIRECT tcp -- 0.0.0.0/0 10.10.10.10 /* kube-system/kube-dns:dns-tcp */ tcp dpt:53 redir ports 42340
  • 27. © 2015 Mesosphere, Inc. All Rights Reserved. 27 ● state consists of all API objects, stored on the API-Server ● core Kubernetes architecture principle: logic is in control loops (“controllers”) which ● are state-less (can recover from failure) ● and decoupled (communication via API-Server) State plus Control read state process state write state
  • 28. © 2015 Mesosphere, Inc. All Rights Reserved. 28 A Control Loop to run Pods INPUT: REPLICAS: number of mypods that should be running ALGORITHM 1. running := number of running pods with label name=mypod 2. If running > REPLICAS => delete some mypods 3. If REPLICAS > running => launch some mypods 4. Goto 1
  • 29. © 2015 Mesosphere, Inc. All Rights Reserved. 29 REPLICAS = int(sys.argv[1]) master = os.getenv("KUBERNETES_MASTER", "http://localhost:8080") kubeclient = toolkit.KubeHTTPClient(api_server=master, debug=False) while True: # count mypods response = kubeclient.execute_operation(method="GET", ops_path="/api/v1/namespaces/default/pods?labelSelector=name%3Dmypod") mypods = response.json()['items'] running_mypods = len(mypods) print "{} running".format(running_mypods) ... Getting # of running mypods
  • 30. © 2015 Mesosphere, Inc. All Rights Reserved. 30 if running_mypods > REPLICAS: to_delete = running_mypods - REPLICAS print " Too many are running. Deleting {} pods:".format(to_delete) for pod in mypods[:to_delete]: print " Deleting pod {}".format(pod['metadata']['name']) kubeclient.delete_resource(pod['metadata']['selfLink']) If running > REPLICAS => delete some mypods
  • 31. © 2015 Mesosphere, Inc. All Rights Reserved. 31 elif REPLICAS > running_mypods: to_launch = REPLICAS - running_mypods for n in range(0, to_launch): mypod_spec, _ = util.load_yaml(filename="mypod.yaml") mypod_spec["metadata"]["name"] += "-" + shortuuid.uuid()[:4].lower() print "Launching pod {}".format(mypod_spec["metadata"]["name"]) response = kubeclient.execute_operation(method='POST', ops_path = "/api/v1/namespaces/default/pods", payload = util.serialize_tojson(mypod_spec)) If REPLICAS > running => launch some mypods
  • 32. © 2015 Mesosphere, Inc. All Rights Reserved. 32 $ kubectl get pods -l "name=mypod" -w --v=9 => GET https://192.168.65.39:6443/api/v1/watch/namespaces/default/pods? labelSelector=name%3Dmypod {"type":"ADDED","object":{"kind":"Pod","apiVersion":"v1", ...}} {"type":"MODIFIED","object":{"kind":"Pod","apiVersion":"v1", …}} {"type":"DELETED","object":{"kind":"Pod","apiVersion":"v1",...}} Watches
  • 33. © 2015 Mesosphere, Inc. All Rights Reserved. 33 apiVersion: v1 kind: ReplicationController metadata: name: mypod spec: replicas: 10 selector: name: mypod template: metadata: labels: name: mypod spec: containers: - name: webserver image: ubuntu ... $ kubectl create -f mypod-rc.yaml $ kubectl scale --replicas=5 rc/mypod Kubernetes Replication Controllers
  • 34. © 2015 Mesosphere, Inc. All Rights Reserved. 34 apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: mypod spec: selector: name: mypod template: metadata: labels: name: mypod spec: nodeSelector: env=dmz containers: - name: webserver image: ubuntu ... ● DaemonSets run pods once per node ● MyCassandraController might run Cassandra instances ● MyGaleraController might run MySQL Galera instances ● MyHaproxyUpdateController might write haproxy.conf ● MyNodeUpdateController might do rolling security updates on nodes or of containers ● MyBitcoinScheduler might schedule bitcoin pods for spare resources Other Controllers
  • 35. © 2015 Mesosphere, Inc. All Rights Reserved. 35 Today’s Architecture etcd apiserver controller-manager scheduler node controller endpoint controller kube-proxy kube-proxy kube-proxy kubelet kubelet kubelet replication controller daemonset controller service controller token controller resource quota controller persistent volume controller service account controller ...
  • 36. © 2015 Mesosphere, Inc. All Rights Reserved. 36 Of course: we are hiring in Hamburg, Berlin & San Francisco!