Slide 1

Slide 1 text

Application Automation with Habitat Nathen Harvey – [email protected] - @nathenharvey Nicole Johnson – [email protected] - @_ncjohnson

Slide 2

Slide 2 text

• 1515 – Welcome! • 1530 - Modern applications, modern teams • 1545 - Running a Habitat Application • 1630 - Next steps and wrap-up Agenda

Slide 3

Slide 3 text

• Describe Habitat • Run an application with Habitat • Join the Habitat Community • Share your experience Goals for today

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

We Run Infrastructure To Run Applications That the Business Requires

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Monolith Application Application Services

Slide 9

Slide 9 text

Monolith Microservices Application Application Services

Slide 10

Slide 10 text

Monolith Serverless Microservices Application Application Services

Slide 11

Slide 11 text

Monolith Serverless Microservices Application Application Services Centralized Highly Distributed

Slide 12

Slide 12 text

Monolith Serverless Microservices Application Application Services Few Large Artifacts Thousands of Small Artifacts

Slide 13

Slide 13 text

Application Services What Developers Need Application Runtimes

Slide 14

Slide 14 text

Application Services What Developers Need Want Application Runtimes

Slide 15

Slide 15 text

https://twitter.com/codinghorror/status/347070841059692545 What Developers Need Want Build

Slide 16

Slide 16 text

Heterogeneity is the #1 stumbling block to velocity. Sprawl of management tools is the biggest challenge facing modern IT teams. Current approaches start upside-down: with the OS and not the app. The core of the problem: application management

Slide 17

Slide 17 text

Lifecycle of any software Build Deploy Run

Slide 18

Slide 18 text

Runtime Concerns •  Application supervision •  Service discovery •  Application configuration •  Topology •  Updates •  Orchestration

Slide 19

Slide 19 text

Habitat is used to build, deploy, and manage applications…

Slide 20

Slide 20 text

…in any environment from traditional datacenters to containerized microservices

Slide 21

Slide 21 text

National Parks •  National Parks Application   Java Application running in Tomcat   MongoDB

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Let’s login! u: chef p: chef

Slide 24

Slide 24 text

Modern Applications Source Code Repo

Slide 25

Slide 25 text

Modern Applications Source Code Repo Artifact

Slide 26

Slide 26 text

Modern Applications Source Code Repo Artifact Artifact Repo

Slide 27

Slide 27 text

Modern Applications Source Code Repo Artifact Bare Metal Container Cloud Instance VM Artifact Repo

Slide 28

Slide 28 text

Modern Applications Source Code Repo Artifact Bare Metal Container Cloud Instance VM Artifact Repo

Slide 29

Slide 29 text

Modern Applications

Slide 30

Slide 30 text

National Parks •  National Parks Application   Java Application running in Tomcat   MongoDB Start the Supervisor first

Slide 31

Slide 31 text

Installs automatically Keeps things running Supervisor runs services

Slide 32

Slide 32 text

$ Start the Supervisor ∵ Missing package for core/hab-sup/0.26.1 » Installing core/hab-sup/0.26.1 ↓ Downloading core/hab-sup/0.26.1/20170715031552 2.18 MB / 2.18 MB - [=======================] 100.00 % 70.60 MB/s ☛ Verifying core/hab-sup/0.26.1/20170715031552 ... ★ Install of core/hab-launcher/4435/20170715015238 complete with 1 new packages installed. hab-sup(MR): Supervisor Member-ID 0d15afc1907e42afb3c09bcb155e8129 hab-sup(MR): Starting gossip-listener on 0.0.0.0:9638 hab-sup(MR): Starting http-gateway on 0.0.0.0:9631 sudo hab sup run

Slide 33

Slide 33 text

$ Start Java Application sudo hab sup load learn/national-parks hab-sup(PK): learn/national-parks not found in local package cache, installing from https://willem.habitat.sh/v1/depot » Installing learn/national-parks ↓ Downloading learn/national-parks/0.1.5/20170407081316 5.75 MB / 5.75 MB | [======================] 100.00 % 100.34 MB/s ☛ Verifying learn/national-parks/0.1.5/20170407081316 ...

