SlideShare a Scribd company logo
Hong Kong Open Source
Conference 2019
DevOps with Ansible
From Native to Kubernetes
Edison Wong
2019-06-15
Wong Hoi Sing, Edison
●
2005 - Drupal Developer & Contributor
– https://drupal.org/user/33940
●
2008 - HKDUG Co-founder
– https://groups.drupal.org/drupalhk
●
2010 - CEO, PantaRei Design
– hswong3i@pantarei-design.com
PantaRei Design
●
Everything Changes and Nothing Remains Still
●
Reinvent Enterprise with Open Source Software and Cloud Computing
●
Hong Kong based FOSS service provider
– Content Management System (CMS) with Drupal
– Cloud Hosting Solution with Amazon Web Services (AWS)
– Team collaborate solution with Atlassian
●
Business Partner with industry leaders
– 2012, AWS Consulting Partner
– 2013, Acquia Partner
– 2013, Atlassian Experts
– 2014, Rackspace Hosting Partner
●
http://pantarei-design.com
Outline
●
Why DevOps with Ansible?
●
Hello World with Ansible
●
Ansible Role with Molecule
●
Docker Build with Ansible (!?)
●
Molecule + Vagrant + Ceph + Kubernetes
●
Tips & Tricks
●
Roadmap
●
Q&A
Why DevOps with Ansible?
●
HKOSCON 2018
●
SysAdmin Daily Difficulties
●
Why DevOps?
●
Why Ansible?
●
Demo: alvistack-ansible
HKOSCON 2018
●
Virtual Hosting with Kubernetes
– Ansible: deployment management
– Docker: application pre-packaging
– CephFS: centralized network storage
– Kubernetes: runtime service lifecycle
management
HKOSCON 2018 (cont.)
●
Each talent (i.e. domain) goes into
individual Kubernetes namespace
●
Each namespace have its own Apache,
PHP, MySQL, SSHD, etc
●
All dynamic data store outside
Kubernetes, goes into CephFS
SysAdmin Daily Difficulties
●
Different deployment target
●
Test logic before deploy
●
Complex cluster management
●
Documentation
●
No time for learning
SysAdmin Daily Difficulties
(cont.)
●
Write-once for all cases
– Native
– Docker/LXD/Vagrant
– AWS/GCE/Azure
Why DevOps?
●
Manual install
– Non-repeatable
●
Manual install with document
– Difficult to manage (Docs to Action)
– Always async with production
●
Manual scripting
– Difficult for everything: learn, write, error detection,
debug, etc…
Why DevOps? (cont.)
●
DevOps
– Deployment logic as code (i.e. revision
with GIT)
– With error detection and debug tools
– Manage multiple deployment target at
once (e.g. data center, clustering)
Why Ansible?
●
Writing “tasks” in YAML
– Human readable == minimize
documentation
– Easy to learn, when compare with
Ruby for Chef or Puppet
Why Ansible? (cont.)
A lot of reusable modules
– Simplify complicated logic with error
detection
– Or running “shell” command directly
Why Ansible? (cont.)
●
Simple requirement
– Python and Password-less SSH
– Agent-less for managed node
Demo: alvistack-ansible
●
https://github.com/alvistack/alvistack-ansibl
e
– Ceph + Kubernetes + Addon
– Support Ubuntu 18.04/16.04 + CentOS 7 +
openSUSE 15.0
– All Roles tested with LXD individually
– Overall Playbook tested with Vagrant
– Simply clone-and-play
Hello World with Ansible
●
Install and Setup Ansible
●
Ansible in CLI
●
Ansible in Playbook
●
Ansible in Role
●
Demo: ansible-playbook-ubuntu-desktop
Install and Setup Ansible
●
Control Node Requirements
– sudo apt-get install python python-dev openssh-client
– pip install ansible molecule
●
Managed Node Requirements
– sudo apt-get install python-minimal openssh-server
– Password-less SSH login by public-private key pair
Ansible in CLI
●
Running command on remote guest is
simple
– ansible -i guest1,guest2, -m ping
– ansible -i guest1,guest2, -m apt -a ‘name=vim
state=present’
– ansible -i guest1,guest2, -m shell -a ‘uname -a’
Ansible in Playbook
●
Running multiple “task” once together
●
Finer control than running with CLI
●
Define your inventory then play with it
– ansible-playbook -i inventory/all/hosts
playbooks/setup-everything.yml
Ansible in Role
●
Not just “Tasks”, but also:
– Default over-writable variables
– Internal static variables
– Static files for copy
– Template files
– Event handlers
●
A basic build block for complex architecture
– Use Playbook to include different Roles
Ansible in Role (cont.)
●
Create a new role with ansible-galaxy
– mkdir ~/.ansible/roles
– cd ~/.ansible/roles
– ansible-galaxy init dummy
●
You could now test it (run via your localhost)
– cd ~/.ansible/roles/dummy
– ansible-playbook -i tests/inventory tests/test.yml
Demo: ansible-playbook-
ubuntu-desktop
●
https://github.com/pantarei/ansibl
e-playbook-ubuntu-desktop
– Deployment for Ubuntu Desktop
19.04 + Lot of daily used applications
– Well… Also install `vanilla-gnome-
desktop`…
– Simply Ansible Playbook-only
Ansible Role with Molecule
●
Install and Setup Molecule
●
Why Molecule?
●
Multiple Test Cases
●
Multiple Test Drivers
●
Demo: ansible-role-sshd
Install and Setup Molecule
●
Molecule could be install with PIP
– pip install ansible molecule
●
Also install with Docker and Vagrant
support
– pip install molecule[docker]
– pip install molecule[vagrant]
Why Molecule?
●
DevOps R&D need test
– Role created by ansible-galaxy run via localhost
●
Each test should run in a clean environment
– Role created by molecule run inside
Docker/LXD/Vagrant/etc...
●
Manage test environment(s) is boring
●
Code lint
Why Molecule? (cont.)
●
Molecule
– Testing framework for Ansible
– Written in Ansible and Python style
– Write your test case in standard Ansible style
– Manage test environment life-cycle for you
– Code lint
– Idempotence (i.e. run twice to confirm no extra
changes)
Why Molecule? (cont.)
●
Create a new Role with molecule
– cd ~/.ansible/roles
– molecule init role -r dummy2 -d docker
– molecule init role -r dummy3 -d lxd
– molecule init role -r dummy4 -d vagrant
●
Now you could run test inside Docker
– cd ~/.ansible/roles/dummy2
– molecule test
Multiple Test Cases
●
Molecule support multiple test cases
definition, e.g.
– molecule/centos-7/molecule.yml
– molecule/suse-15/molecule.yml
– molecule/ubuntu-16.04/molecule.yml
– molecule/ubuntu-18.04/molecule.yml
Multiple Test Drivers
●
Molecule support multiple drivers
– Docker (default)
– LXD
– Vagrant (i.e. VirtualBox)
– EC2/GCE/Delegated/etc...
Demo: ansible-role-sshd
●
https://github.com/alvistack/ansi
ble-role-sshd
– Ansible Role for SSHD installation
– Molecule + LXD + Travis CI
– Support Ubuntu 18.04/16.04 +
CentOS 7 + openSUSE 15.0
Docker Build with Ansible (!?)
●
Why NOT Dockerfile?
●
Why NOT ansible-bender?
●
How Dockerfile with Ansible?
●
Demo: docker-jira
Why NOT Dockerfile?
●
Back to the origin: why still
custom shell scripting?
– Difficult for everything: learn, write,
error detection, debug, etc…
Why NOT ansible-bender?
●
https://github.com/ansible-comm
unity/ansible-bender
– Build Docker Image with standard
Ansible Playbook
– Just need basic Python support
inside target container
Why NOT ansible-bender?
(cont.)
●
PROS
– Could integrate with Travis CI
– Push image to DockerHub once build successful
●
CONS
– Can’t trigger auto build from DockerHub if
upstream base image get update (i.e. not
Dockerfile-based)
How Dockerfile with Ansible?
●
Kickstart with Dockerfile
●
Install Python, PIP then Ansible
inside Docker image
●
Run Molecule via localhost inside
Docker image (i.e. Delegated)
How Dockerfile with Ansible?
●
PROS
– All Roles could be pre-tested
– A simple Playbook via localhost
– Single layer for Docker Image
– Support auto build via DockerHub
●
CONS
– Size bigger than purely Dockerfile (i.e. Python and
Ansible)
Demo: docker-jira
●
https://github.com/alvistack/docker-j
ira
– Docker Image packaging for Atlassian
JIRA
– Molecule + Delegated
– All used Roles are LXD tested
– Support DockerHub auto build
Molecule + Vagrant + Ceph +
Kubernetes
●
Roles Pre-tested with Molecule
●
Links Roles with GIT Submodule
●
Test Complex Cluster with Vagrant
●
Demo: alvistack-ansible
Roles Pre-tested with Molecule
●
Similar as OOP, writing each
Ansible Roles with test cases
●
Simpler for R&D, debug,
maintenance, etc...
Links Roles with GIT
Submodule
●
Easy update
●
Easy management
Test Complex Cluster with
Vagrant
●
In case of Ceph OSD, truth block device is
required
– Not support file-based loop device
●
In case of Weave, each Kubernetes node
must have unique machine ID
– With LXD all instance get the same host
machine ID
Test Complex Cluster with
Vagrant (cont.)
●
Molecule + Docker
– Default, VERY FAST
– NO, (simple) systemd support
– NO, (simple) block device support
– YES, Travis CI support
Test Complex Cluster with
Vagrant (cont.)
●
Molecule + LXD
– Fast
– YES, systemd support
– NO, (simple) block device support
– YES, Travis CI support
Test Complex Cluster with
Vagrant (cont.)
●
Molecule + Vagrant
– VERY SLOW (i.e. booting VM)
– YES, systemd support
– YES, block device support
– NO, local test only (i.e. VT-x/AMD-v
required)
Test Complex Cluster with
Vagrant (cont.)
●
Molecule + LXD for most Ansible
Roles R&D
●
Molecule + Vagrant for final stage
local integration test
Demo: alvistack-ansible
●
Fetch source
– git clone https://github.com/alvistack/
alvistack-ansible.git
– cd alvistack-ansible && git submodule
update --init –recursive
Demo: alvistack-ansible (cont.)
●
Setup inventory
– cp -rfp inventory/sample inventory/all
– vi inventory/all/hosts
Demo: alvistack-ansible (cont.)
●
Run the playbook
– ansible-playbook -i inventory/all/hosts
playbooks/setup-everything.yml
Demo: alvistack-ansible (cont.)
●
Manually create Ceph OSD and CephFS, e.g.
– ceph-volume lvm create --blue-store --data /dev/sdc
– ceph osd pool create cephfs_metadata 32 32
– ceph osd pool create cephfs_data 128 128
– ceph fs new cephfs cephfs_metadata cephfs_data
Tips & Tricks
●
Always Start with Test Cases
●
Simple Tests Goes Docker
●
Complex Tests Goes LXD
●
Cluster Tests Goes Vagrant
●
Roles Only Handle Single Group
●
Playbook Handle Cross Group
●
Cross Target File Copy with `base64`
Roadmap
●
Automatic upgrade plan for each Ansible Role, e.g.
– Save last run schema version (e.g. 1001) to remote with
Local facts (facts.d)
– Fetch and compare with current schema version from
code (e.g. 1004)
– Run the in between upgrade procedures (e.g. 1002.yml,
1003.yml, 1004.yml)
– Update the saved schema version
Q&A
Contact Us
●
Address: Unit 326, 3/F, Building 16W, No.16
Science Park West Avenue, Hong Kong Science
Park, Shatin, N.T.
●
Phone: +852 3576 3812
●
Fax: +852 3753 3663
●
Email: sales@pantarei-design.com
●
Web: http://pantarei-design.com

