Difference between revisions of "Juju"

From Freephile Wiki
Jump to navigation Jump to search
(remove all the outdated content from 8 or 9 years ago)
Tag: Replaced
 
Line 2: Line 2:
  
 
Juju can deploy to LXC <ref>See also: [[Docker]]</ref> (for local environments), OpenStack (for HP Cloud), Windows Azure, Joyent or Amazon EC2
 
Juju can deploy to LXC <ref>See also: [[Docker]]</ref> (for local environments), OpenStack (for HP Cloud), Windows Azure, Joyent or Amazon EC2
 
Kapil Thangavelu wrote [https://github.com/kapilt/juju-digitalocean JuDo] - A juju provider for [[Digital Ocean]] using a client side plugin and manual provisioning.
 
  
 
== Links ==
 
== Links ==
# https://jujucharms.com/get-started
+
# https://juju.is/
# https://jujucharms.com/docs/1.20/config-manual
+
# https://juju.is/docs/juju/tutorial
# https://jujucharms.com/docs/1.20/config-aws
+
# https://charmhub.io/
# https://jujucharms.com/docs/1.20/config-digitalocean
 
# https://jujucharms.com/docs/1.20/config-vagrant
 
 
 
== TLDR ==
 
<source lang="bash">
 
sudo add-apt-repository ppa:juju/stable
 
sudo apt-get update
 
 
 
sudo apt-get install juju-quickstart
 
sudo apt-get install juju-core
 
# to just show existing/default
 
# juju generate-config --show
 
juju generate-config
 
# edit .juju/environments.yaml to add your AWS KEYS
 
juju bootstrap
 
juju status
 
# assuming it shows a single machine numbered '0'
 
juju deploy apache2 --to 0
 
juju deploy mediawiki --to 0
 
# in our test, this deployed cs:trusty/mediawiki-3
 
juju deploy mysql --to 0
 
juju add-relation mediawiki:db mysql
 
juju expose apache2
 
juju expose mediawiki
 
juju status
 
juju ssh 0
 
</source>
 
 
 
You'll end up with an address like this <ref>
 
When setting up a service on EC2, make sure to obtain and assign an "elastic IP" so that the instance has a static IP.  Otherwise every shutdown will result in a different public IP address being assigned to the instance.
 
</ref>
 
http://52.5.215.128/mediawiki/index.php/Special:Version
 
with
 
* Ubuntu 14.04.2 LTS (Trusty Tahr)
 
* Apache 2.4.7 (Ubuntu) (with MaxRequestWorkers at 2048 which would require 32 servers while servers is set at 16 = sloppy)
 
* MediaWiki <code>1.19.14+dfsg-1</code> installed with no extensions, and no git
 
* PHP 5.5.9-1ubuntu4.7 (apache2handler)
 
* MySQL 5.5.41-0ubuntu0.14.04.1-log
 
 
 
 
 
 
 
You can see what keys were added to the machine
 
<code>juju authorised-keys list</code>
 
and verify the key fingerprint for the key you want to use
 
<code>ssh-keygen -lf /home/user/.ssh/id_rsa</code>
 
 
 
but you have to know/guess what user was installed by your charm
 
 
 
<code>ssh -i /home/user/.ssh/id_rsa -o IdentitiesOnly=true -vvv ubuntu@ec2-55-5-555-55.compute-1.amazonaws.com</code>
 
 
 
The above 'recipe' installs [https://jujucharms.com/mediawiki/trusty/3 this MediaWiki charm] which has been deployed 813 times as of this writing.  BFD.  It didn't work for me (I had to add [https://jujucharms.com/apache2/trusty/13/ Apache]).  Although this charm invokes a2enconf, I don't see any code which installs or verifies Apache2 as a dependency in the [http://bazaar.launchpad.net/~charmers/charms/trusty/mediawiki/trunk/view/head:/hooks/install install hook].  So, yeah, garbage.  They should read the docs about [https://jujucharms.com/docs/1.20/authors-charm-writing how to write a charm]. The example explicitly installs, configures and starts Apache as part of a simple web service.  But the documentation is very sparse. The only "interface" (a primary element of orchestration) that is documented is 'mysql' and even that is barely covered.
 
 
 
 
 
[https://jujucharms.com/wordpress/trusty/2 The Wordpress charm] is [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/files written better] because it works, and actually offers a simple switch between nginx and Apache.  Although it's a bit more 'polished' the WordPress Charm is still [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/view/head:/inc/common a bunch of bash scripts] that end up installing things all over the place (standard locations?).  It installs [http://php-fpm.org/ php-fpm] (FastCGI Process Manager, which is an alternative PHP FastCGI implementation) It does use git, but is it configurable as to who/what/where you can pull from? I figured out that for the Wordpress charm, you can see the 'components' in the [http://bazaar.launchpad.net/~charmers/charms/trusty/wordpress/trunk/files/head:/files/charm/ 'charm' directory].
 
 
 
In general, I'm '''very''' unimpressed with the implementation of the Charm Store.  The underlying technology doesn't seem fully baked either, but I profess that I didn't look into it much.
 
 
 
 
 
== Help ==
 
<source lang="bash">
 
juju help
 
</source>
 
<pre>
 
 
 
Juju -- devops distilled
 
https://juju.ubuntu.com/
 
 
 
Juju provides easy, intelligent service orchestration on top of environments
 
such as Amazon EC2, HP Cloud, OpenStack, MaaS, or your own local machine.
 
 
 
Basic commands:
 
  juju init            generate boilerplate configuration for juju environments
 
  juju bootstrap        start up an environment from scratch
 
 
 
  juju deploy          deploy a new service
 
  juju add-relation    add a relation between two services
 
  juju expose          expose a service
 
 
 
  juju help bootstrap  more help on e.g. bootstrap command
 
  juju help commands    list all commands
 
  juju help glossary    glossary of terms
 
  juju help topics      list all help topics
 
 
 
Provider information:
 
  juju help azure-provider      use on Windows Azure
 
  juju help ec2-provider        use on Amazon EC2
 
  juju help hpcloud-provider    use on HP Cloud
 
  juju help local-provider      use on this computer
 
  juju help openstack-provider  use on OpenStack
 
</pre>
 
 
 
=== Commands ===
 
<source lang="bash">
 
juju help commands
 
</source>
 
<pre>
 
add-machine          alias for 'machine add'
 
add-relation        add a relation between two services
 
add-unit            add one or more units of an already-deployed service
 
api-endpoints        print the API server address(es)
 
api-info            print the field values used to connect to the environment's API servers
 
authorised-keys      alias for 'authorized-keys'
 
authorized-keys      manage authorized ssh keys
 
backups              create, manage, and restore backups of juju's state
 
block                block an operation that would alter a running environment
 
bootstrap            start up an environment from scratch
 
cached-images        manage cached os images
 
debug-hooks          launch a tmux session to debug a hook
 
debug-log            display the consolidated log file
 
deploy              deploy a new service
 
destroy-environment  terminate all machines and other associated resources for an environment
 
destroy-machine      alias for 'machine remove'
 
destroy-relation    alias for 'remove-relation'
 
destroy-service      alias for 'remove-service'
 
destroy-unit        alias for 'remove-unit'
 
ensure-availability  ensure the availability of Juju state servers
 
env                  alias for 'switch'
 
environment          manage environments
 
expose              expose a service
 
generate-config      alias for 'init'
 
get                  get service configuration options
 
get-constraints      view constraints on the environment or a service
 
get-env              alias for 'environment get'
 
get-environment      alias for 'environment get'
 
help                show help on a command or other topic
 
help-tool            show help on a juju charm tool
 
init                generate boilerplate configuration for juju environments
 
machine              manage machines
 
publish              publish charm to the store
 
remove-machine      alias for 'machine remove'
 
remove-relation      remove a relation between two services
 
remove-service      remove a service from the environment
 
remove-unit          remove service units from the environment
 
resolved            marks unit errors resolved
 
retry-provisioning  retries provisioning for failed machines
 
run                  run the commands on the remote targets specified
 
scp                  launch a scp command to copy files to/from remote machine(s)
 
set                  set service config options
 
set-constraints      set constraints on the environment or a service
 
set-env              alias for 'environment set'
 
set-environment      alias for 'environment set'
 
ssh                  launch an ssh shell on a given unit or machine
 
stat                alias for 'status'
 
status              output status information about an environment
 
switch              show or change the default juju environment name
 
sync-tools          copy tools from the official tool store into a local environment
 
terminate-machine    alias for 'machine remove'
 
unblock              unblock an operation that would alter a running environment
 
unexpose            unexpose a service
 
unset                set service config options back to their default
 
unset-env            alias for 'environment unset'
 
unset-environment    alias for 'environment unset'
 
upgrade-charm        upgrade a service's charm
 
upgrade-juju        upgrade the tools in a juju environment
 
user                manage user accounts and access control
 
version              print the current version
 
</pre>
 
 
 
 
 
Setting up a MediaWiki instance with Juju, using the https://jujucharms.com/mediawiki/trusty/3 charm was completely unacceptable.  The charm doesn't even setup a web server environment at all so it doesn't work "out of the box".  When I specified an Apache2 charm https://jujucharms.com/apache2/trusty/13/ the configuration has a miscompiled PHP and also conflicting configurations (ServerLimit, MaxRequestWorkers) that causes errors in the log.
 
  
<pre>
 
root@ip-172-31-57-182:~# /usr/sbin/apache2 -S
 
[Thu Apr 09 13:42:06.748287 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
 
[Thu Apr 09 13:42:06.748800 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_PID_FILE} is not defined
 
[Thu Apr 09 13:42:06.749138 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_RUN_USER} is not defined
 
[Thu Apr 09 13:42:06.749457 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
 
[Thu Apr 09 13:42:06.749808 2015] [core:warn] [pid 2247] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
 
[Thu Apr 09 13:42:06.786167 2015] [:crit] [pid 2247:tid 139742374446976] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
 
AH00013: Pre-configuration failed
 
root@ip-172-31-57-182:~# /usr/sbin/apache2 -M
 
[Thu Apr 09 13:42:19.687521 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
 
[Thu Apr 09 13:42:19.688010 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_PID_FILE} is not defined
 
[Thu Apr 09 13:42:19.688345 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_RUN_USER} is not defined
 
[Thu Apr 09 13:42:19.688604 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
 
[Thu Apr 09 13:42:19.688886 2015] [core:warn] [pid 2248] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
 
[Thu Apr 09 13:42:19.700934 2015] [:crit] [pid 2248:tid 140047498663808] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
 
AH00013: Pre-configuration failed
 
</pre>
 
  
 
{{References}}
 
{{References}}

Latest revision as of 03:20, 21 December 2023

Juju (formerly Ensemble) is an open source service orchestration management tool developed by Canonical Ltd., the company behind Ubuntu. Juju allows software to be quickly deployed, integrated and scaled on a wide choice of cloud services or servers.

Juju can deploy to LXC [1] (for local environments), OpenStack (for HP Cloud), Windows Azure, Joyent or Amazon EC2

Links[edit | edit source]

  1. https://juju.is/
  2. https://juju.is/docs/juju/tutorial
  3. https://charmhub.io/


References[edit source]

  1. See also: Docker