diff options
author | Guo Ruijing <ruijing.guo@intel.com> | 2017-03-13 03:06:56 +0800 |
---|---|---|
committer | Guo Ruijing <ruijing.guo@intel.com> | 2017-03-13 03:13:38 +0800 |
commit | 14592c93aa4dd318edd686394bd13a8880c2219b (patch) | |
tree | c92a3ff881bc679efd339e32c5a4d003c33a66b9 | |
parent | 2a5f2db83cc403e36820464225478bf70a946c3d (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-- | LICENSE | 13 | ||||
-rw-r--r-- | src/fuel-plugin/README.md | 0 | ||||
-rwxr-xr-x | src/fuel-plugin/deployment_scripts/k8s-master-install.sh | 25 | ||||
-rwxr-xr-x | src/fuel-plugin/deployment_scripts/k8s-slave-install.sh | 15 | ||||
-rw-r--r-- | src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-master-install.pp | 22 | ||||
-rw-r--r-- | src/fuel-plugin/deployment_scripts/puppet/manifests/k8s-slave-install.pp | 15 | ||||
-rw-r--r-- | src/fuel-plugin/deployment_tasks.yaml | 44 | ||||
-rw-r--r-- | src/fuel-plugin/environment_config.yaml | 19 | ||||
-rw-r--r-- | src/fuel-plugin/metadata.yaml | 30 | ||||
-rw-r--r-- | src/fuel-plugin/node_roles.yaml | 30 | ||||
-rw-r--r-- | src/fuel-plugin/tasks.yaml | 1 | ||||
-rw-r--r-- | src/fuel-plugin/vagrant/Vagrantfile | 21 | ||||
-rwxr-xr-x | src/fuel-plugin/vagrant/build_fuel_plugin.sh | 8 |
13 files changed, 243 insertions, 0 deletions
@@ -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 |