More Related Content

What's hot

Travel with your mock server
Travel with your mock serverTravel with your mock server
Travel with your mock server
Jorge Ortiz
 
Gitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CIGitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CI
Uilian Ries
 
Docker Barcelona Meetup - An Introduction to BuildKit
Docker Barcelona Meetup - An Introduction to BuildKitDocker Barcelona Meetup - An Introduction to BuildKit
Docker Barcelona Meetup - An Introduction to BuildKit
Arnaud Porterie
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
Giorgio Cefaro
 
ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)
Shashikant Jagtap
 
How To Set a Vagrant Development System
How To Set a Vagrant Development SystemHow To Set a Vagrant Development System
How To Set a Vagrant Development System
Paul Bearne
 
Infrastructure as Data with Ansible
Infrastructure as Data with AnsibleInfrastructure as Data with Ansible
Infrastructure as Data with Ansible
Carlo Bonamico
 
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
dotCloud
 
Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1Docker, Inc.
 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQIntroduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
dotCloud
 
Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014
Puppet
 
Intro to vagrant
Intro to vagrantIntro to vagrant
Intro to vagrant
Mantas Klasavicius
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
sparkfabrik
 
Vagrant for Virtualized Development
Vagrant for Virtualized DevelopmentVagrant for Virtualized Development
Vagrant for Virtualized Development
Adam Culp
 
