Download - Orchestrating Microservices with Kubernetes
Orchestrating Microservices with Kubernetes
Jeff Hoffer, Developer Experiencegithub.com/eudaimos
What does Weave do?
Weave helps devops iterate faster with: • observability &
monitoring • continuous delivery • container networks
& firewalls
Kubernetes is our #1 platform
Agenda1. Concepts 2. Containers, Pods, Deployments, Services 3. Installing Kubernetes 4. Demos of Pods, Deployments, Services 5. Microservices sample app 6. What’s next?
Kubernetes: all you need to know
Pods
containers
Services
Deployments
Concepts
Computer
Concepts
Node
Concepts
nginx Containerimage: nginx:1.7.9
Node
web
Concepts
nginx ContainerPod
logger
Node
web
Concepts
nginx ContainerPod
logger
IP addr
Node
web
Concepts
Pod nginx
apiVersion: v1 kind: Pod metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
Node
Recap: all you need to know
Pods containers
Container Image
Docker container image, contains your application code in an isolated environment.
Pod A set of containers, sharing network namespace and local volumes, co-scheduled on one machine. Mortal. Has pod IP. Has labels.
Motivation for Deployments
Node 1
Podweb
nginx
Node 2
Motivation for Deployments
Podweb
nginx
Node 1 Node 2
Motivation for Deployments
Podweb
nginx
Node 1 Node 2
Deployment
web
nginx
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
Node 1
Deployment
web
nginx
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
Node 1
Deployment
web
nginx
Node 1 Node 2
Deployment
web
nginx
Node 1 Node 2
Deployment
web
nginx
Node 1 Node 2
Deployment
web
nginx
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
Node 1
Deployment
web
nginx
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
Node 1
Deployment
web
nginx
web
nginx
Node 1 Node 2
Recap: all you need to know
Pods containers
Deployments
Container Image
Docker container image, contains your application code in an isolated environment.
Pod A set of containers, sharing network namespace and local volumes, co-scheduled on one machine. Mortal. Has pod IP. Has labels.
Deployment Specify how many replicas of a pod should run in a cluster. Then ensures that many are running across the cluster.
Service discovery• Kubernetes provides DNS for service
discovery
Service discovery• Kubernetes provides DNS for service
discovery
WAIT! You said “service”.
What is a service?
Services: ClusterIP (internal things)
Computer 1
web
ruby
Computer 2
10.0.0.1db
pgsql
10.0.0.2
service VIP10.1.0.1DNS lookup “db”
returns A 10.1.0.1
Services: ClusterIP (internal things)
Computer 1
web
ruby
Computer 2
10.0.0.1db
pgsql
10.0.0.2
service VIP10.1.0.1
Services: NodePort (external)
Computer 1
web
nginx
web
nginx
10.0.0.1 10.0.0.2
81.23.64.18 81.23.64.19
requests requests
Computer 2
Computer 1
web
nginx
web
nginx
10.0.0.1 10.0.0.2
81.23.64.18 81.23.64.19
requests requests
Computer 2
Services: NodePort (external)NodePort 30001service VIP10.1.0.1
NodePort 30001service VIP10.1.0.1
Computer 1
web
nginx
web
nginx
10.0.0.1 10.0.0.2
81.23.64.18 81.23.64.19
requests requests
Computer 2
Services: NodePort (external)NodePort 30001service VIP10.1.0.1
NodePort 30001service VIP10.1.0.1
kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
kind: Service metadata: name: frontend spec: type: NodePort selector: app: nginx ports: - port: 80 targetPort: 80 nodePort: 30002
Using selectorsHow do services connect to deployments?
matches
kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9
kind: Service metadata: name: frontend spec: type: NodePort selector: app: nginx ports: - port: 80 targetPort: 80 nodePort: 30002
How do you expose services to outside?Using NodePort
Recap: all you need to know
Pods containers
ServicesDeployments
Container Image
Docker container image, contains your application code in an isolated environment.
Pod A set of containers, sharing network namespace and local volumes, co-scheduled on one machine. Mortal. Has pod IP. Has labels.
Deployment Specify how many replicas of a pod should run in a cluster. Then ensures that many are running across the cluster. Has labels.
Service Names things in DNS. Gets virtual IP. Two types: ClusterIP for internal services, NodePort for publishing to outside. Routes based on labels.
Architecture of Kubernetes itself
Node 1 Node 2
Master
API server
Architecture of Kubernetes itself
Node 1 Node 2
Master
API server etcd
kubeadm init
API server
Architecture of Kubernetes itself
Node 1 Node 2
Master
API server etcd
kubeadm init
kubeadm join
kubelet
API server
Architecture of Kubernetes itself
Node 1 Node 2
Master
API server etcd
kubeadm init
kubeadm join kubeadm join
kubelet kubelet
API server
Architecture of Kubernetes itself
Node 1 Node 2
Master
API server etcd
kubeadm init
kubeadm join kubeadm join
kubelet kubelet
kubectl apply
API server
Architecture of Kubernetes itself
Node 1 Node 2
Master
containersServices
containers
API server etcd
kubeadm init
kubeadm join kubeadm join
kubectl apply
kubelet kubelet
Training!
Join the Weave user group!
meetup.com/pro/Weave/ weave.works/help
What’s next?
• Continuous delivery: hooking up my CI/CD pipeline to Kubernetes
• How do I monitor this stuff? • Network policy for security
Come to our Weave Cloud training to find out!
Thanks! Questions?
We are hiring!DX in San Francisco
Engineers in London & SF
weave.works/weave-company/hiring