Connect BOSH director with VirtualBox in Mint20
1. Install VirtualBox
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian bionic contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
$ sudo apt-get update -y
$ sudo apt-get install virtualbox-5.2 -y
$ VBoxManage --version
**NOTE:
- Fix `libvpx5 version` error
<https://github.com/cloudfoundry/bosh-deployment/issues/378>
$ wget http://archive.ubuntu.com/ubuntu/pool/main/libv/libvpx/libvpx5_1.7.0-3_amd64.deb
$ sudo dpkg -i libvpx5_1.7.0-3_amd64.deb
- Bosh isn't support VirtualBox >=6.0
2. Install Ruby client
$ sudo apt-get install ruby-full build-essential
$ ruby --version
3. Install BOSH of VirtualBox
3.1 Install
$ mkdir -p ~/Development/bosh-virtualbox
$ cd ~/Development/bosh-virtualbox
$ cd bosh-deployment/
$ wget -O bosh https://github.com/cloudfoundry/bosh-cli/releases/download/v6.4.0/bosh-cli-6.4.0-linux-amd64
$ chmod +x bosh
$ mv bosh /bin/
$ bosh --version
3.2 Create BOSH Director
$ bosh delete-env bosh-deployment/bosh.yml \
--state ./state.json \
-o bosh-deployment/virtualbox/cpi.yml \
-o bosh-deployment/virtualbox/outbound-network.yml \
-o bosh-deployment/bosh-lite.yml \
-o bosh-deployment/bosh-lite-runc.yml \
-o bosh-deployment/jumpbox-user.yml \
-o bosh-deployment/uaa.yml \
-o bosh-deployment/credhub.yml \
--vars-store ./creds.yml \
-v director_name=VirtualBox-Director \
-v internal_ip=192.168.50.6 \
-v internal_gw=192.168.50.1 \
-v internal_cidr=192.168.50.0/24 \
-v outbound_network_name=NatNetwork
output:
- ifconfig
vboxnet2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.50.1 netmask 255.255.255.0 broadcast 192.168.50.255
inet6 fe80::800:27ff:fe00:2 prefixlen 64 scopeid 0x20<link>
ether 0a:00:27:00:00:02 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 177 bytes 26603 (26.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- bosh director
root@trungnvfet:~/Development/bosh-virtualbox# bosh envs
URL Alias
192.168.50.6 virtualbox
1 environments
Succeeded
3.3 Generate admin password from creds.yml file
bosh int ./creds.yml --path /admin_password
output:
root@trungnvfet:~/Development/bosh-virtualbox# bosh int ./creds.yml --path /admin_password
3cp4c0c7a25k2qxtnf80
3.4 Create bosh environment alias
$ bosh -e 192.168.50.6 alias-env virtualbox --ca-cert <(bosh int ./creds.yml --path /director_ssl/ca)
3.5 Login to bosh environment
$ bosh -e virtualbox login
output:
root@trungnvfet:~/Development/bosh-virtualbox# bosh -e virtualbox login
Using environment '192.168.50.6'
Email (): admin
Password ():
Successfully authenticated with UAA
<admin/3cp4c0c7a25k2qxtnf80>
3.6 Upload cloud-config
- cloud-config.yml
azs:
- name: z1
- name: z2
- name: z3
vm_types:
- name: default
cloud_properties:
cpu: 2
ram: 1024
disk: 3240
- name: large
cloud_properties:
cpu: 2
ram: 4096
disk: 30_240
disk_types:
- name: default
disk_size: 3000
- name: large
disk_size: 50_000
networks:
- name: default
type: manual
subnets:
- range: ((internal_cidr))
gateway: ((internal_gw))
azs: [z1, z2, z3]
dns: [8.8.8.8]
reserved: []
cloud_properties:
name: ((network_name))
compilation:
workers: 2
reuse_compilation_vms: true
az: z1
vm_type: default
network: default
$ export BOSH_ENVIRONMENT=virtualbox
$ bosh update-cloud-config bosh-deployment/warden/cloud-config.yml
3.7 Upload stemcell to director
$ wget https://bosh.io/d/stemcells/bosh-warden-boshlite-ubuntu-trusty-go_agent
$ bosh upload-stemcell bosh-warden-boshlite-ubuntu-trusty-go_agent
3.8 Deploy nginx application on the stemcell
- Upload release for Nginx
bosh upload-release --sha1 1731de7995b785f314e87f54f2e29d3668f0b27f \
> https://bosh.io/d/github.com/cloudfoundry-community/nginx-release?v=1.19.1
- Create nginx.yml
---
name: nginx
releases:
- name: nginx
version: latest
stemcells:
- alias: ubuntu
os: ubuntu-trusty
version: latest
instance_groups:
- name: nginx
instances: 1
azs: [ z1 ]
vm_type: default
stemcell: ubuntu
networks:
- name: default
jobs:
- name: nginx
release: nginx
properties:
nginx_conf: |
worker_processes 1;
error_log /var/vcap/sys/log/nginx/error.log info;
events {
worker_connections 1024;
}
http {
include /var/vcap/packages/nginx/conf/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server_names_hash_bucket_size 64;
server {
server_name demo.caarels.lab;
listen *:80;
access_log /var/vcap/sys/log/nginx/automate-it-access.log;
error_log /var/vcap/sys/log/nginx/automate-it-error.log;
}
}
update:
canaries: 1
max_in_flight: 1
serial: false
canary_watch_time: 1000-60000
update_watch_time: 1000-60000
- Deploy nginx
$ bosh -d nginx deploy nginx.yml
- Add route for Nginx application and access via web
$ ip route add 10.244.0.0/24 via 192.168.50.6 dev vboxnet2
- Delete Nginx deployment
$ bosh -d nginx delete-deployment
- Delete BOSH director connected the VirtualBox
bosh delete-env bosh-deployment/bosh.yml \
--state ./state.json \
-o bosh-deployment/virtualbox/cpi.yml \
-o bosh-deployment/virtualbox/outbound-network.yml \
-o bosh-deployment/bosh-lite.yml \
-o bosh-deployment/bosh-lite-runc.yml \
-o bosh-deployment/jumpbox-user.yml \
-o bosh-deployment/uaa.yml \
-o bosh-deployment/credhub.yml \
--vars-store ./creds.yml \
-v director_name=VirtualBox-Director \
-v internal_ip=192.168.50.6 \
-v internal_gw=192.168.50.1 \
-v internal_cidr=192.168.50.0/24 \
-v outbound_network_name=NatNetwork
- Check stemcells
root@trungnvfet:~/Development/bosh-virtualbox# bosh stemcells
Using environment '192.168.50.6' as user 'admin'
Name Version OS CPI CID
bosh-warden-boshlite-ubuntu-trusty-go_agent 3586.100* ubuntu-trusty - e294e8d9-f08b-4c27-6ee8-8ad07bc12684
(*) Currently deployed
1 stemcells
Succeeded
- Check deployments
root@trungnvfet:~/Development/bosh-virtualbox# bosh deployments
Using environment '192.168.50.6' as user 'admin'
Name Release(s) Stemcell(s) Team(s)
nginx nginx/1.19.1 bosh-warden-boshlite-ubuntu-trusty-go_agent/3586.100 -
1 deployments
Succeeded
- Check nginx app
root@trungnvfet:~/Development/bosh-virtualbox# bosh vms
Using environment '192.168.50.6' as user 'admin'
Task 5. Done
Deployment 'nginx'
Instance Process State AZ IPs VM CID VM Type Active Stemcell
nginx/5253875e-1116-4262-bc5b-241b491cbd79 running z1 10.244.0.2 a72db803-86ff-49d5-56af-b848e37443d6 default true bosh-warden-boshlite-ubuntu-trusty-go_agent/3586.100
1 vms
Succeeded
- Deploy 2 nginx application
Output:
root@trungnvfet:~/Development/bosh-virtualbox# bosh vms
Using environment '192.168.50.6' as user 'admin'
Task 8. Done
Deployment 'nginx'
Instance Process State AZ IPs VM CID VM Type Active Stemcell
nginx/0222239b-4861-4f5d-a333-70591227635c running z1 10.244.0.3 ac5314b6-faf3-4020-7e99-904fa3d185b5 default true bosh-warden-boshlite-ubuntu-trusty-go_agent/3586.100
nginx/5253875e-1116-4262-bc5b-241b491cbd79 running z1 10.244.0.2 a72db803-86ff-49d5-56af-b848e37443d6 default true bosh-warden-boshlite-ubuntu-trusty-go_agent/3586.100
2 vms
Succeeded
- Check disks
root@trungnvfet:~/Development/bosh-virtualbox# bosh disks --orphaned
Using environment '192.168.50.6' as user 'admin'
Disk CID Size Deployment Instance AZ Orphaned At
0 disks
Succeeded
Done!!!