Vagrant + Ansible + Docker
Vagrant + Ansible + DockerVagrant + Ansible + Docker
Vagrant + Ansible + Docker
Vijay Selvaraj
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
All Things Open
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-Overview
Crifkin
 
Using docker to develop NAS applications
Using docker to develop NAS applicationsUsing docker to develop NAS applications
Using docker to develop NAS applications
Terry Chen
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
OlinData
 
Docker and java, at Montréal JUG
Docker and java, at Montréal JUGDocker and java, at Montréal JUG
Docker and java, at Montréal JUG
Anthony Dahanne
 

What's hot (20)

Travel with your mock server
Travel with your mock serverTravel with your mock server
Travel with your mock server
 
Gitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CIGitlab - Creating C++ applications with Gitlab CI
Gitlab - Creating C++ applications with Gitlab CI
 
Docker Barcelona Meetup - An Introduction to BuildKit
Docker Barcelona Meetup - An Introduction to BuildKitDocker Barcelona Meetup - An Introduction to BuildKit
Docker Barcelona Meetup - An Introduction to BuildKit
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
 
ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)ATDD with Behat and Selenium (LDNSE6)
ATDD with Behat and Selenium (LDNSE6)
 
How To Set a Vagrant Development System
How To Set a Vagrant Development SystemHow To Set a Vagrant Development System
How To Set a Vagrant Development System
 
