From 108bb361afc45b18a0bb0b866b53d11d2746d77e Mon Sep 17 00:00:00 2001 From: digambar Date: Wed, 4 Feb 2015 22:38:16 +0530 Subject: [PATCH] Pull in updates from larsks heat template repo These were the commits pulled from larsks github repo(s) ef48d0 configure flannel via systemd unit 4e1b7a Merge pull request #11 from hongbin/replacement_policy 02ea53 Set port replacement_policy to AUTO b06de8 call daemon-reload before starting services c265dd fix json syntax problem 88a8bd configure cinder volume for docker storage 7ae6e5 default server_image wasn't useful 809d9b updated requirements in README 6595da integrate wait-for-flanneld into docker.service.yaml cb51ae use flanneld sysconfig for etcd url 6cf8b9 added note re: vxlan backend issues on centos 18d9c6 make portal_net address range a parameter 343bde added license efb341 add fix for docker/docker#9468 b235dc use less confusing name for flannel json config 08d873 make vxlan support conditional (+ doc updates) daee9e permit kube api access via services 747d06 add a "minion" default user b1c36c refactor config using software config support 0d981d use centos atomic host 538f7a remove get-image.sh Change-Id: Ibd22a2805328ef76ad3996113b10e82cc1a16a9b Closes-Bug: 1417642 --- .../templates/heat-kubernetes/README.md | 6 +- .../fragments/configure-docker-storage.sh | 20 +++++ .../fragments/configure-flannel.sh | 17 +++- .../fragments/docker.service.yaml | 85 +++++++++---------- .../fragments/enable-services-master.sh | 3 + .../fragments/enable-services-minion.sh | 5 +- .../fragments/flannel-config.service.yaml | 46 ++++++++++ .../fragments/kube-examples.yaml | 3 +- .../fragments/write-flannel-config.sh | 32 +++++++ .../fragments/write-heat-params.yaml | 1 + .../heat-kubernetes/kubecluster.yaml | 14 ++- .../templates/heat-kubernetes/kubenode.yaml | 29 ++++++- 12 files changed, 202 insertions(+), 59 deletions(-) create mode 100644 etc/magnum/templates/heat-kubernetes/fragments/configure-docker-storage.sh create mode 100644 etc/magnum/templates/heat-kubernetes/fragments/flannel-config.service.yaml create mode 100644 etc/magnum/templates/heat-kubernetes/fragments/write-flannel-config.sh diff --git a/etc/magnum/templates/heat-kubernetes/README.md b/etc/magnum/templates/heat-kubernetes/README.md index 7fe3b03b1a..ec898b3519 100644 --- a/etc/magnum/templates/heat-kubernetes/README.md +++ b/etc/magnum/templates/heat-kubernetes/README.md @@ -22,9 +22,9 @@ These templates will work with the Juno version of Heat. ### Guest image These templates will work with either CentOS Atomic Host or Fedora 21 -Atomic. You will need an image dated later than 2015-01-01, or you -will need to create an image that includes Flannel by booting an -existing image, running `atomic ugprade`, and saving the new image. +Atomic. You will need an image dated later than 2015-01-20 in order +to have both the `flannel` package installed and the appropriately +configured `docker.service` unit. You can enable the VXLAN backend for flannel by setting the "flannel_use_vxlan" parameter to "true", but I have run into kernel diff --git a/etc/magnum/templates/heat-kubernetes/fragments/configure-docker-storage.sh b/etc/magnum/templates/heat-kubernetes/fragments/configure-docker-storage.sh new file mode 100644 index 0000000000..91ad9375d1 --- /dev/null +++ b/etc/magnum/templates/heat-kubernetes/fragments/configure-docker-storage.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +. /etc/sysconfig/heat-params + +DOCKER_DEV=/dev/disk/by-id/virtio-${DOCKER_VOLUME:0:20} + +if ! [ -b $DOCKER_DEV ]; then + echo "ERROR: device $DOCKER_DEV does not exist" >&2 + exit 1 +fi + +pvcreate $DOCKER_DEV +vgcreate docker $DOCKER_DEV +lvcreate --wipesignatures y -n data docker -l 95%VG +lvcreate --wipesignatures y -n metadata docker -l 5%VG + +cat > /etc/sysconfig/docker-storage < /etc/sysconfig/flannel-network.json < $FLANNEL_JSON <> $FLANNEL_JSON <> $FLANNEL_JSON <&2 + exit 1 + fi + + mkdir -p /run/flannel/ + cat > /run/flannel/docker <&2 + exit 1 + fi + + if ! [ "$FLANNEL_ETCD" ] && [ "$FLANNEL_ETCD_KEY" ]; then + echo "ERROR: missing required configuration" >&2 + exit 1 + fi + + echo "creating flanneld config in etcd" + while ! curl -sf -L $FLANNEL_ETCD/v2/keys${FLANNEL_ETCD_KEY}/config \ + -X PUT --data-urlencode value@${FLANNEL_JSON}; do + echo "waiting for etcd" + sleep 1 + done + - path: /etc/systemd/system/flannel-config.service + owner: "root:root" + permissions: "0644" + content: | + [Unit] + After=etcd.service + Requires=etcd.service + + [Service] + Type=oneshot + EnvironmentFile=/etc/sysconfig/flanneld + ExecStart=/usr/local/bin/flannel-config + + [Install] + WantedBy=multi-user.target +runcmd: + - systemctl enable flannel-config + - systemctl start --no-block flannel-config + diff --git a/etc/magnum/templates/heat-kubernetes/fragments/kube-examples.yaml b/etc/magnum/templates/heat-kubernetes/fragments/kube-examples.yaml index 3a0e0665a6..fc321c5670 100644 --- a/etc/magnum/templates/heat-kubernetes/fragments/kube-examples.yaml +++ b/etc/magnum/templates/heat-kubernetes/fragments/kube-examples.yaml @@ -15,8 +15,7 @@ write_files: id: web containers: - name: web - image: larsks/onehttpd - command: [/onehttpd, -p, 80, /data] + image: larsks/thttpd ports: - containerPort: 80 - path: /etc/kubernetes/examples/web.service diff --git a/etc/magnum/templates/heat-kubernetes/fragments/write-flannel-config.sh b/etc/magnum/templates/heat-kubernetes/fragments/write-flannel-config.sh new file mode 100644 index 0000000000..04fb30501a --- /dev/null +++ b/etc/magnum/templates/heat-kubernetes/fragments/write-flannel-config.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +. /etc/sysconfig/heat-params +. /etc/sysconfig/flanneld + +FLANNEL_JSON=/etc/sysconfig/flannel-network.json + +if [ "$FLANNEL_USE_VXLAN" == "true" ]; then + use_vxlan=1 +fi + +# Generate a flannel configuration that we will +# store into etcd using curl. +cat > $FLANNEL_JSON <> $FLANNEL_JSON <> $FLANNEL_JSON < + size of a cinder volume to allocate to docker for container/image + storage + default: 25 + # The following are all generated in the parent template. kube_master_ip: type: string @@ -90,6 +97,7 @@ resources: "$KUBE_ALLOW_PRIV": {get_param: kube_allow_priv} "$KUBE_MASTER_IP": {get_param: kube_master_ip} "$WAIT_HANDLE": {get_resource: node_wait_handle} + "$DOCKER_VOLUME": {get_resource: docker_volume} add_to_docker_group: type: "OS::Heat::SoftwareConfig" @@ -97,6 +105,12 @@ resources: group: ungrouped config: {get_file: fragments/add-to-docker-group.sh} + configure_docker_storage: + type: "OS::Heat::SoftwareConfig" + properties: + group: ungrouped + config: {get_file: fragments/configure-docker-storage.sh} + configure_kubernetes_minion: type: "OS::Heat::SoftwareConfig" properties: @@ -148,6 +162,7 @@ resources: - config: {get_resource: kube_user} - config: {get_resource: kube_examples} - config: {get_resource: add_to_docker_group} + - config: {get_resource: configure_docker_storage} - config: {get_resource: configure_kubernetes_minion} - config: {get_resource: docker_service} - config: {get_resource: enable_services} @@ -178,6 +193,7 @@ resources: fixed_ips: - subnet_id: get_param: fixed_subnet_id + replacement_policy: AUTO kube_node_floating: type: "OS::Neutron::FloatingIP" @@ -187,6 +203,17 @@ resources: port_id: get_resource: kube_node_eth0 + docker_volume: + type: "OS::Cinder::Volume" + properties: + size: {get_param: docker_volume_size} + + docker_volume_attach: + type: "OS::Cinder::VolumeAttachment" + properties: + instance_uuid: {get_resource: kube_node} + volume_id: {get_resource: docker_volume} + outputs: kube_node_ip: