diff --git a/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-master.sh b/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-master.sh index 019893b536..c973a95588 100644 --- a/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-master.sh +++ b/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-master.sh @@ -21,7 +21,3 @@ sed -i ' sed -i ' /^KUBELET_ADDRESSES=/ s/=.*/="--machines='""'"/ ' /etc/kubernetes/controller-manager - -sed -i ' -/^FLANNEL_ETCD=/ s/=.*/="http:\/\/127.0.0.1:2379"/ -' /etc/sysconfig/flanneld diff --git a/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-minion.sh b/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-minion.sh index 9593c23531..8ae10b6211 100644 --- a/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-minion.sh +++ b/magnum/templates/heat-kubernetes/fragments/configure-kubernetes-minion.sh @@ -27,9 +27,11 @@ sed -i ' /^KUBE_MASTER=/ s/=.*/="--master='"$KUBE_MASTER_IP"':8080"/ ' /etc/kubernetes/apiserver +if [ "$NETWORK_DRIVER" == "flannel" ]; then sed -i ' /^FLANNEL_ETCD=/ s|=.*|="http://'"$ETCD_SERVER_IP"':2379"| ' /etc/sysconfig/flanneld +fi cat >> /etc/environment <&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/magnum/templates/heat-kubernetes/fragments/network-config-service.sh b/magnum/templates/heat-kubernetes/fragments/network-config-service.sh new file mode 100644 index 0000000000..2c8dc1beaf --- /dev/null +++ b/magnum/templates/heat-kubernetes/fragments/network-config-service.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +. /etc/sysconfig/heat-params + +if [ "$NETWORK_DRIVER" == "flannel" ]; then + +. /etc/sysconfig/flanneld + +FLANNEL_CONFIG_BIN=/usr/local/bin/flannel-config +FLANNEL_CONFIG_SERVICE=/etc/systemd/system/flannel-config.service +FLANNEL_JSON=/etc/sysconfig/flannel-network.json + +echo "creating $FLANNEL_CONFIG_BIN" +cat > $FLANNEL_CONFIG_BIN <&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 +EOF + +cat > $FLANNEL_CONFIG_SERVICE <> $FLANNEL_DOCKER_BRIDGE_BIN <&2 + exit 1 +fi + +mkdir -p /run/flannel/ +cat > /run/flannel/docker <> $FLANNEL_DOCKER_BRIDGE_SERVICE <> $DOCKER_FLANNEL_CONF <> $FLANNEL_DOCKER_BRIDGE_CONF <> $FLANNEL_JSON < @@ -140,6 +143,7 @@ resources: template: {get_file: fragments/write-heat-params-master.yaml} params: "$KUBE_ALLOW_PRIV": {get_param: kube_allow_priv} + "$NETWORK_DRIVER": {get_param: network_driver} "$FLANNEL_NETWORK_CIDR": {get_param: flannel_network_cidr} "$FLANNEL_NETWORK_SUBNETLEN": {get_param: flannel_network_subnetlen} "$FLANNEL_USE_VXLAN": {get_param: flannel_use_vxlan} @@ -158,17 +162,17 @@ resources: group: ungrouped config: {get_file: fragments/configure-kubernetes-master.sh} - write_flannel_config: + write_network_config: type: OS::Heat::SoftwareConfig properties: group: ungrouped - config: {get_file: fragments/write-flannel-config.sh} + config: {get_file: fragments/write-network-config.sh} - flannel_config_service: + network_config_service: type: OS::Heat::SoftwareConfig properties: group: ungrouped - config: {get_file: fragments/flannel-config.service.yaml} + config: {get_file: fragments/network-config-service.sh} enable_services: type: OS::Heat::SoftwareConfig @@ -216,8 +220,8 @@ resources: - config: {get_resource: kube_user} - config: {get_resource: configure_kubernetes} - config: {get_resource: enable_services} - - config: {get_resource: write_flannel_config} - - config: {get_resource: flannel_config_service} + - config: {get_resource: write_network_config} + - config: {get_resource: network_config_service} - config: {get_resource: kube_examples} - config: {get_resource: master_wc_notify} diff --git a/magnum/templates/heat-kubernetes/kubeminion.yaml b/magnum/templates/heat-kubernetes/kubeminion.yaml index d0eafbc533..57a87e1444 100644 --- a/magnum/templates/heat-kubernetes/kubeminion.yaml +++ b/magnum/templates/heat-kubernetes/kubeminion.yaml @@ -53,6 +53,9 @@ parameters: fixed_subnet: type: string description: Subnet from which to allocate fixed addresses. + network_driver: + type: string + description: network driver to use for instantiating container networks wait_condition_timeout: type: number description : > @@ -96,6 +99,7 @@ resources: $KUBE_MASTER_IP: {get_param: kube_master_ip} $ETCD_SERVER_IP: {get_param: etcd_server_ip} $DOCKER_VOLUME: {get_resource: docker_volume} + $NETWORK_DRIVER: {get_param: network_driver} configure_docker_storage: type: OS::Heat::SoftwareConfig @@ -127,11 +131,11 @@ resources: group: ungrouped config: {get_file: fragments/kube-examples.yaml} - docker_service: + network_service: type: OS::Heat::SoftwareConfig properties: group: ungrouped - config: {get_file: fragments/docker.service.yaml} + config: {get_file: fragments/network-service.sh} enable_services: type: OS::Heat::SoftwareConfig @@ -168,7 +172,7 @@ resources: - config: {get_resource: configure_docker_storage} - config: {get_resource: kube_register} - config: {get_resource: configure_kubernetes_minion} - - config: {get_resource: docker_service} + - config: {get_resource: network_service} - config: {get_resource: enable_services} - config: {get_resource: minion_wc_notify}