Slide 34

Slide 34 text

$ Meanwhile, in the supervisor output hab-sup(MR): Supervisor Member-ID 0d15afc1907e42afb3c09bcb155e8129 hab-sup(MR): Starting gossip-listener on 0.0.0.0:9638 hab-sup(MR): Starting http-gateway on 0.0.0.0:9631 hab-sup(MR): Starting learn/national-parks hab-sup(MR): Unable to start learn/national-parks, hab-sup(SS)[src/manager/ service/spec.rs:188:23]: Missing required bind(s), database

Slide 35

Slide 35 text

Pitfall! Missing required bind(s), database

Slide 36

Slide 36 text

Load MongoDB Service The Supervisor is designed to supervise one or more services concurrently

Slide 37

Slide 37 text

$ Load MongoDB into the Supervisor sudo hab sup load learn/mongodb hab-sup(MN): The learn/mongodb service was successfully loaded

Slide 38

Slide 38 text

$ Meanwhile, in the supervisor output hab-sup(MR): Starting learn/mongodb mongodb.default(SR): Hooks recompiled default(CF): Updated mongod.conf f9886a510442a32e91d38a79b0baad2a4bb589ba36fed74e2ea3493d517d8bd5 default(CF): Updated mongos.conf 8c3e4cd2f3cdd7cd922ce3b529f93672f3af8274e5f6d462a5f8824c25bbbe18 mongodb.default(SR): Configuration recompiled mongodb.default(SR): Initializing mongodb.default(SV): Starting service as user=hab, group=hab mongodb.default(O): note: noprealloc may hurt performance in many applications

Slide 39

Slide 39 text

This raises a question •  Where are these packages coming from?

Slide 40

Slide 40 text

Modern Applications Source Code Repo Artifact Bare Metal Container Cloud Instance VM Artifact Repo

Slide 41

Slide 41 text

Central location Publicly hosted Lightweight views Stored in a depot

Slide 42

Slide 42 text

https://app.habitat.sh/#/pkgs/learn

Slide 43

Slide 43 text

$ Unload Java Application sudo hab sup unload learn/national-parks

Slide 44

Slide 44 text

$ Reload Java Application sudo hab sup load learn/national-parks --bind database:mongodb.default hab-sup(MR): Starting learn/national-parks ... national-parks.default(SR): Initializing national-parks.default hook[init]:(HK): Seeding Mongo Collection ... national-parks.default hook[init]:(HK): 2017-07-25T21:16:09.524+0000 Failed: error connecting to db server: no reachable servers national-parks.default hook[init]:(HK): 2017-07-25T21:16:09.524+0000 imported 0 documents national-parks.default(HK): Initialization failed! 'init' exited with status code 1

Slide 45

Slide 45 text

Pitfall! Cannot connect to the database Probably a configuration issue with the database

Slide 46

Slide 46 text

What are the tunables? [mongod.net] bind_ip = "127.0.0.1" ipv6 = false ... [mongod.security] authorization = "disabled" cluster_auth_mode = "keyFile" javascript_enabled = true key_file = "" ... $ sudo hab sup config learn/mongodb

Slide 47

Slide 47 text

Create a configuration file $ sudo hab sup config learn/mongodb > mongodb.toml

Slide 48

Slide 48 text

[mongod.net] bind_ip = "127.0.0.1" bind_ip = "0.0.0.0" ipv6 = false ... [mongod.security] authorization = "disabled" cluster_auth_mode = "keyFile" cluster_auth_mode = "" javascript_enabled = true ... Edit the mongodb.toml - + - +

Slide 49

Slide 49 text

Never do this at home! •  We are about disable some MongoDB security

Slide 50

Slide 50 text

Manages configuration Installs automatically Keeps things running Supervisor runs services

Slide 51

Slide 51 text