Infrastructure as Data with Ansible
Infrastructure as Data with AnsibleInfrastructure as Data with Ansible
Infrastructure as Data with Ansible
 
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
Dockerfile Basics | Docker workshop #2 at twitter, 2013-11-05
 
Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1Dockerfile Basics Workshop #1
Dockerfile Basics Workshop #1
 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQIntroduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
 
Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014Killer R10K Workflow - PuppetConf 2014
Killer R10K Workflow - PuppetConf 2014
 
Intro to vagrant
Intro to vagrantIntro to vagrant
Intro to vagrant
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Vagrant for Virtualized Development
Vagrant for Virtualized DevelopmentVagrant for Virtualized Development
Vagrant for Virtualized Development
 
Vagrant + Ansible + Docker
Vagrant + Ansible + DockerVagrant + Ansible + Docker
Vagrant + Ansible + Docker
 
Jenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with JenkinsJenkins 101: Continuos Integration with Jenkins
Jenkins 101: Continuos Integration with Jenkins
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-Overview
 
Using docker to develop NAS applications
Using docker to develop NAS applicationsUsing docker to develop NAS applications
Using docker to develop NAS applications
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
 
Docker and java, at Montréal JUG
Docker and java, at Montréal JUGDocker and java, at Montréal JUG
Docker and java, at Montréal JUG
 

Similar to [HKOSCON][20190615][DevOps with Ansible, From Native to Kubernetes]

