Merge "Pull in updates from larsks heat template repo"

This commit is contained in:
Jenkins 2015-02-10 23:50:32 +00:00 committed by Gerrit Code Review
commit 03769f8499
12 changed files with 202 additions and 59 deletions

View File

@ -22,9 +22,9 @@ These templates will work with the Juno version of Heat.
### Guest image ### Guest image
These templates will work with either CentOS Atomic Host or Fedora 21 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 Atomic. You will need an image dated later than 2015-01-20 in order
will need to create an image that includes Flannel by booting an to have both the `flannel` package installed and the appropriately
existing image, running `atomic ugprade`, and saving the new image. configured `docker.service` unit.
You can enable the VXLAN backend for flannel by setting the You can enable the VXLAN backend for flannel by setting the
"flannel_use_vxlan" parameter to "true", but I have run into kernel "flannel_use_vxlan" parameter to "true", but I have run into kernel

View File

@ -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 <<EOF
DOCKER_STORAGE_OPTIONS="--storage-opt dm.blkdiscard=false --storage-opt dm.metadatadev=/dev/docker/metadata --storage-opt dm.datadev=/dev/docker/data --storage-opt dm.fs=xfs"
EOF

View File

@ -3,19 +3,30 @@
. /etc/sysconfig/heat-params . /etc/sysconfig/heat-params
. /etc/sysconfig/flanneld . /etc/sysconfig/flanneld
FLANNEL_JSON=/etc/sysconfig/flannel-network.json
if [ "$FLANNEL_USE_VXLAN" == "true" ]; then if [ "$FLANNEL_USE_VXLAN" == "true" ]; then
use_vxlan=1 use_vxlan=1
fi fi
# Generate a flannel configuration that we will # Generate a flannel configuration that we will
# store into etcd using curl. # store into etcd using curl.
cat > /etc/sysconfig/flannel-network.json <<EOF cat > $FLANNEL_JSON <<EOF
{ {
"Network": "$FLANNEL_NETWORK_CIDR", "Network": "$FLANNEL_NETWORK_CIDR",
"Subnetlen": $FLANNEL_NETWORK_SUBNETLEN${use_vxlan:+", "Subnetlen": $FLANNEL_NETWORK_SUBNETLEN
EOF
if [ "$use_vxlan" = 1 ]; then
cat >> $FLANNEL_JSON <<EOF
,
"Backend": { "Backend": {
"Type": "vxlan" "Type": "vxlan"
}"} }
EOF
fi
cat >> $FLANNEL_JSON <<EOF
} }
EOF EOF

View File

@ -1,65 +1,58 @@
#cloud-config #cloud-config
merge_how: dict(recurse_array)+list(append) merge_how: dict(recurse_array)+list(append)
bootcmd:
- mkdir -p /etc/systemd/system/docker.service.d
- mkdir -p /etc/systemd/system/flanneld.service.d
write_files: write_files:
- path: /etc/systemd/system/docker.service - path: /usr/local/bin/flannel-docker-bridge
owner: "root:root"
permissions: "0644"
content: |
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket wait-for-flanneld.service
Requires=docker.socket wait-for-flanneld.service
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
# This EnvironmentFile is required.
EnvironmentFile=/run/flannel/subnet.env
# This works around https://github.com/docker/docker/issues/9468
Environment=DOCKER_CERT_PATH=/etc/docker
ExecStart=/usr/bin/docker -d -H fd:// --bip $FLANNEL_SUBNET --mtu $FLANNEL_MTU $OPTIONS $DOCKER_STORAGE_OPTIONS
Restart=on-failure
LimitNOFILE=1048576
LimitNPROC=1048576
[Install]
WantedBy=multi-user.target
- path: /usr/local/bin/wait-for-flanneld
owner: "root:root" owner: "root:root"
permissions: "0755" permissions: "0755"
content: | content: |
#!/bin/sh #!/bin/sh
# This script waits for flannel to provide the /run/flannel/subnet.env if ! [ "$FLANNEL_SUBNET" ] && [ "$FLANNEL_MTU" ] ; then
# file. This can be used to synchronize docker startup with the echo "ERROR: missing required environment variables." >&2
# availability of this file. exit 1
fi
while ! [ -f /run/flannel/subnet.env ]; do
echo "waiting for flanneld" mkdir -p /run/flannel/
sleep 1 cat > /run/flannel/docker <<EOF
done DOCKER_NETWORK_OPTIONS="--bip=$FLANNEL_SUBNET --mtu=$FLANNEL_MTU"
EOF
echo "flanneld is active" - path: /etc/systemd/system/flannel-docker-bridge.service
exit 0
- path: /etc/systemd/system/wait-for-flanneld.service
owner: "root:root" owner: "root:root"
permissions: "0644" permissions: "0644"
content: | content: |
[Unit] [Unit]
Description=Wait for flanneld to provide subnet/mtu information After=flanneld.service
After=network.target flanneld.service Before=docker.service
Requires=flanneld.service Requires=flanneld.service
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=/usr/local/bin/wait-for-flanneld EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/local/bin/flannel-docker-bridge
[Install] [Install]
WantedBy=multi-user.target WantedBy=docker.service
- path: /etc/systemd/system/docker.service.d/flannel.conf
owner: "root:root"
permissions: "0644"
content: |
[Unit]
Requires=flannel-docker-bridge.service
After=flannel-docker-bridge.service
[Service]
EnvironmentFile=/run/flannel/docker
- path: /etc/systemd/system/flanneld.service.d/flannel-docker-bridge.conf
owner: "root:root"
permissions: "0644"
content: |
[Unit]
Requires=flannel-docker-bridge.service
Before=flannel-docker-bridge.service
[Install]
Also=flannel-docker-bridge.service

View File

@ -1,5 +1,8 @@
#!/bin/sh #!/bin/sh
# make sure we pick up any modified unit files
systemctl daemon-reload
echo starting services echo starting services
for service in etcd kube-apiserver kube-scheduler kube-controller-manager; do for service in etcd kube-apiserver kube-scheduler kube-controller-manager; do
echo "activating service $service" echo "activating service $service"

View File

@ -7,7 +7,10 @@ echo "stopping docker"
systemctl stop docker systemctl stop docker
ip link del docker0 ip link del docker0
for service in wait-for-flanneld flanneld docker.socket docker kubelet kube-proxy; do # make sure we pick up any modified unit files
systemctl daemon-reload
for service in flanneld docker.socket docker kubelet kube-proxy; do
echo "activating service $service" echo "activating service $service"
systemctl enable $service systemctl enable $service
systemctl --no-block start $service systemctl --no-block start $service

View File

@ -0,0 +1,46 @@
#cloud-config
merge_how: dict(recurse_array)+list(append)
write_files:
- path: /usr/local/bin/flannel-config
owner: "root:root"
permissions: "0755"
content: |
#!/bin/sh
: ${FLANNEL_JSON:=/etc/sysconfig/flannel-network.json}
if ! [ -f "$FLANNEL_JSON" ]; then
echo "ERROR: missing network configuration file" >&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

View File

@ -15,8 +15,7 @@ write_files:
id: web id: web
containers: containers:
- name: web - name: web
image: larsks/onehttpd image: larsks/thttpd
command: [/onehttpd, -p, 80, /data]
ports: ports:
- containerPort: 80 - containerPort: 80
- path: /etc/kubernetes/examples/web.service - path: /etc/kubernetes/examples/web.service

View File

@ -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 <<EOF
{
"Network": "$FLANNEL_NETWORK_CIDR",
"Subnetlen": $FLANNEL_NETWORK_SUBNETLEN
EOF
if [ "$use_vxlan" = 1 ]; then
cat >> $FLANNEL_JSON <<EOF
,
"Backend": {
"Type": "vxlan"
}
EOF
fi
cat >> $FLANNEL_JSON <<EOF
}
EOF

View File

@ -8,4 +8,5 @@ write_files:
KUBE_ALLOW_PRIV="$KUBE_ALLOW_PRIV" KUBE_ALLOW_PRIV="$KUBE_ALLOW_PRIV"
KUBE_MASTER_IP="$KUBE_MASTER_IP" KUBE_MASTER_IP="$KUBE_MASTER_IP"
WAIT_HANDLE="$WAIT_HANDLE" WAIT_HANDLE="$WAIT_HANDLE"
DOCKER_VOLUME="$DOCKER_VOLUME"

View File

@ -195,11 +195,17 @@ resources:
group: ungrouped group: ungrouped
config: {get_file: fragments/configure-kubernetes-master.sh} config: {get_file: fragments/configure-kubernetes-master.sh}
configure_flannel: write_flannel_config:
type: "OS::Heat::SoftwareConfig" type: "OS::Heat::SoftwareConfig"
properties: properties:
group: ungrouped group: ungrouped
config: {get_file: fragments/configure-flannel.sh} config: {get_file: fragments/write-flannel-config.sh}
flannel_config_service:
type: "OS::Heat::SoftwareConfig"
properties:
group: ungrouped
config: {get_file: fragments/flannel-config.service.yaml}
enable_services: enable_services:
type: "OS::Heat::SoftwareConfig" type: "OS::Heat::SoftwareConfig"
@ -240,7 +246,8 @@ resources:
- config: {get_resource: kube_user} - config: {get_resource: kube_user}
- config: {get_resource: configure_kubernetes} - config: {get_resource: configure_kubernetes}
- config: {get_resource: enable_services} - config: {get_resource: enable_services}
- config: {get_resource: configure_flannel} - config: {get_resource: write_flannel_config}
- config: {get_resource: flannel_config_service}
- config: {get_resource: kube_examples} - config: {get_resource: kube_examples}
- config: {get_resource: cfn_signal} - config: {get_resource: cfn_signal}
@ -276,6 +283,7 @@ resources:
fixed_ips: fixed_ips:
- subnet_id: - subnet_id:
get_resource: fixed_subnet get_resource: fixed_subnet
replacement_policy: AUTO
kube_master_floating: kube_master_floating:
type: "OS::Neutron::FloatingIP" type: "OS::Neutron::FloatingIP"

View File

@ -9,7 +9,7 @@ parameters:
server_image: server_image:
type: string type: string
default: fedora-20-x86_64-updated default: centos-7-atomic-20150120
description: glance image used to boot the server description: glance image used to boot the server
server_flavor: server_flavor:
@ -34,6 +34,13 @@ parameters:
constraints: constraints:
- allowed_values: ["true", "false"] - allowed_values: ["true", "false"]
docker_volume_size:
type: string
description: >
size of a cinder volume to allocate to docker for container/image
storage
default: 25
# The following are all generated in the parent template. # The following are all generated in the parent template.
kube_master_ip: kube_master_ip:
type: string type: string
@ -90,6 +97,7 @@ resources:
"$KUBE_ALLOW_PRIV": {get_param: kube_allow_priv} "$KUBE_ALLOW_PRIV": {get_param: kube_allow_priv}
"$KUBE_MASTER_IP": {get_param: kube_master_ip} "$KUBE_MASTER_IP": {get_param: kube_master_ip}
"$WAIT_HANDLE": {get_resource: node_wait_handle} "$WAIT_HANDLE": {get_resource: node_wait_handle}
"$DOCKER_VOLUME": {get_resource: docker_volume}
add_to_docker_group: add_to_docker_group:
type: "OS::Heat::SoftwareConfig" type: "OS::Heat::SoftwareConfig"
@ -97,6 +105,12 @@ resources:
group: ungrouped group: ungrouped
config: {get_file: fragments/add-to-docker-group.sh} 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: configure_kubernetes_minion:
type: "OS::Heat::SoftwareConfig" type: "OS::Heat::SoftwareConfig"
properties: properties:
@ -148,6 +162,7 @@ resources:
- config: {get_resource: kube_user} - config: {get_resource: kube_user}
- config: {get_resource: kube_examples} - config: {get_resource: kube_examples}
- config: {get_resource: add_to_docker_group} - config: {get_resource: add_to_docker_group}
- config: {get_resource: configure_docker_storage}
- config: {get_resource: configure_kubernetes_minion} - config: {get_resource: configure_kubernetes_minion}
- config: {get_resource: docker_service} - config: {get_resource: docker_service}
- config: {get_resource: enable_services} - config: {get_resource: enable_services}
@ -178,6 +193,7 @@ resources:
fixed_ips: fixed_ips:
- subnet_id: - subnet_id:
get_param: fixed_subnet_id get_param: fixed_subnet_id
replacement_policy: AUTO
kube_node_floating: kube_node_floating:
type: "OS::Neutron::FloatingIP" type: "OS::Neutron::FloatingIP"
@ -187,6 +203,17 @@ resources:
port_id: port_id:
get_resource: kube_node_eth0 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: outputs:
kube_node_ip: kube_node_ip: