move keepalived from infra and update config

This commit is contained in:
Bob Killen 2017-07-28 14:32:52 -04:00
parent 99e1add6b4
commit 9dfcd9be5b
No known key found for this signature in database
GPG Key ID: 03FB8A8615239E6D
8 changed files with 119 additions and 82 deletions

View File

@ -1,40 +0,0 @@
.catalog:
name: "keepalived"
version: v1.0.0
description: "Autostart Keepalived (ONLY IF YOU KNOW WHAT YOU'RE DOING)"
minimum_rancher_version: v0.46.0
uuid: keepalived:v1.0.0
questions:
- variable: host_label
label: "Keepalived Host Label"
description: "Host Label used to schedule keepalived master and backup instances"
type: "string"
default: "edge"
required: true
- variable: master_host_label
label: "Master Host Label"
description: "The value of the Keepalived Host Label to signifify the master instance"
type: "string"
default: "MASTER"
required: true
- variable: backup_host_label
label: "Backup Host Label"
description: "The value of the Keepalived Host Label to signifify the backup instance"
type: "string"
default: "BACKUP"
required: true
- variable: master_ip
description: "Host IP of master edge node"
label: "Master IP"
type: "string"
required: true
- variable: backup_ip
description: "Host IP of backup edge node"
label: "Backup IP"
type: "string"
required: true
- variable: virtual_ip
label: "Virtual IP"
description: "Virtual IP to be created."
type: "string"
required: true

View File

@ -1,25 +0,0 @@
## Keepalived
Manages VRRP failover within Rancher.
This is useful for highly available load balancers or other HA services that you can't load balance.
### Form Fields
| Variable | Description |
| ----------------- | ---------------------------------------- |
| Host Label | Host Label used to schedule keepalived master and backup instances |
| Master Host Label | Keepalived Host Label to signifify the master instance |
| Backup Host Label | Keepalived Host Label to signifify the backup instance |
| Master IP | Host IP of master edge node |
| Backup IP | Host IP of backup edge node |
| Virtual IP | Virtual IP to be created |
### Advanced Usage
This service is intended to be deployed to edge nodes with a MASTER and BACKUP deployed respectively.
Additional IPs should be managed via environment variables once deployed with entries following the below pattern:
`KEEPALIVED_VIRTUAL_IPADDRESS_[0-9]{1,3}`
Format should mimic the ip command
`10.255.33.100/24 dev eth0`

View File

@ -1,7 +0,0 @@
name: keepalived
description: |
KeepaliveD, provides VRRP failover across multiple nodes
version: v1.0.0
category: Networking
labels:
io.rancher.orchestration.supported: 'cattle,mesos,swarm,kubernetes'

View File

