summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuo Ruijing <ruijing.guo@intel.com>2017-03-13 03:06:56 +0800
committerGuo Ruijing <ruijing.guo@intel.com>2017-03-13 03:13:38 +0800
commit14592c93aa4dd318edd686394bd13a8880c2219b (patch)
treec92a3ff881bc679efd339e32c5a4d003c33a66b9
parent2a5f2db83cc403e36820464225478bf70a946c3d (diff)
Deploy K8s with flannel/weave by fuel plugin
1. add license information 2. add fuel plugin to deploy k8s with flannel/weave: [root@fuel ~]# fuel plugins id | name | version | package_version | releases ---+-----------------+---------+-----------------+--------------------- 9 | fuel-plugin-k8s | 1.0.0 | 4.0.0 | ubuntu (newton-10.0) [root@fuel ~]# fuel nodes id | status | name | cluster | ip | mac | roles | pending_roles | online | group_id ---+--------+------------------+---------+-----------+-------------------+------------+---------------+--------+--------- 15 | ready | Untitled (36:ba) | 5 | 10.20.0.7 | 52:54:00:37:36:ba | compute | | 1 | 5 20 | ready | Untitled (a5:c0) | 5 | 10.20.0.5 | 52:54:00:15:a5:c0 | k8s-master | | 1 | 5 21 | ready | Untitled (f6:58) | 5 | 10.20.0.8 | 42:bc:7f:4a:ed:1e | k8s-slave | | 1 | 5 14 | ready | Untitled (7e:60) | 5 | 10.20.0.6 | 32:20:08:b9:e4:9a | controller | | 1 | 5 [root@fuel ~]# ssh 10.20.0.5 Warning: Permanently added '10.20.0.5' (ECDSA) to the list of known hosts. Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-66-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Last login: Sun Mar 12 19:30:52 2017 from 10.20.0.2 root@node-20:~# kubectl get nodes NAME STATUS AGE node-20.domain.tld Ready,master 50m node-21.domain.tld Ready 14m root@node-20:~# kubectl get pods NAME READY STATUS RESTARTS AGE busybox 1/1 Running 0 11m Change-Id: I4969c08fb35d0e7354a1cacdf89d739fff2e5eba Signed-off-by: Guo Ruijing <ruijing.guo@intel.com>
-rw-r--r--LICENSE13
-rw-r--r--src/fuel-plugin/README.md0
-rwxr-xr-xsrc/fuel-plugin/deployment_scripts/k8s-master-install.sh25
-rwxr-xr-xsrc/fuel-plugin/deployment_scripts/k8s-slave-install.sh15
-rw-r--r--src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp22
-rw-r--r--src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp15
-rw-r--r--src/fuel-plugin/deployment_tasks.yaml44
-rw-r--r--src/fuel-plugin/environment_config.yaml19
-rw-r--r--src/fuel-plugin/metadata.yaml30
-rw-r--r--src/fuel-plugin/node_roles.yaml30
-rw-r--r--src/fuel-plugin/tasks.yaml1
-rw-r--r--src/fuel-plugin/vagrant/Vagrantfile21
-rwxr-xr-xsrc/fuel-plugin/vagrant/build_fuel_plugin.sh8
13 files changed, 243 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8141a5d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright 2017 Open Platform for NFV Project, Inc. and its contributors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/fuel-plugin/README.md b/src/fuel-plugin/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/fuel-plugin/README.md
diff --git a/src/fuel-plugin/deployment_scripts/k8s-master-install.sh b/src/fuel-plugin/deployment_scripts/k8s-master-install.sh
new file mode 100755
index 0000000..6d05ede
--- /dev/null
+++ b/src/fuel-plugin/deployment_scripts/k8s-master-install.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+set -eux
+
+api_advertise_address=$1
+service_cidr=$2
+pod_network=$3
+pod_network_cidr=$4
+token='8c5adc.1cec8dbf339093f0'
+
+curl -s http://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
+deb http://apt.kubernetes.io/ kubernetes-xenial main
+EOF
+
+sudo apt-get update
+sudo apt-get install -y docker.io
+sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
+rm -rf /var/lib/kubelet
+sudo kubeadm init --api-advertise-addresses $api_advertise_address --service-cidr=$service_cidr --pod-network-cidr=$pod_network_cidr --token $token
+
+if [ $pod_network_cidr = 'flannel' ]; then
+ sudo kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
+else
+ sudo kubectl apply -f http://git.io/weave-kube
+fi
diff --git a/src/fuel-plugin/deployment_scripts/k8s-slave-install.sh b/src/fuel-plugin/deployment_scripts/k8s-slave-install.sh
new file mode 100755
index 0000000..cc7652f
--- /dev/null
+++ b/src/fuel-plugin/deployment_scripts/k8s-slave-install.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+set -eux
+
+api_advertise_address=$1
+token='8c5adc.1cec8dbf339093f0'
+
+curl -s http://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
+deb http://apt.kubernetes.io/ kubernetes-xenial main
+EOF
+sudo apt-get update
+sudo apt-get install -y docker.io
+sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
+rm -rf /var/lib/kubelet
+sudo kubeadm join --token $token $api_advertise_address || true
diff --git a/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp b/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp
new file mode 100644
index 0000000..8c52fad
--- /dev/null
+++ b/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp
@@ -0,0 +1,22 @@
+notice('MODULAR: k8s-master-install')
+# get options
+
+$network_metadata = hiera_hash('network_metadata')
+$k8s_nodes_hash = get_nodes_hash_by_roles($network_metadata, ['k8s-master'])
+$k8s_mgmt_ips_hash = get_node_to_ipaddr_map_by_network_role($k8s_nodes_hash, 'management')
+$k8s_mgmt_ips = values($k8s_mgmt_ips_hash)
+
+$network_scheme = hiera_hash('network_scheme')
+$service_cidr = $network_scheme['endpoints']['br-mgmt']['IP']
+
+$k8s_settings = hiera_hash('fuel-plugin-k8s')
+$pod_network = $k8s_settings['pod_network']
+$pod_network_cidr = $k8s_settings['pod_network_cidr']
+
+if $operatingsystem == 'Ubuntu' {
+ exec { 'install k8s master':
+ command => "/etc/fuel/plugins/fuel-plugin-k8s-1.0/k8s-master-install.sh $k8s_mgmt_ips $service_cidr $pod_network $pod_network_cidr",
+ path => '/usr/bin:/usr/sbin:/bin:/sbin',
+ }
+} elsif $operatingsystem == 'CentOS' {
+}
diff --git a/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp b/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp
new file mode 100644
index 0000000..4e4863b
--- /dev/null
+++ b/src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp
@@ -0,0 +1,15 @@
+notice('MODULAR: k8s-slave-install')
+# get options
+
+$network_metadata = hiera_hash('network_metadata')
+$k8s_nodes_hash = get_nodes_hash_by_roles($network_metadata, ['k8s-master'])
+$k8s_mgmt_ips_hash = get_node_to_ipaddr_map_by_network_role($k8s_nodes_hash, 'management')
+$k8s_mgmt_ips = values($k8s_mgmt_ips_hash)
+
+if $operatingsystem == 'Ubuntu' {
+ exec { 'install k8s slave':
+ command => "/etc/fuel/plugins/fuel-plugin-k8s-1.0/k8s-slave-install.sh $k8s_mgmt_ips",
+ path => '/usr/bin:/usr/sbin:/bin:/sbin',
+ }
+} elsif $operatingsystem == 'CentOS' {
+}
diff --git a/src/fuel-plugin/deployment_tasks.yaml b/src/fuel-plugin/deployment_tasks.yaml
new file mode 100644
index 0000000..be7ce74
--- /dev/null
+++ b/src/fuel-plugin/deployment_tasks.yaml
@@ -0,0 +1,44 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+- id: k8s
+ type: group
+ role: [k8s-master, k8s-slave]
+ requires: [deploy_start]
+ required_for: [deploy_end]
+ tasks: [hiera, setup_repositories, fuel_pkgs, globals, tools, logging, netconfig]
+ parameters:
+ strategy:
+ type: parallel
+
+- id: k8s-master-install
+ type: puppet
+ version: 2.0.0
+ groups: [k8s-master]
+ required_for: [deploy_end]
+ requires: [netconfig]
+ parameters:
+ puppet_manifest: puppet/manifests/k8s-master-install.pp
+ puppet_modules: puppet/modules:/etc/puppet/modules
+ timeout: 720
+
+- id: k8s-slave-install
+ type: puppet
+ version: 2.0.0
+ groups: [k8s-slave]
+ required_for: [post_deployment_end]
+ requires: [post_deployment_start]
+ parameters:
+ puppet_manifest: puppet/manifests/k8s-slave-install.pp
+ puppet_modules: puppet/modules:/etc/puppet/modules
+ timeout: 720
diff --git a/src/fuel-plugin/environment_config.yaml b/src/fuel-plugin/environment_config.yaml
new file mode 100644
index 0000000..631b777
--- /dev/null
+++ b/src/fuel-plugin/environment_config.yaml
@@ -0,0 +1,19 @@
+attributes:
+ pod_network:
+ weight: 21
+ type: "select"
+ value: "weave"
+ label: "K8s POD network"
+ values:
+ - data: "flannel"
+ label: "Flannel"
+ - data: "weave"
+ label: "Weave"
+ description: "K8s POD network."
+
+ pod_network_cidr:
+ value: '10.244.0.0/16'
+ label: 'k8s POD CIDR'
+ weight: 70
+ type: "text"
+ description: 'K8s POD network CIDR.'
diff --git a/src/fuel-plugin/metadata.yaml b/src/fuel-plugin/metadata.yaml
new file mode 100644
index 0000000..e78f7e1
--- /dev/null
+++ b/src/fuel-plugin/metadata.yaml
@@ -0,0 +1,30 @@
+# Plugin name
+name: fuel-plugin-k8s
+# Human-readable name for your plugin
+title: Install k8s on bare metal
+# Plugin version
+version: '1.0.0'
+# Description
+description: 'This plugin provides to deploy k8s on bare metal'
+# Required fuel version
+fuel_version: ['10.0']
+# Specify license of your plugin
+licenses: ['Apache License Version 2.0']
+# Specify author or company name
+authors: ['ruijing.guo@intel.com']
+# A link to the plugin's page
+homepage: 'https://gerrit.opnfv.org/gerrit/openretriever'
+# Specify a group which your plugin implements, possible options:
+# network, storage, storage::cinder, storage::glance, hypervisor
+groups: ['network']
+is_hotpluggable: false
+# The plugin is compatible with releases in the list
+releases:
+ - os: ubuntu
+ version: newton-10.0
+ mode: ['ha']
+ deployment_scripts_path: deployment_scripts/
+ repository_path: deployment_scripts/
+
+# Version of plugin package
+package_version: '4.0.0'
diff --git a/src/fuel-plugin/node_roles.yaml b/src/fuel-plugin/node_roles.yaml
new file mode 100644
index 0000000..1906dc2
--- /dev/null
+++ b/src/fuel-plugin/node_roles.yaml
@@ -0,0 +1,30 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+k8s-master:
+ name: "k8s-master"
+ description: "Install K8s master on nodes with this role"
+ has_primary: false # whether has primary role or not
+ public_ip_required: false # whether requires public net or not
+ weight: 50 # weight that will be used for ordering on fuel ui
+ limits:
+ min: 0
+
+k8s-slave:
+ name: "k8s-slave"
+ description: "Install K8s slave on nodes with this role"
+ has_primary: false # whether has primary role or not
+ public_ip_required: false # whether requires public net or not
+ weight: 50 # weight that will be used for ordering on fuel ui
+ limits:
+ min: 0
diff --git a/src/fuel-plugin/tasks.yaml b/src/fuel-plugin/tasks.yaml
new file mode 100644
index 0000000..fe51488
--- /dev/null
+++ b/src/fuel-plugin/tasks.yaml
@@ -0,0 +1 @@
+[]
diff --git a/src/fuel-plugin/vagrant/Vagrantfile b/src/fuel-plugin/vagrant/Vagrantfile
new file mode 100644
index 0000000..8f5e620
--- /dev/null
+++ b/src/fuel-plugin/vagrant/Vagrantfile
@@ -0,0 +1,21 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+
+ config.vm.box = "ubuntu/trusty64"
+
+ config.vm.define "fuel" do | h |
+ h.vm.host_name = "fuel"
+ h.vm.provision :shell, :inline => "/vagrant/build_fuel_plugin.sh", privileged: false
+ h.vm.synced_folder "..", "/fuel-plugin"
+ h.vm.provider :virtualbox do |v|
+ v.customize ["modifyvm", :id, "--memory", 4096]
+ v.customize ["modifyvm", :id, "--cpus", 4]
+ v.customize "post-boot",["controlvm", :id, "setlinkstate1", "on"]
+ end
+ end
+end
diff --git a/src/fuel-plugin/vagrant/build_fuel_plugin.sh b/src/fuel-plugin/vagrant/build_fuel_plugin.sh
new file mode 100755
index 0000000..4cd579f
--- /dev/null
+++ b/src/fuel-plugin/vagrant/build_fuel_plugin.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+sudo apt-get update -y
+sudo apt-get install -y ruby-dev rubygems-integration python-pip rpm createrepo dpkg-dev
+sudo gem install fpm
+sudo pip install fuel-plugin-builder
+cp -r /fuel-plugin /home/vagrant
+cd /home/vagrant/fuel-plugin; fpb --debug --build .
+cp /home/vagrant/fuel-plugin/*.rpm /vagrant