Deploy K8s with flannel/weave by fuel plugin 17/30317/1
authorGuo Ruijing <ruijing.guo@intel.com>
Sun, 12 Mar 2017 19:06:56 +0000 (03:06 +0800)
committerGuo Ruijing <ruijing.guo@intel.com>
Sun, 12 Mar 2017 19:13:38 +0000 (03:13 +0800)
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>
13 files changed:
LICENSE [new file with mode: 0644]
src/fuel-plugin/README.md [new file with mode: 0644]
src/fuel-plugin/deployment_scripts/k8s-master-install.sh [new file with mode: 0755]
src/fuel-plugin/deployment_scripts/k8s-slave-install.sh [new file with mode: 0755]
src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp [new file with mode: 0644]
src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp [new file with mode: 0644]
src/fuel-plugin/deployment_tasks.yaml [new file with mode: 0644]
src/fuel-plugin/environment_config.yaml [new file with mode: 0644]
src/fuel-plugin/metadata.yaml [new file with mode: 0644]
src/fuel-plugin/node_roles.yaml [new file with mode: 0644]
src/fuel-plugin/tasks.yaml [new file with mode: 0644]
src/fuel-plugin/vagrant/Vagrantfile [new file with mode: 0644]
src/fuel-plugin/vagrant/build_fuel_plugin.sh [new file with mode: 0755]

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
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 (file)
index 0000000..e69de29
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 (executable)
index 0000000..6d05ede
--- /dev/null
@@ -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 (executable)
index 0000000..cc7652f
--- /dev/null
@@ -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 (file)
index 0000000..8c52fad
--- /dev/null
@@ -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 (file)
index 0000000..4e4863b
--- /dev/null
@@ -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 (file)
index 0000000..be7ce74
--- /dev/null
@@ -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 (file)
index 0000000..631b777
--- /dev/null
@@ -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 (file)
index 0000000..e78f7e1
--- /dev/null
@@ -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 (file)
index 0000000..1906dc2
--- /dev/null
@@ -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 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
diff --git a/src/fuel-plugin/vagrant/Vagrantfile b/src/fuel-plugin/vagrant/Vagrantfile
new file mode 100644 (file)
index 0000000..8f5e620
--- /dev/null
@@ -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 (executable)
index 0000000..4cd579f
--- /dev/null
@@ -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