@ -0,0 +1,48 @@
# Keepalived
This catalog recipe enables unicast VRRP based failover for one or more floating IP Addresses. It's intended deployment is for use on a pair edge or ingress nodes where forward-facing load-balancers or other like services will be scheduled.
### Form Fields
| Variable | Default | Description |
|:---------------------:|:-----------:|:--------------------------------------------------------------------------------------:|
| **Host Label Name** | `vrrp_role` | Host label key name used to schedule keepalived master and backup instances. |
| **Master Label** | `master` | The value of the keepalived host Label to signify the master instance. |
| **Backup Label** | `backup` | The value of the keepalived host Label to signify the backup instance. |
| **Interface Name** | `eth0` | The host interface that keepalived will monitor and use for VRRP traffic. |
| **Virtual Router ID** | `2` | A unique number from 0 to 255 that should identify the VRRP group. |
| **Master IP** | | The IP on the master host that the keepalived daemon should bind to. |
| **Backup IP** | | The IP on the backup host that the keepalived daemon should bind to. |
| **Virtual IP** | | Virtual IP to be created. Must be in ip notation: `<ipaddress>/<mask> dev <interface>` |
### Usage
This service is intended to be deployed to edge nodes with a `master` and `backup` deployed respectively. One or more Virtual IPs may then be bound to hosts. These hosts should have an additional label used for load-balancer scheduling e.g. `ingress=true`
#### Adding an HA Load Balancer Service
**Ensure your edge hosts have an additional host label before proceeding**
1. From the Stack menu add a new `Load Balancer`.
2. Set `Scale` to be `Always run one instance of this container on every host`.
3. Add an appropriate `Name` and `Description`.
4. In the `Port Rules` section, click `Show host IP address options.` This enables the Host IP Field.
5. Update the `Port Rules` with the `Host IP` field set to your `Virtual IP` as defined in the keepalived config. Configure the rest of the fields as needed for your application.
6. Click on the `Scheduling` tab and click on `Add Scheduling Rule`.
7. Create a rule where "The host `must` have a `host label` of `<edge node host label>` = `<edge node host label value>`.
8. Click Create.
#### Adding additional Virtual IPs to the keepalived Service
1. From the Stack menu expand the `keepalived` service.
2. Select upgrade on the `keepalived-backup` service.
3. Add a new Environment Variable called `KEEPALIVED_VIRTUAL_IPADDRESS_<number>`. Where `<number>` should be a unique value from 0-999. e.g. `KEEPALIVED_VIRTUAL_IPADDRESS_2`.
4. Set the value to be a **QUOTED STRING** with an additional virtual IP following the standard ip format of `<ipaddress>/<mask> dev <interface>`. e.g. `10.255.33.102/24 dev eth0`.
5. Press `Upgrade`.
6. Repeat the same steps for the `keepalived-master` service.
### Troubleshooting
For further help see the main [arc-ts/keepalived git repo](https://github.com/arc-ts/keepalived)

View File

@ -2,36 +2,40 @@ version: '2'
services: services:
keepalived-master: keepalived-master:
restart: always restart: always
image: arcts/keepalived image: arcts/keepalived:1.1.0
network_mode: host network_mode: host
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
environment: environment:
KEEPALIVED_AUTOCONF: true KEEPALIVED_AUTOCONF: true
KEEPALIVED_STATE: MASTER KEEPALIVED_STATE: MASTER
KEEPALIVED_INTERFACE: eth0 KEEPALIVED_INTERFACE: ${interface}
KEEPALIVED_VIRTUAL_ROUTER_ID: 2 KEEPALIVED_VIRTUAL_ROUTER_ID: ${router_id}
KEEPALIVED_UNICAST_SRC_IP: ${master_ip} KEEPALIVED_UNICAST_SRC_IP: ${master_ip}
KEEPALIVED_UNICAST_PEER_0: ${backup_ip} KEEPALIVED_UNICAST_PEER_0: ${backup_ip}
KEEPALIVED_TRACK_INTERFACE_1: eth0 KEEPALIVED_TRACK_INTERFACE_1: ${interface}
KEEPALIVED_VIRTUAL_IPADDRESS_1: "\"${virtual_ip}\"" KEEPALIVED_VIRTUAL_IPADDRESS_1: "\"${virtual_ip}\""
labels: labels:
io.rancher.scheduler.affinity:host_label: ${host_label}=${master_host_label} io.rancher.scheduler.affinity:host_label: ${host_label}=${master_label}
sysctls:
- net.ipv4.ip_nonlocal_bind=1
keepalived-backup: keepalived-backup:
restart: always restart: always
image: arcts/keepalived image: arcts/keepalived:1.1.0
network_mode: host network_mode: host
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
environment: environment:
KEEPALIVED_AUTOCONF: true KEEPALIVED_AUTOCONF: true
KEEPALIVED_STATE: BACKUP KEEPALIVED_STATE: BACKUP
KEEPALIVED_INTERFACE: eth0 KEEPALIVED_INTERFACE: ${interface}
KEEPALIVED_VIRTUAL_ROUTER_ID: 2 KEEPALIVED_VIRTUAL_ROUTER_ID: ${router_id}
KEEPALIVED_UNICAST_SRC_IP: ${backup_ip} KEEPALIVED_UNICAST_SRC_IP: ${backup_ip}
KEEPALIVED_UNICAST_PEER_0: ${master_ip} KEEPALIVED_UNICAST_PEER_0: ${master_ip}
KEEPALIVED_TRACK_INTERFACE_1: eth0 KEEPALIVED_TRACK_INTERFACE_1: ${interface}
KEEPALIVED_VIRTUAL_IPADDRESS_1: "\"${virtual_ip}\"" KEEPALIVED_VIRTUAL_IPADDRESS_1: "\"${virtual_ip}\""
labels: labels:
io.rancher.scheduler.affinity:host_label: ${host_label}=${backup_host_label} io.rancher.scheduler.affinity:host_label: ${host_label}=${backup_label}
sysctls:
- net.ipv4.ip_nonlocal_bind=1

View File

@ -0,0 +1,52 @@
.catalog:
name: "keepalived"
version: v1.0.1
description: "Keepalived VRRP based HA service."
minimum_rancher_version: v0.46.0
uuid: keepalived-1
questions:
- variable: "host_label"
description: "Host label key name used to schedule keepalived master and backup instances."
label: "Host Label Name:"
type: "string"
default: "vrrp_role"
required: true
- variable: "master_label"
description: "The value of the keepalived host Label to signify the master instance."
label: "Master Label:"
type: "string"
default: "master"
required: true
- variable: "backup_label"
description: "The value of the keepalived host Label to signify the backup instance."
label: "Backup Label:"
type: "string"
default: "backup"
required: true
- variable: "interface"
description: "The name of the host interface."
label: "Interface Name:"
type: "string"
default: "eth0"
required: true
- variable: "router_id"
description: "The virtual Router ID to assign to the VRRP Pair."
label: "Virtual Router ID:"
type: "int"
default: "2"
required: true
- variable: "master_ip"
description: "Host IP of master node"
label: "Master IP:"
type: "string"
required: true
- variable: "backup_ip"
description: "Host IP of backup node"
label: "Backup IP:"
type: "string"
required: true
- variable: "virtual_ip"
description: "Virtual IP to be created. MUST be in ip notation: <IPADDRESS>/<MASK> dev <INTERFACE>"
label: "Virtual IP:"
type: "string"
required: true

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,5 @@
name: keepalived
description: |
Keepalived enables services to be deployed in HA with VRRP based failover across multiple hosts.
version: v1.0.1
category: Networking