From 14592c93aa4dd318edd686394bd13a8880c2219b Mon Sep 17 00:00:00 2001 From: Guo Ruijing Date: Mon, 13 Mar 2017 03:06:56 +0800 Subject: 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 --- LICENSE | 13 +++++++ src/fuel-plugin/README.md | 0 .../deployment_scripts/k8s-master-install.sh | 25 ++++++++++++ .../deployment_scripts/k8s-slave-install.sh | 15 ++++++++ .../puppet/manifests/k8s-master-install.pp | 22 +++++++++++ .../puppet/manifests/k8s-slave-install.pp | 15 ++++++++ src/fuel-plugin/deployment_tasks.yaml | 44 ++++++++++++++++++++++ src/fuel-plugin/environment_config.yaml | 19 ++++++++++ src/fuel-plugin/metadata.yaml | 30 +++++++++++++++ src/fuel-plugin/node_roles.yaml | 30 +++++++++++++++ src/fuel-plugin/tasks.yaml | 1 + src/fuel-plugin/vagrant/Vagrantfile | 21 +++++++++++ src/fuel-plugin/vagrant/build_fuel_plugin.sh | 8 ++++ 13 files changed, 243 insertions(+) create mode 100644 LICENSE create mode 100644 src/fuel-plugin/README.md create mode 100755 src/fuel-plugin/deployment_scripts/k8s-master-install.sh create mode 100755 src/fuel-plugin/deployment_scripts/k8s-slave-install.sh create mode 100644 src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp create mode 100644 src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp create mode 100644 src/fuel-plugin/deployment_tasks.yaml create mode 100644 src/fuel-plugin/environment_config.yaml create mode 100644 src/fuel-plugin/metadata.yaml create mode 100644 src/fuel-plugin/node_roles.yaml create mode 100644 src/fuel-plugin/tasks.yaml create mode 100644 src/fuel-plugin/vagrant/Vagrantfile create mode 100755 src/fuel-plugin/vagrant/build_fuel_plugin.sh 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 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 < "/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 -- cgit 1.2.3-korg