$ Change the configuration for MongoDB sudo hab config apply --peer 127.0.0.1 mongodb.default \ 1 mongodb.toml

Slide 52

Slide 52 text

Applying Configuration sudo hab config apply --peer 127.0.0.1 mongodb.default 1 mongodb.toml •  peer - hostname or IP address of a running supervisor •  mongodb.default - the service group •  1 - the incarnation of this configuration •  mongodb.toml - the file with the new configuration

Slide 53

Slide 53 text

$ Change the configuration for MongoDB ∵ Missing package for core/hab-butterfly/0.26.1 » Installing core/hab-butterfly/0.26.1 ↓ Downloading core/hab-butterfly/0.26.1/20170715032942 1.14 MB / 1.14 MB / [=======================] 100.00 % 65.20 MB/s ☛ Verifying core/hab-butterfly/0.26.1/20170715032942 ... » Applying configuration for mongodb.default incarnation 1 Ω Creating service configuration ✓ Verified this configuration is valid TOML ↑ Applying to peer 127.0.0.1:9638 ★ Applied configuration sudo hab config apply --peer 127.0.0.1 mongodb.default \ 1 mongodb.toml

Slide 54

Slide 54 text

$ Meanwhile, in the supervisor output mongodb.default(SR): Hooks recompiled default(CF): Updated mongod.conf 12a29a9de79166f30aa87640bc4ba4a88b6dc4d4641cf0d6ed00e179229d576f mongodb.default(SR): Configuration recompiled

Slide 55

Slide 55 text

$ Meanwhile, in the supervisor output national-parks.default(SR): Hooks recompiled ... Deployment of web application directory /hab/pkgs/core/ tomcat8/8.5.9/20170215223900/tc/webapps/ROOT has finished in 30 ms national-parks.default(O): 25-Jul-2017 21:21:13.399 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http- nio-8080] national-parks.default(O): 25-Jul-2017 21:21:13.404 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009] national-parks.default(O): 25-Jul-2017 21:21:13.405 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 6850 ms

Slide 56

Slide 56 text

Supervisors provide a REST API External Actors Health and Status Supervisor Debugging

Slide 57

Slide 57 text

Supervisors self-organize Service Discovery Service Groups

Slide 58

Slide 58 text

http://YOUR_IP:8080/national-parks

Slide 59

Slide 59 text

•  http://YOUR_IP:9631/services •  http://YOUR_IP:9631/services/mongodb/default/config •  http://YOUR_IP:9631/services/national-parks/default/config REST API

Slide 60

Slide 60 text

•  http://YOUR_IP:9631/services/mongodb/default/config REST API

Slide 61

Slide 61 text

•  http://YOUR_IP:9631/services/mongodb/default/config REST API With JSONView Chrome Plugin

Slide 62

Slide 62 text

Runtime Concerns •  Application supervision •  Service discovery •  Application configuration •  Topology •  Updates •  Orchestration

Slide 63

Slide 63 text

It’s all open source Apache License

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

Unload the services hab-sup(SV): national-parks.default - Shutdown method: Graceful Termination hab-sup(SV): national-parks.default - process 2457 died with exit code 143 hab-sup(SV): national-parks.default - Service exited $ sudo hab sup unload learn/national-parks

Slide 66

Slide 66 text

Unload the services hab-sup(SV): mongodb.default - Shutdown method: Graceful Termination hab-sup(SV): mongodb.default - process 2572 died with exit code 0 hab-sup(SV): mongodb.default - Service exited $ sudo hab sup unload learn/mongodb

Slide 67

Slide 67 text

What’s Next? •  Use a provided Habitat development environment, or install Habitat locally •  Join the Habitat Slack Team - http://slack.habitat.sh/ •  Work through the tutorial at https://www.habitat.sh/tutorials/ •  Explore Habitat packages on the depot - https://app.habitat.sh/ •  Explore the Habitat projects - https://github.com/habitat-sh •  Read Habitat Blog posts - https://www.habitat.sh/blog/

Slide 68

Slide 68 text

No content