[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes][HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
Wong Hoi Sing Edison
 
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution][HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
Wong Hoi Sing Edison
 
Running Containerized Node.js Services on AWS Elastic Beanstalk
Running Containerized Node.js Services on AWS Elastic BeanstalkRunning Containerized Node.js Services on AWS Elastic Beanstalk
Running Containerized Node.js Services on AWS Elastic Beanstalk
zupzup.org
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
Jérôme Petazzoni
 
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
Wong Hoi Sing Edison
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New York
Jérôme Petazzoni
 
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes][BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
Wong Hoi Sing Edison
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
Jérôme Petazzoni
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
TheFamily
 
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Jérôme Petazzoni
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Jérôme Petazzoni
 
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
Samsul Ma'arif
 
BBC's GraphDB (formerly Owlim) AWS Cloud Migration
BBC's GraphDB (formerly Owlim) AWS Cloud MigrationBBC's GraphDB (formerly Owlim) AWS Cloud Migration
BBC's GraphDB (formerly Owlim) AWS Cloud Migration
logomachy
 
Introduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange CountyIntroduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange County
Jérôme Petazzoni
 
Devops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShiftDevops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShift
Yaniv cohen
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
Adrian Otto
 
openSUSE Conference 2017 - The Docker at Travis Presentation
openSUSE Conference 2017 - The Docker at Travis PresentationopenSUSE Conference 2017 - The Docker at Travis Presentation
openSUSE Conference 2017 - The Docker at Travis Presentation
lslezak
 
Infrastructure as code with Terraform
Infrastructure as code with TerraformInfrastructure as code with Terraform
Infrastructure as code with TerraformSam Bashton
 
Docking your services_with_docker
Docking your services_with_dockerDocking your services_with_docker
Docking your services_with_dockerTikal Knowledge
 

Similar to [HKOSCON][20190615][DevOps with Ansible, From Native to Kubernetes] (20)

[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes][HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
[HKOSCon x COSCUP 2020][20200801][Ansible: From VM to Kubernetes]
 
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution][HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
[HKOSCON][20220611][AlviStack: Hong Kong Based Kubernetes Distribution]
 
Running Containerized Node.js Services on AWS Elastic Beanstalk
Running Containerized Node.js Services on AWS Elastic BeanstalkRunning Containerized Node.js Services on AWS Elastic Beanstalk
Running Containerized Node.js Services on AWS Elastic Beanstalk
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New York
 
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes][BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
[BarCamp2018][20180915][Tips for Virtual Hosting on Kubernetes]
 
Introduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" EditionIntroduction to Docker, December 2014 "Tour de France" Edition
Introduction to Docker, December 2014 "Tour de France" Edition
 
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme PetazzoniWorkshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
Workshop : 45 minutes pour comprendre Docker avec Jérôme Petazzoni
 
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special EditionIntroduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
Introduction to Docker, December 2014 "Tour de France" Bordeaux Special Edition
 
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
Docker 1 0 1 0 1: a Docker introduction, actualized for the stable release of...
 
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
Deploy Multinode GitLab Runner in openSUSE 15.1 Instances with Ansible Automa...
 
BBC's GraphDB (formerly Owlim) AWS Cloud Migration
BBC's GraphDB (formerly Owlim) AWS Cloud MigrationBBC's GraphDB (formerly Owlim) AWS Cloud Migration
BBC's GraphDB (formerly Owlim) AWS Cloud Migration
 
Introduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange CountyIntroduction to Docker at Glidewell Laboratories in Orange County
Introduction to Docker at Glidewell Laboratories in Orange County
 
Devops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShiftDevops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShift
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
 
openSUSE Conference 2017 - The Docker at Travis Presentation
openSUSE Conference 2017 - The Docker at Travis PresentationopenSUSE Conference 2017 - The Docker at Travis Presentation
openSUSE Conference 2017 - The Docker at Travis Presentation
 
Infrastructure as code with Terraform
Infrastructure as code with TerraformInfrastructure as code with Terraform
Infrastructure as code with Terraform
 
Docking your services_with_docker
Docking your services_with_dockerDocking your services_with_docker
Docking your services_with_docker
 

More from Wong Hoi Sing Edison

[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT
Wong Hoi Sing Edison
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
Wong Hoi Sing Edison
 
[20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team][20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team]
Wong Hoi Sing Edison
 
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management SystemBarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
Wong Hoi Sing Edison
 
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
Wong Hoi Sing Edison
 
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
Wong Hoi Sing Edison
 
DruStack- a mobile-friendly web content management system (cms
DruStack- a mobile-friendly web content management system (cmsDruStack- a mobile-friendly web content management system (cms
DruStack- a mobile-friendly web content management system (cms
Wong Hoi Sing Edison
 
drustack a mobile-friendly web content management system (cms)
drustack   a mobile-friendly web content management system (cms)drustack   a mobile-friendly web content management system (cms)
drustack a mobile-friendly web content management system (cms)
Wong Hoi Sing Edison
 
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile DevelopmentCUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
Wong Hoi Sing Edison
 
Open Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
Open Innovation Lab (OIL) - 20150227 - GIT Intro WorkshopOpen Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
Open Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
Wong Hoi Sing Edison
 
IT Entrepreneurship Talk - City University of Hong Kong
IT Entrepreneurship Talk - City University of Hong KongIT Entrepreneurship Talk - City University of Hong Kong
IT Entrepreneurship Talk - City University of Hong Kong
Wong Hoi Sing Edison
 
OSS Community Meeting - OSS Community Management for Dummy
OSS Community Meeting - OSS Community Management for DummyOSS Community Meeting - OSS Community Management for Dummy
OSS Community Meeting - OSS Community Management for Dummy
Wong Hoi Sing Edison
 
Barcamp Hong Kong 2014 - Introduction to GIT
Barcamp Hong Kong 2014 - Introduction to GITBarcamp Hong Kong 2014 - Introduction to GIT
Barcamp Hong Kong 2014 - Introduction to GIT
Wong Hoi Sing Edison
 
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management SystemBarcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
Wong Hoi Sing Edison
 
Hong Kong Drupal User Group - Nov 8th
Hong Kong Drupal User Group - Nov 8thHong Kong Drupal User Group - Nov 8th
Hong Kong Drupal User Group - Nov 8th
Wong Hoi Sing Edison
 
Entrepreneurship Talk
Entrepreneurship TalkEntrepreneurship Talk
Entrepreneurship Talk
Wong Hoi Sing Edison
 
Open Source.HK Workshop - 2014 Oct 11th
Open Source.HK Workshop - 2014 Oct 11thOpen Source.HK Workshop - 2014 Oct 11th
Open Source.HK Workshop - 2014 Oct 11th
Wong Hoi Sing Edison
 
Barcamp Macau 2014 - Introduction to GIT
Barcamp Macau 2014 - Introduction to GITBarcamp Macau 2014 - Introduction to GIT
Barcamp Macau 2014 - Introduction to GIT
Wong Hoi Sing Edison
 
Barcamp Macau 2014 - Introduction to AWS
Barcamp Macau 2014 - Introduction to AWSBarcamp Macau 2014 - Introduction to AWS
Barcamp Macau 2014 - Introduction to AWS
Wong Hoi Sing Edison
 
Open Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26thOpen Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26th
Wong Hoi Sing Edison
 

More from Wong Hoi Sing Edison (20)

[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
 
[20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team][20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team]
 
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management SystemBarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
BarCamp Hong Kong 2015 - AuthBucket - Open Source Identity Management System
 
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
 
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
[HKDUG] #20160626 - HKOSCon 2015 - Website DIY with Drupal 8
 
DruStack- a mobile-friendly web content management system (cms
DruStack- a mobile-friendly web content management system (cmsDruStack- a mobile-friendly web content management system (cms
DruStack- a mobile-friendly web content management system (cms
 
drustack a mobile-friendly web content management system (cms)
drustack   a mobile-friendly web content management system (cms)drustack   a mobile-friendly web content management system (cms)
drustack a mobile-friendly web content management system (cms)
 
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile DevelopmentCUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
CUHK CSCI 4140 2015 Spring Guest Lecture - Agile Development
 
Open Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
Open Innovation Lab (OIL) - 20150227 - GIT Intro WorkshopOpen Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
Open Innovation Lab (OIL) - 20150227 - GIT Intro Workshop
 
IT Entrepreneurship Talk - City University of Hong Kong
IT Entrepreneurship Talk - City University of Hong KongIT Entrepreneurship Talk - City University of Hong Kong
IT Entrepreneurship Talk - City University of Hong Kong
 
OSS Community Meeting - OSS Community Management for Dummy
OSS Community Meeting - OSS Community Management for DummyOSS Community Meeting - OSS Community Management for Dummy
OSS Community Meeting - OSS Community Management for Dummy
 
Barcamp Hong Kong 2014 - Introduction to GIT
Barcamp Hong Kong 2014 - Introduction to GITBarcamp Hong Kong 2014 - Introduction to GIT
Barcamp Hong Kong 2014 - Introduction to GIT
 
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management SystemBarcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
Barcamp Hong Kong 2014 - Commercial Use of OSS Web Content Management System
 
Hong Kong Drupal User Group - Nov 8th
Hong Kong Drupal User Group - Nov 8thHong Kong Drupal User Group - Nov 8th
Hong Kong Drupal User Group - Nov 8th
 
Entrepreneurship Talk
Entrepreneurship TalkEntrepreneurship Talk
Entrepreneurship Talk
 
Open Source.HK Workshop - 2014 Oct 11th
Open Source.HK Workshop - 2014 Oct 11thOpen Source.HK Workshop - 2014 Oct 11th
Open Source.HK Workshop - 2014 Oct 11th
 
Barcamp Macau 2014 - Introduction to GIT
Barcamp Macau 2014 - Introduction to GITBarcamp Macau 2014 - Introduction to GIT
Barcamp Macau 2014 - Introduction to GIT
 
Barcamp Macau 2014 - Introduction to AWS
Barcamp Macau 2014 - Introduction to AWSBarcamp Macau 2014 - Introduction to AWS
Barcamp Macau 2014 - Introduction to AWS
 
Open Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26thOpen Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26th
 

Recently uploaded

Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 

Recently uploaded (20)

Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 

[HKOSCON][20190615][DevOps with Ansible, From Native to Kubernetes]

  • 1. Hong Kong Open Source Conference 2019 DevOps with Ansible From Native to Kubernetes Edison Wong 2019-06-15
  • 2. Wong Hoi Sing, Edison ● 2005 - Drupal Developer & Contributor – https://drupal.org/user/33940 ● 2008 - HKDUG Co-founder – https://groups.drupal.org/drupalhk ● 2010 - CEO, PantaRei Design – hswong3i@pantarei-design.com
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. PantaRei Design ● Everything Changes and Nothing Remains Still ● Reinvent Enterprise with Open Source Software and Cloud Computing ● Hong Kong based FOSS service provider – Content Management System (CMS) with Drupal – Cloud Hosting Solution with Amazon Web Services (AWS) – Team collaborate solution with Atlassian ● Business Partner with industry leaders – 2012, AWS Consulting Partner – 2013, Acquia Partner – 2013, Atlassian Experts – 2014, Rackspace Hosting Partner ● http://pantarei-design.com
  • 8.
  • 9. Outline ● Why DevOps with Ansible? ● Hello World with Ansible ● Ansible Role with Molecule ● Docker Build with Ansible (!?) ● Molecule + Vagrant + Ceph + Kubernetes ● Tips & Tricks ● Roadmap ● Q&A
  • 10. Why DevOps with Ansible? ● HKOSCON 2018 ● SysAdmin Daily Difficulties ● Why DevOps? ● Why Ansible? ● Demo: alvistack-ansible
  • 11. HKOSCON 2018 ● Virtual Hosting with Kubernetes – Ansible: deployment management – Docker: application pre-packaging – CephFS: centralized network storage – Kubernetes: runtime service lifecycle management
  • 12.
  • 13.
  • 14.
  • 15. HKOSCON 2018 (cont.) ● Each talent (i.e. domain) goes into individual Kubernetes namespace ● Each namespace have its own Apache, PHP, MySQL, SSHD, etc ● All dynamic data store outside Kubernetes, goes into CephFS
  • 16. SysAdmin Daily Difficulties ● Different deployment target ● Test logic before deploy ● Complex cluster management ● Documentation ● No time for learning
  • 17. SysAdmin Daily Difficulties (cont.) ● Write-once for all cases – Native – Docker/LXD/Vagrant – AWS/GCE/Azure
  • 18.
  • 19. Why DevOps? ● Manual install – Non-repeatable ● Manual install with document – Difficult to manage (Docs to Action) – Always async with production ● Manual scripting – Difficult for everything: learn, write, error detection, debug, etc…
  • 20. Why DevOps? (cont.) ● DevOps – Deployment logic as code (i.e. revision with GIT) – With error detection and debug tools – Manage multiple deployment target at once (e.g. data center, clustering)
  • 21. Why Ansible? ● Writing “tasks” in YAML – Human readable == minimize documentation – Easy to learn, when compare with Ruby for Chef or Puppet
  • 22. Why Ansible? (cont.) A lot of reusable modules – Simplify complicated logic with error detection – Or running “shell” command directly
  • 23. Why Ansible? (cont.) ● Simple requirement – Python and Password-less SSH – Agent-less for managed node
  • 24.
  • 25.
  • 26. Demo: alvistack-ansible ● https://github.com/alvistack/alvistack-ansibl e – Ceph + Kubernetes + Addon – Support Ubuntu 18.04/16.04 + CentOS 7 + openSUSE 15.0 – All Roles tested with LXD individually – Overall Playbook tested with Vagrant – Simply clone-and-play
  • 27.
  • 28. Hello World with Ansible ● Install and Setup Ansible ● Ansible in CLI ● Ansible in Playbook ● Ansible in Role ● Demo: ansible-playbook-ubuntu-desktop
  • 29. Install and Setup Ansible ● Control Node Requirements – sudo apt-get install python python-dev openssh-client – pip install ansible molecule ● Managed Node Requirements – sudo apt-get install python-minimal openssh-server – Password-less SSH login by public-private key pair
  • 30. Ansible in CLI ● Running command on remote guest is simple – ansible -i guest1,guest2, -m ping – ansible -i guest1,guest2, -m apt -a ‘name=vim state=present’ – ansible -i guest1,guest2, -m shell -a ‘uname -a’
  • 31. Ansible in Playbook ● Running multiple “task” once together ● Finer control than running with CLI ● Define your inventory then play with it – ansible-playbook -i inventory/all/hosts playbooks/setup-everything.yml
  • 32.
  • 33.
  • 34. Ansible in Role ● Not just “Tasks”, but also: – Default over-writable variables – Internal static variables – Static files for copy – Template files – Event handlers ● A basic build block for complex architecture – Use Playbook to include different Roles
  • 35. Ansible in Role (cont.) ● Create a new role with ansible-galaxy – mkdir ~/.ansible/roles – cd ~/.ansible/roles – ansible-galaxy init dummy ● You could now test it (run via your localhost) – cd ~/.ansible/roles/dummy – ansible-playbook -i tests/inventory tests/test.yml
  • 36.
  • 37. Demo: ansible-playbook- ubuntu-desktop ● https://github.com/pantarei/ansibl e-playbook-ubuntu-desktop – Deployment for Ubuntu Desktop 19.04 + Lot of daily used applications – Well… Also install `vanilla-gnome- desktop`… – Simply Ansible Playbook-only
  • 38.
  • 39. Ansible Role with Molecule ● Install and Setup Molecule ● Why Molecule? ● Multiple Test Cases ● Multiple Test Drivers ● Demo: ansible-role-sshd
  • 40. Install and Setup Molecule ● Molecule could be install with PIP – pip install ansible molecule ● Also install with Docker and Vagrant support – pip install molecule[docker] – pip install molecule[vagrant]
  • 41. Why Molecule? ● DevOps R&D need test – Role created by ansible-galaxy run via localhost ● Each test should run in a clean environment – Role created by molecule run inside Docker/LXD/Vagrant/etc... ● Manage test environment(s) is boring ● Code lint
  • 42. Why Molecule? (cont.) ● Molecule – Testing framework for Ansible – Written in Ansible and Python style – Write your test case in standard Ansible style – Manage test environment life-cycle for you – Code lint – Idempotence (i.e. run twice to confirm no extra changes)
  • 43. Why Molecule? (cont.) ● Create a new Role with molecule – cd ~/.ansible/roles – molecule init role -r dummy2 -d docker – molecule init role -r dummy3 -d lxd – molecule init role -r dummy4 -d vagrant ● Now you could run test inside Docker – cd ~/.ansible/roles/dummy2 – molecule test
  • 44.
  • 45.
  • 46. Multiple Test Cases ● Molecule support multiple test cases definition, e.g. – molecule/centos-7/molecule.yml – molecule/suse-15/molecule.yml – molecule/ubuntu-16.04/molecule.yml – molecule/ubuntu-18.04/molecule.yml
  • 47. Multiple Test Drivers ● Molecule support multiple drivers – Docker (default) – LXD – Vagrant (i.e. VirtualBox) – EC2/GCE/Delegated/etc...
  • 48.
  • 49.
  • 50.
  • 51. Demo: ansible-role-sshd ● https://github.com/alvistack/ansi ble-role-sshd – Ansible Role for SSHD installation – Molecule + LXD + Travis CI – Support Ubuntu 18.04/16.04 + CentOS 7 + openSUSE 15.0
  • 52.
  • 53.
  • 54. Docker Build with Ansible (!?) ● Why NOT Dockerfile? ● Why NOT ansible-bender? ● How Dockerfile with Ansible? ● Demo: docker-jira
  • 55. Why NOT Dockerfile? ● Back to the origin: why still custom shell scripting? – Difficult for everything: learn, write, error detection, debug, etc…
  • 56. Why NOT ansible-bender? ● https://github.com/ansible-comm unity/ansible-bender – Build Docker Image with standard Ansible Playbook – Just need basic Python support inside target container
  • 57. Why NOT ansible-bender? (cont.) ● PROS – Could integrate with Travis CI – Push image to DockerHub once build successful ● CONS – Can’t trigger auto build from DockerHub if upstream base image get update (i.e. not Dockerfile-based)
  • 58.
  • 59.
  • 60. How Dockerfile with Ansible? ● Kickstart with Dockerfile ● Install Python, PIP then Ansible inside Docker image ● Run Molecule via localhost inside Docker image (i.e. Delegated)
  • 61. How Dockerfile with Ansible? ● PROS – All Roles could be pre-tested – A simple Playbook via localhost – Single layer for Docker Image – Support auto build via DockerHub ● CONS – Size bigger than purely Dockerfile (i.e. Python and Ansible)
  • 62.
  • 63. Demo: docker-jira ● https://github.com/alvistack/docker-j ira – Docker Image packaging for Atlassian JIRA – Molecule + Delegated – All used Roles are LXD tested – Support DockerHub auto build
  • 64.
  • 65.
  • 66. Molecule + Vagrant + Ceph + Kubernetes ● Roles Pre-tested with Molecule ● Links Roles with GIT Submodule ● Test Complex Cluster with Vagrant ● Demo: alvistack-ansible
  • 67. Roles Pre-tested with Molecule ● Similar as OOP, writing each Ansible Roles with test cases ● Simpler for R&D, debug, maintenance, etc...
  • 68. Links Roles with GIT Submodule ● Easy update ● Easy management
  • 69. Test Complex Cluster with Vagrant ● In case of Ceph OSD, truth block device is required – Not support file-based loop device ● In case of Weave, each Kubernetes node must have unique machine ID – With LXD all instance get the same host machine ID
  • 70. Test Complex Cluster with Vagrant (cont.) ● Molecule + Docker – Default, VERY FAST – NO, (simple) systemd support – NO, (simple) block device support – YES, Travis CI support
  • 71. Test Complex Cluster with Vagrant (cont.) ● Molecule + LXD – Fast – YES, systemd support – NO, (simple) block device support – YES, Travis CI support
  • 72. Test Complex Cluster with Vagrant (cont.) ● Molecule + Vagrant – VERY SLOW (i.e. booting VM) – YES, systemd support – YES, block device support – NO, local test only (i.e. VT-x/AMD-v required)
  • 73. Test Complex Cluster with Vagrant (cont.) ● Molecule + LXD for most Ansible Roles R&D ● Molecule + Vagrant for final stage local integration test
  • 74. Demo: alvistack-ansible ● Fetch source – git clone https://github.com/alvistack/ alvistack-ansible.git – cd alvistack-ansible && git submodule update --init –recursive
  • 75. Demo: alvistack-ansible (cont.) ● Setup inventory – cp -rfp inventory/sample inventory/all – vi inventory/all/hosts
  • 76. Demo: alvistack-ansible (cont.) ● Run the playbook – ansible-playbook -i inventory/all/hosts playbooks/setup-everything.yml
  • 77. Demo: alvistack-ansible (cont.) ● Manually create Ceph OSD and CephFS, e.g. – ceph-volume lvm create --blue-store --data /dev/sdc – ceph osd pool create cephfs_metadata 32 32 – ceph osd pool create cephfs_data 128 128 – ceph fs new cephfs cephfs_metadata cephfs_data
  • 78.
  • 79.
  • 80.
  • 81. Tips & Tricks ● Always Start with Test Cases ● Simple Tests Goes Docker ● Complex Tests Goes LXD ● Cluster Tests Goes Vagrant ● Roles Only Handle Single Group ● Playbook Handle Cross Group ● Cross Target File Copy with `base64`
  • 82. Roadmap ● Automatic upgrade plan for each Ansible Role, e.g. – Save last run schema version (e.g. 1001) to remote with Local facts (facts.d) – Fetch and compare with current schema version from code (e.g. 1004) – Run the in between upgrade procedures (e.g. 1002.yml, 1003.yml, 1004.yml) – Update the saved schema version
  • 83. Q&A
  • 84. Contact Us ● Address: Unit 326, 3/F, Building 16W, No.16 Science Park West Avenue, Hong Kong Science Park, Shatin, N.T. ● Phone: +852 3576 3812 ● Fax: +852 3753 3663 ● Email: sales@pantarei-design.com ● Web: http://pantarei-design.com