Foster Family
Microsoft Azure Support
Azure is now a supported cloud layer, currently supporting the VPC
, FirewallRule
, Server
, ContainerCluster
at beta quality. Azure is a valid target environment for Mu Masters.
To add credentials from an Azure subscription to a Mu environment, use mu-configure
. See also the documentation for adding Azure credentials.
Ansible Groomer
Ansible is now a supported groomer layer. Setting groomer: Ansible
in a Server
or ServerPool
will enable it for a node. Ansible is the default groomer for gem-only installations.
Mu deploys will automatically generate playbooks from the run_list
parameter of appropriate resources, which will be invoked on groom (e.g. by mu-node-manage -m groom
). Mu will look in the roles/
subdirectory of platform repositories for Ansible roles; if no matches are found, it can also query Ansible Galaxy for matching roles.
Example from the Mu demo platform repository:
---
appname: janusgraph
cloud: Google
servers:
- name: dbstore
groomer: Ansible
associate_public_ip: true
platform: debian9
size: n1-standard-2
run_list:
- janusgraph
storage:
- size: 64 # swap
device: /dev/sdb
- size: 512 # /data
device: /dev/sdc
...the janusgraph
role can be found here. To try out this demonstration, make sure that https://github.com/cloudamatic/mu_demo_platform
is listed in your Additional Repositories
with mu-configure.
Adoption
A new utility called mu-adopt
is now available for alpha-testing in Google Cloud. This functionality can crawl existing cloud environments, identify resources that can be managed by Mu, and import them into Mu Baskets of Kittens and/or virtual deployments. This allows, effectively, for Mu to take over management of resources that were created manually, with other tools, or by other Mu installations.
$ mu-adopt --types vpcs
Oct 29 15:15:03 - adoption - Scraping Google/egtlabs for vpcs
Oct 29 15:15:26 - adoption - Found 5 raw vpcs in Google
Oct 29 15:15:26 - adoption - Scraping complete
Oct 29 15:15:26 - mu-adopt - Generating baskets
Oct 29 15:15:31 - adoption - Minimizing footprint of 4 found resources
Oct 29 15:15:32 - mommacat - Creating deploy secret for MUNETWORK-ADOPT-2019102915-QP
Oct 29 15:15:32 - adoption - Committing adopted deployment to /opt/mu/var/deployments/MUNETWORK-ADOPT-2019102915-QP
Oct 29 15:15:32 - mu-adopt - Writing to munetwork.yaml
$ cat munetwork.yaml
---
appname: munetwork
vpcs:
- project: egt-labs-admin
name: k8s-dev-2019091813-si-googlevpc-internet
create_standard_subnets: false
auto_create_subnetworks: true
peers:
- vpc:
type: vpcs
name: k8s-dev-2019091813-si-googlevpc-private
habitat:
id: egt-labs-admin
type: habitats
- project: egt-labs-admin
name: k8s-dev-2019091813-si-googlevpc-private
create_standard_subnets: false
auto_create_subnetworks: true
peers:
- vpc:
type: vpcs
name: k8s-dev-2019091813-si-googlevpc-internet
habitat:
id: egt-labs-admin
type: habitats
- project: egt-labs-admin
name: k8s-dev-2019091814-ou-googlevpc-internet
create_standard_subnets: false
auto_create_subnetworks: true
peers:
- vpc:
type: vpcs
name: k8s-dev-2019091814-ou-googlevpc-private
habitat:
id: egt-labs-admin
type: habitats
- project: egt-labs-admin
name: k8s-dev-2019091814-ou-googlevpc-private
create_standard_subnets: false
auto_create_subnetworks: true
cloud: Google
credentials: egtlabs
mu-adopt
also has a --diff
mode which will search for an existing adopted deployment, and report changes to resources under that deployment's purview for use in auditing.
$ mu-adopt --types users groups roles --diff
Oct 29 17:16:46 - adoption - Scraping Google/egtlabs for users
Oct 29 17:16:54 - adoption - Found 17 raw users in Google
Oct 29 17:16:54 - adoption - Scraping Google/egtlabs for groups
Oct 29 17:16:57 - adoption - Found 108 raw groups in Google
Oct 29 17:16:57 - adoption - Scraping Google/egtlabs for roles
Oct 29 17:17:26 - adoption - Found 29 raw roles in Google
groups =>
gcp-admin =>
members =>
+ [email protected]
Amazon Linux 2 supported for Mu Masters
Full Mu Master installs are now supported on Amazon Linux 2, in addition to CentOS/RHEL 6 and 7, on AWS.
Improved ContainerCluster support
Google - GKE support is now more robust, with largely complete API coverage
AWS - More resilient coverage for EKS, broader support for Fargate, and LoadBalancer integration for ECS
Azure - AKS support added
Example syntax for Fargate/ECS with LoadBalancer integration:
---
appname: fargate
cloud: AWS
vpcs:
- name: vpc
loadbalancers:
- name: ecs-lb
vpc:
vpc_name: vpc
subnet_pref: all_public
listeners:
- lb-port: 80
lb-protocol: HTTP
instance-port: 80
instance-protocol: HTTP
targetgroup: httpd
targetgroups:
- name: httpd
port: 80
proto: HTTP
target_type: ip
ingress_rules:
- port: 80
hosts:
- 0.0.0.0/0
container_clusters:
- name: containers
flavor: Fargate
instance_type: t2.medium
ingress_rules:
- port: 80
hosts:
- 0.0.0.0/0
dependencies:
- name: ecs-lb
type: loadbalancer
containers:
- name: reverse-proxy
image: ryantiger658/httpd-demo:latest
instance_count: 4
port_mappings:
- container_port: 80
host_port: 80
essential: true
loadbalancers:
- name: ecs-lb
container_port: 80
Google Role/User/Group coverage improvements
The Google User
, Role
, and Group
resources have been enhanced significantly. They should now operate in GSuite domains seamlessly, as well as "regular" Google accounts and service accounts. Other resources which require User
or Role
objects now do so by creating first-class sibling objects.
See the mu-configure documentation for details on configuring Mu for use with a GSuite domain.
Quality of life enhancements
- Automated the generation of our custom base images for AWS
- A new Basket of Kittens is available in
install/mu-master.yaml
, which can be used to deploy a full Mu Master into a specific cloud. This can be run from a gem-only installation. - Ansible groomer now presents more metadata to client nodes
MU.availableClouds
method is available for use in ERB blocks in BoKs to list cloud platforms for which Mu has working credentials- When auto-generating VPCs with private subnets, Mu will attempt to allocate an IP block which can be peered with Mu's own VPC (if applicable). Failing this, it will instead attempt to build a bastion host.
- Automatically-generated NATs/Bastions use the
mu-nat
Ansible role, and so are no longer dependent on a Chef installation. - If Slack notifications are configured, messages are now sent for node grooms, groom failures, and node retirements
- All
parameters
in BoKs should now be properly bound to local variables visible to ERB meta-code - Improved config-time validation of some AWS RDS parameters
- major refactoring of repetitive cloud layer resource implementation code into
MU::Cloud
- internal calls to
MU::Cloud
child objects no longer have to know whether they're calling a wrapper object or the underlying resource object
Bugfixes
- We should be able to scale effectively now for extremely large deploys (hundreds of resources)
- Speed improvements for
MU::Config
parsing - Fixes for edge cases in dependency resolution
mu-ssh
should now behave correctly in gem installs- Workarounds for Mu Master environment issues on CentOS 6
mu-upload-chef-artifacts
should be better at helping Berkshelf when the latter gets confused- Generally improved multicloud support
- Google layer should seamlessly paginate long responses from most APIs
scrub_mu_isms
honored somewhat more often/correctlymu-gen-docs
should be less fragile when generating documentation for cloud layers to which it has no credentials- AWS VPC cleanup should be better at handling rogue manually-created resources that prevent deletion
- Bump versions of externally-sourced gems with security advisories
- Automatic installation/discovery of
kubectl
for use withContainerCluster
resources is no longer AWS-specific - Fixed some API bitrot for ElastiCache and ElasticSearch