mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Remove the deprecated vagrant kube-up implementation.
This commit is contained in:
parent
98277ff20b
commit
8d44e0b38a
325
Vagrantfile
vendored
325
Vagrantfile
vendored
@ -1,325 +0,0 @@
|
|||||||
# -*- mode: ruby -*-
|
|
||||||
# vi: set ft=ruby :
|
|
||||||
|
|
||||||
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
|
||||||
VAGRANTFILE_API_VERSION = "2"
|
|
||||||
|
|
||||||
# Require a recent version of vagrant otherwise some have reported errors setting host names on boxes
|
|
||||||
Vagrant.require_version ">= 1.7.4"
|
|
||||||
|
|
||||||
if ARGV.first == "up" && ENV['USING_KUBE_SCRIPTS'] != 'true'
|
|
||||||
raise Vagrant::Errors::VagrantError.new, <<END
|
|
||||||
Calling 'vagrant up' directly is not supported. Instead, please run the following:
|
|
||||||
|
|
||||||
export KUBERNETES_PROVIDER=vagrant
|
|
||||||
export VAGRANT_DEFAULT_PROVIDER=providername
|
|
||||||
./cluster/kube-up.sh
|
|
||||||
END
|
|
||||||
end
|
|
||||||
|
|
||||||
# The number of nodes to provision
|
|
||||||
$num_node = (ENV['NUM_NODES'] || 1).to_i
|
|
||||||
|
|
||||||
# ip configuration
|
|
||||||
$master_ip = ENV['MASTER_IP']
|
|
||||||
$node_ip_base = ENV['NODE_IP_BASE'] || ""
|
|
||||||
$node_ips = $num_node.times.collect { |n| $node_ip_base + "#{n+3}" }
|
|
||||||
|
|
||||||
# Determine the OS platform to use
|
|
||||||
$kube_os = ENV['KUBERNETES_OS'] || "fedora"
|
|
||||||
|
|
||||||
# Determine whether vagrant should use nfs to sync folders
|
|
||||||
$use_nfs = ENV['KUBERNETES_VAGRANT_USE_NFS'] == 'true'
|
|
||||||
# Determine whether vagrant should use rsync to sync folders
|
|
||||||
$use_rsync = ENV['KUBERNETES_VAGRANT_USE_RSYNC'] == 'true'
|
|
||||||
|
|
||||||
# To override the vagrant provider, use (e.g.):
|
|
||||||
# KUBERNETES_PROVIDER=vagrant VAGRANT_DEFAULT_PROVIDER=... .../cluster/kube-up.sh
|
|
||||||
# To override the box, use (e.g.):
|
|
||||||
# KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... .../cluster/kube-up.sh
|
|
||||||
# You can specify a box version:
|
|
||||||
# KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... KUBERNETES_BOX_VERSION=... .../cluster/kube-up.sh
|
|
||||||
# You can specify a box location:
|
|
||||||
# KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... KUBERNETES_BOX_URL=... .../cluster/kube-up.sh
|
|
||||||
# KUBERNETES_BOX_URL and KUBERNETES_BOX_VERSION will be ignored unless
|
|
||||||
# KUBERNETES_BOX_NAME is set
|
|
||||||
|
|
||||||
# Default OS platform to provider/box information
|
|
||||||
$kube_provider_boxes = {
|
|
||||||
:parallels => {
|
|
||||||
'fedora' => {
|
|
||||||
# :box_url and :box_version are optional (and mutually exclusive);
|
|
||||||
# if :box_url is omitted the box will be retrieved by :box_name (and
|
|
||||||
# :box_version if provided) from
|
|
||||||
# http://atlas.hashicorp.com/boxes/search (formerly
|
|
||||||
# http://vagrantcloud.com/); this allows you override :box_name with
|
|
||||||
# your own value so long as you provide :box_url; for example, the
|
|
||||||
# "official" name of this box is "rickard-von-essen/
|
|
||||||
# opscode_fedora-20", but by providing the URL and our own name, we
|
|
||||||
# make it appear as yet another provider under the "kube-fedora22"
|
|
||||||
# box
|
|
||||||
:box_name => 'kube-fedora23',
|
|
||||||
:box_url => 'https://opscode-vm-bento.s3.amazonaws.com/vagrant/parallels/opscode_fedora-23_chef-provisionerless.box'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
:virtualbox => {
|
|
||||||
'fedora' => {
|
|
||||||
:box_name => 'kube-fedora23',
|
|
||||||
:box_url => 'https://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_fedora-23_chef-provisionerless.box'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
:libvirt => {
|
|
||||||
'fedora' => {
|
|
||||||
:box_name => 'kube-fedora23',
|
|
||||||
:box_url => 'https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/23/Cloud/x86_64/Images/Fedora-Cloud-Base-Vagrant-23-20151030.x86_64.vagrant-libvirt.box'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
:vmware_desktop => {
|
|
||||||
'fedora' => {
|
|
||||||
:box_name => 'kube-fedora23',
|
|
||||||
:box_url => 'https://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_fedora-23_chef-provisionerless.box'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
:vsphere => {
|
|
||||||
'fedora' => {
|
|
||||||
:box_name => 'vsphere-dummy',
|
|
||||||
:box_url => 'https://github.com/deromka/vagrant-vsphere/blob/master/vsphere-dummy.box?raw=true'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Give access to all physical cpu cores
|
|
||||||
# Previously cargo-culted from here:
|
|
||||||
# http://www.stefanwrobel.com/how-to-make-vagrant-performance-not-suck
|
|
||||||
# Rewritten to actually determine the number of hardware cores instead of assuming
|
|
||||||
# that the host has hyperthreading enabled.
|
|
||||||
host = RbConfig::CONFIG['host_os']
|
|
||||||
if host =~ /darwin/
|
|
||||||
$vm_cpus = `sysctl -n hw.physicalcpu`.to_i
|
|
||||||
elsif host =~ /linux/
|
|
||||||
#This should work on most processors, however it will fail on ones without the core id field.
|
|
||||||
#So far i have only seen this on a raspberry pi. which you probably don't want to run vagrant on anyhow...
|
|
||||||
#But just in case we'll default to the result of nproc if we get 0 just to be safe.
|
|
||||||
$vm_cpus = `cat /proc/cpuinfo | grep 'core id' | sort -u | wc -l`.to_i
|
|
||||||
if $vm_cpus < 1
|
|
||||||
$vm_cpus = `nproc`.to_i
|
|
||||||
end
|
|
||||||
else # sorry Windows folks, I can't help you
|
|
||||||
$vm_cpus = 2
|
|
||||||
end
|
|
||||||
|
|
||||||
# Give VM 1024MB of RAM by default
|
|
||||||
# In Fedora VM, tmpfs device is mapped to /tmp. tmpfs is given 50% of RAM allocation.
|
|
||||||
# When doing Salt provisioning, we copy approximately 200MB of content in /tmp before anything else happens.
|
|
||||||
# This causes problems if anything else was in /tmp or the other directories that are bound to tmpfs device (i.e /run, etc.)
|
|
||||||
$vm_master_mem = (ENV['KUBERNETES_MASTER_MEMORY'] || ENV['KUBERNETES_MEMORY'] || 1280).to_i
|
|
||||||
$vm_node_mem = (ENV['KUBERNETES_NODE_MEMORY'] || ENV['KUBERNETES_MEMORY'] || 2048).to_i
|
|
||||||
|
|
||||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
||||||
if Vagrant.has_plugin?("vagrant-proxyconf")
|
|
||||||
$http_proxy = ENV['KUBERNETES_HTTP_PROXY'] || ""
|
|
||||||
$https_proxy = ENV['KUBERNETES_HTTPS_PROXY'] || ""
|
|
||||||
$no_proxy = ENV['KUBERNETES_NO_PROXY'] || "127.0.0.1"
|
|
||||||
config.proxy.http = $http_proxy
|
|
||||||
config.proxy.https = $https_proxy
|
|
||||||
config.proxy.no_proxy = $no_proxy
|
|
||||||
end
|
|
||||||
|
|
||||||
# this corrects a bug in 1.8.5 where an invalid SSH key is inserted.
|
|
||||||
if Vagrant::VERSION == "1.8.5"
|
|
||||||
config.ssh.insert_key = false
|
|
||||||
end
|
|
||||||
|
|
||||||
def setvmboxandurl(config, provider)
|
|
||||||
if ENV['KUBERNETES_BOX_NAME'] then
|
|
||||||
config.vm.box = ENV['KUBERNETES_BOX_NAME']
|
|
||||||
|
|
||||||
if ENV['KUBERNETES_BOX_URL'] then
|
|
||||||
config.vm.box_url = ENV['KUBERNETES_BOX_URL']
|
|
||||||
end
|
|
||||||
|
|
||||||
if ENV['KUBERNETES_BOX_VERSION'] then
|
|
||||||
config.vm.box_version = ENV['KUBERNETES_BOX_VERSION']
|
|
||||||
end
|
|
||||||
else
|
|
||||||
config.vm.box = $kube_provider_boxes[provider][$kube_os][:box_name]
|
|
||||||
|
|
||||||
if $kube_provider_boxes[provider][$kube_os][:box_url] then
|
|
||||||
config.vm.box_url = $kube_provider_boxes[provider][$kube_os][:box_url]
|
|
||||||
end
|
|
||||||
|
|
||||||
if $kube_provider_boxes[provider][$kube_os][:box_version] then
|
|
||||||
config.vm.box_version = $kube_provider_boxes[provider][$kube_os][:box_version]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def customize_vm(config, vm_mem)
|
|
||||||
|
|
||||||
if $use_nfs then
|
|
||||||
config.vm.synced_folder ".", "/vagrant", nfs: true
|
|
||||||
elsif $use_rsync then
|
|
||||||
opts = {}
|
|
||||||
if ENV['KUBERNETES_VAGRANT_RSYNC_ARGS'] then
|
|
||||||
opts[:rsync__args] = ENV['KUBERNETES_VAGRANT_RSYNC_ARGS'].split(" ")
|
|
||||||
end
|
|
||||||
if ENV['KUBERNETES_VAGRANT_RSYNC_EXCLUDE'] then
|
|
||||||
opts[:rsync__exclude] = ENV['KUBERNETES_VAGRANT_RSYNC_EXCLUDE'].split(" ")
|
|
||||||
end
|
|
||||||
config.vm.synced_folder ".", "/vagrant", opts
|
|
||||||
end
|
|
||||||
|
|
||||||
# Try VMWare Fusion first (see
|
|
||||||
# https://docs.vagrantup.com/v2/providers/basic_usage.html)
|
|
||||||
config.vm.provider :vmware_fusion do |v, override|
|
|
||||||
setvmboxandurl(override, :vmware_desktop)
|
|
||||||
v.vmx['memsize'] = vm_mem
|
|
||||||
v.vmx['numvcpus'] = $vm_cpus
|
|
||||||
end
|
|
||||||
|
|
||||||
# configure libvirt provider
|
|
||||||
config.vm.provider :libvirt do |v, override|
|
|
||||||
setvmboxandurl(override, :libvirt)
|
|
||||||
v.memory = vm_mem
|
|
||||||
v.cpus = $vm_cpus
|
|
||||||
v.nested = true
|
|
||||||
v.volume_cache = 'none'
|
|
||||||
end
|
|
||||||
|
|
||||||
# Then try VMWare Workstation
|
|
||||||
config.vm.provider :vmware_workstation do |v, override|
|
|
||||||
setvmboxandurl(override, :vmware_desktop)
|
|
||||||
v.vmx['memsize'] = vm_mem
|
|
||||||
v.vmx['numvcpus'] = $vm_cpus
|
|
||||||
end
|
|
||||||
|
|
||||||
# Then try Parallels
|
|
||||||
config.vm.provider :parallels do |v, override|
|
|
||||||
setvmboxandurl(override, :parallels)
|
|
||||||
v.memory = vm_mem # v.customize ['set', :id, '--memsize', vm_mem]
|
|
||||||
v.cpus = $vm_cpus # v.customize ['set', :id, '--cpus', $vm_cpus]
|
|
||||||
|
|
||||||
# Don't attempt to update the Parallels tools on the image (this can
|
|
||||||
# be done manually if necessary)
|
|
||||||
v.update_guest_tools = false # v.customize ['set', :id, '--tools-autoupdate', 'off']
|
|
||||||
|
|
||||||
# Set up Parallels folder sharing to behave like VirtualBox (i.e.,
|
|
||||||
# mount the current directory as /vagrant and that's it)
|
|
||||||
v.customize ['set', :id, '--shf-guest', 'off']
|
|
||||||
v.customize ['set', :id, '--shf-guest-automount', 'off']
|
|
||||||
v.customize ['set', :id, '--shf-host', 'on']
|
|
||||||
|
|
||||||
# Synchronize VM clocks to host clock (Avoid certificate invalid issue)
|
|
||||||
v.customize ['set', :id, '--time-sync', 'on']
|
|
||||||
|
|
||||||
# Remove all auto-mounted "shared folders"; the result seems to
|
|
||||||
# persist between runs (i.e., vagrant halt && vagrant up)
|
|
||||||
override.vm.provision :shell, :inline => (%q{
|
|
||||||
set -ex
|
|
||||||
if [ -d /media/psf ]; then
|
|
||||||
for i in /media/psf/*; do
|
|
||||||
if [ -d "${i}" ]; then
|
|
||||||
umount "${i}" || true
|
|
||||||
rmdir -v "${i}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
rmdir -v /media/psf
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}).strip
|
|
||||||
end
|
|
||||||
|
|
||||||
# Then try vsphere
|
|
||||||
config.vm.provider :vsphere do |vsphere, override|
|
|
||||||
setvmboxandurl(override, :vsphere)
|
|
||||||
|
|
||||||
#config.vm.hostname = ENV['MASTER_NAME']
|
|
||||||
|
|
||||||
config.ssh.username = ENV['MASTER_USER']
|
|
||||||
config.ssh.password = ENV['MASTER_PASSWD']
|
|
||||||
|
|
||||||
config.ssh.pty = true
|
|
||||||
config.ssh.insert_key = true
|
|
||||||
#config.ssh.private_key_path = '~/.ssh/id_rsa_vsphere'
|
|
||||||
|
|
||||||
# Don't attempt to update the tools on the image (this can
|
|
||||||
# be done manually if necessary)
|
|
||||||
# vsphere.update_guest_tools = false # v.customize ['set', :id, '--tools-autoupdate', 'off']
|
|
||||||
|
|
||||||
# The vSphere host we're going to connect to
|
|
||||||
vsphere.host = ENV['VAGRANT_VSPHERE_URL']
|
|
||||||
|
|
||||||
# The ESX host for the new VM
|
|
||||||
vsphere.compute_resource_name = ENV['VAGRANT_VSPHERE_RESOURCE_POOL']
|
|
||||||
|
|
||||||
# The resource pool for the new VM
|
|
||||||
#vsphere.resource_pool_name = 'Comp'
|
|
||||||
|
|
||||||
# path to folder where new VM should be created, if not specified template's parent folder will be used
|
|
||||||
vsphere.vm_base_path = ENV['VAGRANT_VSPHERE_BASE_PATH']
|
|
||||||
|
|
||||||
# The template we're going to clone
|
|
||||||
vsphere.template_name = ENV['VAGRANT_VSPHERE_TEMPLATE_NAME']
|
|
||||||
|
|
||||||
# The name of the new machine
|
|
||||||
#vsphere.name = ENV['MASTER_NAME']
|
|
||||||
|
|
||||||
# vSphere login
|
|
||||||
vsphere.user = ENV['VAGRANT_VSPHERE_USERNAME']
|
|
||||||
|
|
||||||
# vSphere password
|
|
||||||
vsphere.password = ENV['VAGRANT_VSPHERE_PASSWORD']
|
|
||||||
|
|
||||||
# cpu count
|
|
||||||
vsphere.cpu_count = $vm_cpus
|
|
||||||
|
|
||||||
# memory in MB
|
|
||||||
vsphere.memory_mb = vm_mem
|
|
||||||
|
|
||||||
# If you don't have SSL configured correctly, set this to 'true'
|
|
||||||
vsphere.insecure = ENV['VAGRANT_VSPHERE_INSECURE']
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# Don't attempt to update Virtualbox Guest Additions (requires gcc)
|
|
||||||
if Vagrant.has_plugin?("vagrant-vbguest") then
|
|
||||||
config.vbguest.auto_update = false
|
|
||||||
end
|
|
||||||
# Finally, fall back to VirtualBox
|
|
||||||
config.vm.provider :virtualbox do |v, override|
|
|
||||||
setvmboxandurl(override, :virtualbox)
|
|
||||||
v.memory = vm_mem # v.customize ["modifyvm", :id, "--memory", vm_mem]
|
|
||||||
v.cpus = $vm_cpus # v.customize ["modifyvm", :id, "--cpus", $vm_cpus]
|
|
||||||
|
|
||||||
# Use faster paravirtualized networking
|
|
||||||
v.customize ["modifyvm", :id, "--nictype1", "virtio"]
|
|
||||||
v.customize ["modifyvm", :id, "--nictype2", "virtio"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Kubernetes master
|
|
||||||
config.vm.define "master" do |c|
|
|
||||||
customize_vm c, $vm_master_mem
|
|
||||||
if ENV['KUBE_TEMP'] then
|
|
||||||
script = "#{ENV['KUBE_TEMP']}/master-start.sh"
|
|
||||||
c.vm.provision "shell", run: "always", path: script
|
|
||||||
end
|
|
||||||
c.vm.network "private_network", ip: "#{$master_ip}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Kubernetes node
|
|
||||||
$num_node.times do |n|
|
|
||||||
node_vm_name = "node-#{n+1}"
|
|
||||||
|
|
||||||
config.vm.define node_vm_name do |node|
|
|
||||||
customize_vm node, $vm_node_mem
|
|
||||||
|
|
||||||
node_ip = $node_ips[n]
|
|
||||||
if ENV['KUBE_TEMP'] then
|
|
||||||
script = "#{ENV['KUBE_TEMP']}/node-start-#{n}.sh"
|
|
||||||
node.vm.provision "shell", run: "always", path: script
|
|
||||||
end
|
|
||||||
node.vm.network "private_network", ip: "#{node_ip}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -517,7 +517,6 @@ EOF
|
|||||||
cp -R "${KUBE_ROOT}/docs" "${release_stage}/"
|
cp -R "${KUBE_ROOT}/docs" "${release_stage}/"
|
||||||
cp "${KUBE_ROOT}/README.md" "${release_stage}/"
|
cp "${KUBE_ROOT}/README.md" "${release_stage}/"
|
||||||
cp "${KUBE_ROOT}/Godeps/LICENSES" "${release_stage}/"
|
cp "${KUBE_ROOT}/Godeps/LICENSES" "${release_stage}/"
|
||||||
cp "${KUBE_ROOT}/Vagrantfile" "${release_stage}/"
|
|
||||||
|
|
||||||
echo "${KUBE_GIT_VERSION}" > "${release_stage}/version"
|
echo "${KUBE_GIT_VERSION}" > "${release_stage}/version"
|
||||||
|
|
||||||
|
@ -193,7 +193,6 @@ pkg_tar(
|
|||||||
files = [
|
files = [
|
||||||
"//:Godeps/LICENSES",
|
"//:Godeps/LICENSES",
|
||||||
"//:README.md",
|
"//:README.md",
|
||||||
"//:Vagrantfile",
|
|
||||||
"//:version",
|
"//:version",
|
||||||
"//cluster:all-srcs",
|
"//cluster:all-srcs",
|
||||||
"//docs:all-srcs",
|
"//docs:all-srcs",
|
||||||
|
@ -4,11 +4,10 @@ This is the root of the SaltStack configuration for Kubernetes. A high
|
|||||||
level overview for the Kubernetes SaltStack configuration can be found [in the docs tree.](https://kubernetes.io/docs/admin/salt/)
|
level overview for the Kubernetes SaltStack configuration can be found [in the docs tree.](https://kubernetes.io/docs/admin/salt/)
|
||||||
|
|
||||||
This SaltStack configuration currently applies to default
|
This SaltStack configuration currently applies to default
|
||||||
configurations for Debian-on-GCE, Fedora-on-Vagrant, Ubuntu-on-AWS and
|
configurations for Debian-on-GCE. (That doesn't mean it can't
|
||||||
Ubuntu-on-Azure. (That doesn't mean it can't be made to apply to an
|
be made to apply to an arbitrary configuration, but those are
|
||||||
arbitrary configuration, but those are only the in-tree OS/IaaS
|
only the in-tree OS/IaaS combinations supported today.) As you
|
||||||
combinations supported today.) As you peruse the configuration, these
|
peruse the configuration, this is shorthanded as `gce`, in `grains.cloud`;
|
||||||
are shorthanded as `gce`, `vagrant`, `aws`, `azure-legacy` in `grains.cloud`;
|
|
||||||
the documentation in this tree uses this same shorthand for convenience.
|
the documentation in this tree uses this same shorthand for convenience.
|
||||||
|
|
||||||
See more:
|
See more:
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
approvers:
|
|
||||||
- derekwaynecarr
|
|
||||||
reviewers:
|
|
||||||
- ArtfulCoder
|
|
||||||
- thockin
|
|
||||||
- lavalamp
|
|
||||||
- smarterclayton
|
|
||||||
- derekwaynecarr
|
|
||||||
- caesarxuchao
|
|
||||||
- vishh
|
|
||||||
- mikedanese
|
|
||||||
- liggitt
|
|
||||||
- nikhiljindal
|
|
||||||
- erictune
|
|
||||||
- dchen1107
|
|
||||||
- zmerlynn
|
|
||||||
- justinsb
|
|
||||||
- roberthbailey
|
|
||||||
- eparis
|
|
||||||
- jlowdermilk
|
|
||||||
- piosz
|
|
||||||
- jsafrane
|
|
||||||
- jbeda
|
|
||||||
- madhusudancs
|
|
||||||
- jayunit100
|
|
||||||
- cjcullen
|
|
||||||
- david-mcmahon
|
|
||||||
- mfojtik
|
|
||||||
- pweil-
|
|
||||||
- dcbw
|
|
||||||
- ivan4th
|
|
||||||
- filbranden
|
|
||||||
- dshulyak
|
|
||||||
- k82cn
|
|
||||||
- caseydavenport
|
|
||||||
- johscheuer
|
|
@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
## Contains configuration values for interacting with the Vagrant cluster
|
|
||||||
|
|
||||||
# Number of nodes in the cluster
|
|
||||||
NUM_NODES=${NUM_NODES-"1"}
|
|
||||||
export NUM_NODES
|
|
||||||
|
|
||||||
# The IP of the master
|
|
||||||
export MASTER_IP=${MASTER_IP-"10.245.1.2"}
|
|
||||||
export KUBE_MASTER_IP=${MASTER_IP}
|
|
||||||
|
|
||||||
export INSTANCE_PREFIX="kubernetes"
|
|
||||||
export MASTER_NAME="${INSTANCE_PREFIX}-master"
|
|
||||||
|
|
||||||
# Should the master serve as a node
|
|
||||||
REGISTER_MASTER_KUBELET=${REGISTER_MASTER:-false}
|
|
||||||
|
|
||||||
# Map out the IPs, names and container subnets of each node
|
|
||||||
export NODE_IP_BASE=${NODE_IP_BASE-"10.245.1."}
|
|
||||||
NODE_CONTAINER_SUBNET_BASE="10.246"
|
|
||||||
MASTER_CONTAINER_NETMASK="255.255.255.0"
|
|
||||||
MASTER_CONTAINER_ADDR="${NODE_CONTAINER_SUBNET_BASE}.0.1"
|
|
||||||
MASTER_CONTAINER_SUBNET="${NODE_CONTAINER_SUBNET_BASE}.0.1/24"
|
|
||||||
CONTAINER_SUBNET="${NODE_CONTAINER_SUBNET_BASE}.0.0/16"
|
|
||||||
for ((i=0; i < NUM_NODES; i++)) do
|
|
||||||
NODE_IPS[$i]="${NODE_IP_BASE}$((i+3))"
|
|
||||||
NODE_NAMES[$i]="${INSTANCE_PREFIX}-node-$((i+1))"
|
|
||||||
NODE_CONTAINER_SUBNETS[$i]="${NODE_CONTAINER_SUBNET_BASE}.$((i+1)).1/24"
|
|
||||||
NODE_CONTAINER_ADDRS[$i]="${NODE_CONTAINER_SUBNET_BASE}.$((i+1)).1"
|
|
||||||
NODE_CONTAINER_NETMASKS[$i]="255.255.255.0"
|
|
||||||
VAGRANT_NODE_NAMES[$i]="node-$((i+1))"
|
|
||||||
done
|
|
||||||
|
|
||||||
CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.246.0.0/16}"
|
|
||||||
|
|
||||||
SERVICE_CLUSTER_IP_RANGE=10.247.0.0/16 # formerly PORTAL_NET
|
|
||||||
|
|
||||||
# Since this isn't exposed on the network, default to a simple user/passwd
|
|
||||||
MASTER_USER="${MASTER_USER:-vagrant}"
|
|
||||||
MASTER_PASSWD="${MASTER_PASSWD:-vagrant}"
|
|
||||||
|
|
||||||
# Admission Controllers to invoke prior to persisting objects in cluster
|
|
||||||
# If we included ResourceQuota, we should keep it at the end of the list to prevent incrementing quota usage prematurely.
|
|
||||||
ADMISSION_CONTROL=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,PVCProtection,ResourceQuota
|
|
||||||
|
|
||||||
# Optional: Enable node logging.
|
|
||||||
ENABLE_NODE_LOGGING=false
|
|
||||||
LOGGING_DESTINATION=elasticsearch
|
|
||||||
|
|
||||||
# Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up.
|
|
||||||
ENABLE_CLUSTER_LOGGING=false
|
|
||||||
ELASTICSEARCH_LOGGING_REPLICAS=1
|
|
||||||
|
|
||||||
# Optional: Cluster monitoring to setup as part of the cluster bring up:
|
|
||||||
# none - No cluster monitoring setup
|
|
||||||
# influxdb - Heapster, InfluxDB, and Grafana
|
|
||||||
# google - Heapster, Google Cloud Monitoring, and Google Cloud Logging
|
|
||||||
ENABLE_CLUSTER_MONITORING="${KUBE_ENABLE_CLUSTER_MONITORING:-influxdb}"
|
|
||||||
|
|
||||||
# Extra options to set on the Docker command line. This is useful for setting
|
|
||||||
# --insecure-registry for local registries, or globally configuring selinux options
|
|
||||||
# TODO Enable selinux when Fedora 21 repositories get an updated docker package
|
|
||||||
# see https://bugzilla.redhat.com/show_bug.cgi?id=1216151
|
|
||||||
#EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS:-} -b=cbr0 --selinux-enabled --insecure-registry 10.0.0.0/8"
|
|
||||||
EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS:-} --insecure-registry 10.0.0.0/8 -s overlay"
|
|
||||||
|
|
||||||
# Flag to tell the kubelet to enable CFS quota support
|
|
||||||
ENABLE_CPU_CFS_QUOTA="${KUBE_ENABLE_CPU_CFS_QUOTA:-true}"
|
|
||||||
|
|
||||||
# Optional: Install cluster DNS.
|
|
||||||
ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}"
|
|
||||||
DNS_SERVER_IP="10.247.0.10"
|
|
||||||
DNS_DOMAIN="cluster.local"
|
|
||||||
|
|
||||||
# Optional: Enable DNS horizontal autoscaler
|
|
||||||
ENABLE_DNS_HORIZONTAL_AUTOSCALER="${KUBE_ENABLE_DNS_HORIZONTAL_AUTOSCALER:-false}"
|
|
||||||
|
|
||||||
# Optional: Install Kubernetes UI
|
|
||||||
ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}"
|
|
||||||
|
|
||||||
# Optional: Enable setting flags for kube-apiserver to turn on behavior in active-dev
|
|
||||||
RUNTIME_CONFIG="${KUBE_RUNTIME_CONFIG:-}"
|
|
||||||
|
|
||||||
# Determine extra certificate names for master
|
|
||||||
octets=($(echo "$SERVICE_CLUSTER_IP_RANGE" | sed -e 's|/.*||' -e 's/\./ /g'))
|
|
||||||
((octets[3]+=1))
|
|
||||||
service_ip=$(echo "${octets[*]}" | sed 's/ /./g')
|
|
||||||
MASTER_EXTRA_SANS="IP:${service_ip},DNS:kubernetes,DNS:kubernetes.default,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.${DNS_DOMAIN},DNS:${MASTER_NAME}"
|
|
||||||
|
|
||||||
NETWORK_PROVIDER="${NETWORK_PROVIDER:-none}" # opencontrail, kubenet, etc
|
|
||||||
if [ "${NETWORK_PROVIDER}" == "kubenet" ]; then
|
|
||||||
CLUSTER_IP_RANGE="${CONTAINER_SUBNET}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If enabled kube-controller-manager will be started with the --enable-hostpath-provisioner flag
|
|
||||||
ENABLE_HOSTPATH_PROVISIONER="${ENABLE_HOSTPATH_PROVISIONER:-true}"
|
|
||||||
|
|
||||||
# OpenContrail networking plugin specific settings
|
|
||||||
OPENCONTRAIL_TAG="${OPENCONTRAIL_TAG:-R2.20}"
|
|
||||||
OPENCONTRAIL_KUBERNETES_TAG="${OPENCONTRAIL_KUBERNETES_TAG:-master}"
|
|
||||||
OPENCONTRAIL_PUBLIC_SUBNET="${OPENCONTRAIL_PUBLIC_SUBNET:-10.1.0.0/16}"
|
|
||||||
|
|
||||||
# Optional: if set to true, kube-up will configure the cluster to run e2e tests.
|
|
||||||
E2E_STORAGE_TEST_ENVIRONMENT=${KUBE_E2E_STORAGE_TEST_ENVIRONMENT:-false}
|
|
||||||
|
|
||||||
# Default fallback NETWORK_IF_NAME, will be used in case when no 'VAGRANT-BEGIN' comments were defined in network-script
|
|
||||||
export DEFAULT_NETWORK_IF_NAME="eth0"
|
|
@ -1,29 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
## Contains configuration values for interacting with the Vagrant cluster in test mode
|
|
||||||
#Set NUM_NODES to minimum required for testing.
|
|
||||||
NUM_NODES=2
|
|
||||||
|
|
||||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|
||||||
source "${KUBE_ROOT}/cluster/vagrant/config-default.sh"
|
|
||||||
|
|
||||||
# Do not register the master kubelet during testing
|
|
||||||
REGISTER_MASTER_KUBELET=${REGISTER_MASTER:-false}
|
|
||||||
|
|
||||||
# Optional: if set to true, kube-up will configure the cluster to run e2e tests.
|
|
||||||
E2E_STORAGE_TEST_ENVIRONMENT=${KUBE_E2E_STORAGE_TEST_ENVIRONMENT:-false}
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
echoOK() {
|
|
||||||
TC='\e['
|
|
||||||
RegB="${TC}0m"
|
|
||||||
if [ "$1" -eq "0" ]; then
|
|
||||||
Green="${TC}32m"
|
|
||||||
echo -e "[${Green}OK${RegB}]"
|
|
||||||
else
|
|
||||||
Red="${TC}31m"
|
|
||||||
echo -e "[${Red}FAIL${RegB}]"
|
|
||||||
echo "Check log file."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
echo "Usage options: [--logfile <path to file>]"
|
|
||||||
}
|
|
||||||
|
|
||||||
logfile=/dev/null
|
|
||||||
while [[ $# > 0 ]]; do
|
|
||||||
key="$1"
|
|
||||||
shift
|
|
||||||
case $key in
|
|
||||||
-l|--logfile)
|
|
||||||
logfile="$1"
|
|
||||||
if [ "$logfile" == "" ]; then
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# unknown option
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|
||||||
cd "${KUBE_ROOT}"
|
|
||||||
|
|
||||||
echo All verbose output will be redirected to $logfile, use --logfile option to change.
|
|
||||||
|
|
||||||
printf "Start the cluster with 2 nodes .. "
|
|
||||||
export NUM_NODES=2
|
|
||||||
export KUBERNETES_PROVIDER=vagrant
|
|
||||||
|
|
||||||
(cluster/kube-up.sh >>"$logfile" 2>&1) || true
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "Check if node-1 can reach kubernetes master .. "
|
|
||||||
vagrant ssh node-1 -- ping -c 10 kubernetes-master >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
printf "Check if node-2 can reach kubernetes master .. "
|
|
||||||
vagrant ssh node-2 -- ping -c 10 kubernetes-master >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "Pull an image that runs a web server on node-1 .. "
|
|
||||||
vagrant ssh node-1 -- 'sudo docker pull kubernetes/serve_hostname' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
printf "Pull an image that runs a web server on node-2 .. "
|
|
||||||
vagrant ssh node-2 -- 'sudo docker pull kubernetes/serve_hostname' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "Run the server on node-1 .. "
|
|
||||||
vagrant ssh node-1 -- sudo docker run -d kubernetes/serve_hostname >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
printf "Run the server on node-2 .. "
|
|
||||||
vagrant ssh node-2 -- sudo docker run -d kubernetes/serve_hostname >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "Run ping from node-1 to docker bridges and to the containers on both nodes .. "
|
|
||||||
vagrant ssh node-1 -- 'ping -c 20 10.246.0.1 && ping -c 20 10.246.1.1 && ping -c 20 10.246.0.2 && ping -c 20 10.246.1.2' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
printf "Same pinch from node-2 .. "
|
|
||||||
vagrant ssh node-2 -- 'ping -c 20 10.246.0.1 && ping -c 20 10.246.1.1 && ping -c 20 10.246.0.2 && ping -c 20 10.246.1.2' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "tcp check, curl to both the running webservers from node-1 .. "
|
|
||||||
vagrant ssh node-1 -- 'curl -sS 10.246.0.2:9376 && curl -sS 10.246.1.2:9376' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
printf "tcp check, curl to both the running webservers from node-2 .. "
|
|
||||||
vagrant ssh node-2 -- 'curl -sS 10.246.0.2:9376 && curl -sS 10.246.1.2:9376' >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
||||||
|
|
||||||
printf "All good, destroy the cluster .. "
|
|
||||||
vagrant destroy -f >>"$logfile" 2>&1
|
|
||||||
echoOK $?
|
|
@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# Set the host name explicitly
|
|
||||||
# See: https://github.com/mitchellh/vagrant/issues/2430
|
|
||||||
hostnamectl set-hostname ${MASTER_NAME}
|
|
||||||
# Set the variable to empty value explicitly
|
|
||||||
if_to_edit=""
|
|
||||||
|
|
||||||
if [[ "$(grep 'VERSION_ID' /etc/os-release)" =~ ^VERSION_ID=23 ]]; then
|
|
||||||
# Disable network interface being managed by Network Manager (needed for Fedora 21+)
|
|
||||||
NETWORK_CONF_PATH=/etc/sysconfig/network-scripts/
|
|
||||||
if_to_edit=$( find ${NETWORK_CONF_PATH}ifcfg-* | xargs grep -l VAGRANT-BEGIN )
|
|
||||||
for if_conf in ${if_to_edit}; do
|
|
||||||
grep -q ^NM_CONTROLLED= ${if_conf} || echo 'NM_CONTROLLED=no' >> ${if_conf}
|
|
||||||
sed -i 's/#^NM_CONTROLLED=.*/NM_CONTROLLED=no/' ${if_conf}
|
|
||||||
done;
|
|
||||||
systemctl restart network
|
|
||||||
fi
|
|
||||||
|
|
||||||
# needed for vsphere support
|
|
||||||
# handle the case when no 'VAGRANT-BEGIN' comment was defined in network-scripts
|
|
||||||
# set the NETWORK_IF_NAME to have a default value in such case
|
|
||||||
NETWORK_IF_NAME=`echo ${if_to_edit} | awk -F- '{ print $3 }'`
|
|
||||||
if [[ -z "$NETWORK_IF_NAME" ]]; then
|
|
||||||
NETWORK_IF_NAME=${DEFAULT_NETWORK_IF_NAME}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Setup hosts file to support ping by hostname to each node in the cluster from apiserver
|
|
||||||
for (( i=0; i<${#NODE_NAMES[@]}; i++)); do
|
|
||||||
node=${NODE_NAMES[$i]}
|
|
||||||
ip=${NODE_IPS[$i]}
|
|
||||||
if [ ! "$(cat /etc/hosts | grep $node)" ]; then
|
|
||||||
echo "Adding $node to hosts file"
|
|
||||||
echo "$ip $node" >> /etc/hosts
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo "127.0.0.1 localhost" >> /etc/hosts # enables cmds like 'kubectl get pods' on master.
|
|
||||||
echo "$MASTER_IP $MASTER_NAME" >> /etc/hosts
|
|
||||||
|
|
||||||
enable-accounting
|
|
||||||
prepare-package-manager
|
|
||||||
|
|
||||||
# Configure the master network
|
|
||||||
if [ "${NETWORK_PROVIDER}" != "kubenet" ]; then
|
|
||||||
provision-network-master
|
|
||||||
fi
|
|
||||||
|
|
||||||
write-salt-config kubernetes-master
|
|
||||||
|
|
||||||
# Generate and distribute a shared secret (bearer token) to
|
|
||||||
# apiserver and kubelet so that kubelet can authenticate to
|
|
||||||
# apiserver to send events.
|
|
||||||
known_tokens_file="/srv/salt-overlay/salt/kube-apiserver/known_tokens.csv"
|
|
||||||
if [[ ! -f "${known_tokens_file}" ]]; then
|
|
||||||
|
|
||||||
mkdir -p /srv/salt-overlay/salt/kube-apiserver
|
|
||||||
known_tokens_file="/srv/salt-overlay/salt/kube-apiserver/known_tokens.csv"
|
|
||||||
(umask u=rw,go= ;
|
|
||||||
echo "$KUBELET_TOKEN,kubelet,kubelet" > $known_tokens_file;
|
|
||||||
echo "$KUBE_PROXY_TOKEN,kube_proxy,kube_proxy" >> $known_tokens_file;
|
|
||||||
echo "$KUBE_BEARER_TOKEN,admin,admin" >> $known_tokens_file)
|
|
||||||
|
|
||||||
mkdir -p /srv/salt-overlay/salt/kubelet
|
|
||||||
kubelet_auth_file="/srv/salt-overlay/salt/kubelet/kubernetes_auth"
|
|
||||||
(umask u=rw,go= ; echo "{\"BearerToken\": \"$KUBELET_TOKEN\", \"Insecure\": true }" > $kubelet_auth_file)
|
|
||||||
|
|
||||||
create-salt-kubelet-auth
|
|
||||||
create-salt-kubeproxy-auth
|
|
||||||
# Generate tokens for other "service accounts". Append to known_tokens.
|
|
||||||
#
|
|
||||||
# NB: If this list ever changes, this script actually has to
|
|
||||||
# change to detect the existence of this file, kill any deleted
|
|
||||||
# old tokens and add any new tokens (to handle the upgrade case).
|
|
||||||
service_accounts=("system:scheduler" "system:controller_manager" "system:logging" "system:monitoring" "system:dns")
|
|
||||||
for account in "${service_accounts[@]}"; do
|
|
||||||
token=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null)
|
|
||||||
echo "${token},${account},${account}" >> "${known_tokens_file}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
readonly BASIC_AUTH_FILE="/srv/salt-overlay/salt/kube-apiserver/basic_auth.csv"
|
|
||||||
if [ ! -e "${BASIC_AUTH_FILE}" ]; then
|
|
||||||
mkdir -p /srv/salt-overlay/salt/kube-apiserver
|
|
||||||
(umask 077;
|
|
||||||
echo "${MASTER_PASSWD},${MASTER_USER},admin" > "${BASIC_AUTH_FILE}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Enable Fedora Cockpit on host to support Kubernetes administration
|
|
||||||
# Access it by going to <master-ip>:9090 and login as vagrant/vagrant
|
|
||||||
if ! which /usr/libexec/cockpit-ws &>/dev/null; then
|
|
||||||
|
|
||||||
pushd /etc/yum.repos.d
|
|
||||||
curl -OL https://copr.fedorainfracloud.org/coprs/g/cockpit/cockpit-preview/repo/fedora-23/msuchy-cockpit-preview-fedora-23.repo
|
|
||||||
dnf install -y cockpit cockpit-kubernetes docker socat ethtool
|
|
||||||
popd
|
|
||||||
|
|
||||||
systemctl enable cockpit.socket
|
|
||||||
systemctl start cockpit.socket
|
|
||||||
fi
|
|
||||||
|
|
||||||
install-salt
|
|
||||||
|
|
||||||
run-salt
|
|
@ -1,91 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2015 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
# provision-network-master configures flannel on the master
|
|
||||||
function provision-network-master {
|
|
||||||
|
|
||||||
echo "Provisioning network on master"
|
|
||||||
|
|
||||||
FLANNEL_ETCD_URL="http://${MASTER_IP}:4379"
|
|
||||||
|
|
||||||
# Install etcd for flannel data
|
|
||||||
if ! which etcd >/dev/null 2>&1; then
|
|
||||||
|
|
||||||
dnf install -y etcd
|
|
||||||
|
|
||||||
# Modify etcd configuration for flannel data
|
|
||||||
cat <<EOF >/etc/etcd/etcd.conf
|
|
||||||
ETCD_NAME=flannel
|
|
||||||
ETCD_DATA_DIR="/var/lib/etcd/flannel.etcd"
|
|
||||||
ETCD_LISTEN_PEER_URLS="http://${MASTER_IP}:4380"
|
|
||||||
ETCD_LISTEN_CLIENT_URLS="http://${MASTER_IP}:4379"
|
|
||||||
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${MASTER_IP}:4380"
|
|
||||||
ETCD_INITIAL_CLUSTER="flannel=http://${MASTER_IP}:4380"
|
|
||||||
ETCD_ADVERTISE_CLIENT_URLS="${FLANNEL_ETCD_URL}"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# fix the etcd boot failure issue
|
|
||||||
sed -i '/^Restart/a RestartSec=10' /usr/lib/systemd/system/etcd.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
# Enable and start etcd
|
|
||||||
systemctl enable etcd
|
|
||||||
systemctl start etcd
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install flannel for overlay
|
|
||||||
if ! which flanneld >/dev/null 2>&1; then
|
|
||||||
|
|
||||||
dnf install -y flannel
|
|
||||||
|
|
||||||
cat <<EOF >/etc/flannel-config.json
|
|
||||||
{
|
|
||||||
"Network": "${CONTAINER_SUBNET}",
|
|
||||||
"SubnetLen": 24,
|
|
||||||
"Backend": {
|
|
||||||
"Type": "udp",
|
|
||||||
"Port": 8285
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Import default configuration into etcd for master setup
|
|
||||||
etcdctl -C ${FLANNEL_ETCD_URL} set /coreos.com/network/config < /etc/flannel-config.json
|
|
||||||
|
|
||||||
# Configure local daemon to speak to master
|
|
||||||
NETWORK_CONF_PATH=/etc/sysconfig/network-scripts/
|
|
||||||
if_to_edit=$( find ${NETWORK_CONF_PATH}ifcfg-* | xargs grep -l VAGRANT-BEGIN )
|
|
||||||
NETWORK_IF_NAME=`echo ${if_to_edit} | awk -F- '{ print $3 }'`
|
|
||||||
# needed for vsphere support
|
|
||||||
# handle the case when no 'VAGRANT-BEGIN' comment was defined in network-scripts
|
|
||||||
# set the NETWORK_IF_NAME to have a default value in such case
|
|
||||||
if [[ -z "$NETWORK_IF_NAME" ]]; then
|
|
||||||
NETWORK_IF_NAME=${DEFAULT_NETWORK_IF_NAME}
|
|
||||||
fi
|
|
||||||
cat <<EOF >/etc/sysconfig/flanneld
|
|
||||||
FLANNEL_ETCD="${FLANNEL_ETCD_URL}"
|
|
||||||
FLANNEL_ETCD_KEY="/coreos.com/network"
|
|
||||||
FLANNEL_OPTIONS="-iface=${NETWORK_IF_NAME} --ip-masq"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Start flannel
|
|
||||||
systemctl enable flanneld
|
|
||||||
systemctl start flanneld
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Network configuration verified"
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2015 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
# provision-network-node configures flannel on the node
|
|
||||||
function provision-network-node {
|
|
||||||
|
|
||||||
echo "Provisioning network on node"
|
|
||||||
|
|
||||||
FLANNEL_ETCD_URL="http://${MASTER_IP}:4379"
|
|
||||||
|
|
||||||
# Install flannel for overlay
|
|
||||||
if ! which flanneld >/dev/null 2>&1; then
|
|
||||||
|
|
||||||
dnf install -y flannel
|
|
||||||
|
|
||||||
# Configure local daemon to speak to master
|
|
||||||
NETWORK_CONF_PATH=/etc/sysconfig/network-scripts/
|
|
||||||
if_to_edit=$( find ${NETWORK_CONF_PATH}ifcfg-* | xargs grep -l VAGRANT-BEGIN )
|
|
||||||
NETWORK_IF_NAME=`echo ${if_to_edit} | awk -F- '{ print $3 }'`
|
|
||||||
# needed for vsphere support
|
|
||||||
# handle the case when no 'VAGRANT-BEGIN' comment was defined in network-scripts
|
|
||||||
# set the NETWORK_IF_NAME to have a default value in such case
|
|
||||||
if [[ -z "$NETWORK_IF_NAME" ]]; then
|
|
||||||
NETWORK_IF_NAME=${DEFAULT_NETWORK_IF_NAME}
|
|
||||||
fi
|
|
||||||
cat <<EOF >/etc/sysconfig/flanneld
|
|
||||||
FLANNEL_ETCD="${FLANNEL_ETCD_URL}"
|
|
||||||
FLANNEL_ETCD_KEY="/coreos.com/network"
|
|
||||||
FLANNEL_OPTIONS="-iface=${NETWORK_IF_NAME} --ip-masq"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Start flannel
|
|
||||||
systemctl enable flanneld
|
|
||||||
systemctl start flanneld
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Network configuration verified"
|
|
||||||
}
|
|
@ -1,88 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# Set the host name explicitly
|
|
||||||
# See: https://github.com/mitchellh/vagrant/issues/2430
|
|
||||||
hostnamectl set-hostname ${NODE_NAME}
|
|
||||||
if_to_edit=""
|
|
||||||
|
|
||||||
if [[ "$(grep 'VERSION_ID' /etc/os-release)" =~ ^VERSION_ID=23 ]]; then
|
|
||||||
# Disable network interface being managed by Network Manager (needed for Fedora 21+)
|
|
||||||
NETWORK_CONF_PATH=/etc/sysconfig/network-scripts/
|
|
||||||
if_to_edit=$( find ${NETWORK_CONF_PATH}ifcfg-* | xargs grep -l VAGRANT-BEGIN )
|
|
||||||
for if_conf in ${if_to_edit}; do
|
|
||||||
grep -q ^NM_CONTROLLED= ${if_conf} || echo 'NM_CONTROLLED=no' >> ${if_conf}
|
|
||||||
sed -i 's/#^NM_CONTROLLED=.*/NM_CONTROLLED=no/' ${if_conf}
|
|
||||||
done;
|
|
||||||
systemctl restart network
|
|
||||||
fi
|
|
||||||
|
|
||||||
# needed for vsphere support
|
|
||||||
# handle the case when no 'VAGRANT-BEGIN' comment was defined in network-scripts
|
|
||||||
# set the NETWORK_IF_NAME to have a default value in such case
|
|
||||||
NETWORK_IF_NAME=`echo ${if_to_edit} | awk -F- '{ print $3 }'`
|
|
||||||
if [[ -z "$NETWORK_IF_NAME" ]]; then
|
|
||||||
NETWORK_IF_NAME=${DEFAULT_NETWORK_IF_NAME}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Setup hosts file to support ping by hostname to master
|
|
||||||
if [ ! "$(cat /etc/hosts | grep $MASTER_NAME)" ]; then
|
|
||||||
echo "Adding $MASTER_NAME to hosts file"
|
|
||||||
echo "$MASTER_IP $MASTER_NAME" >> /etc/hosts
|
|
||||||
fi
|
|
||||||
echo "$NODE_IP $NODE_NAME" >> /etc/hosts
|
|
||||||
|
|
||||||
# Setup hosts file to support ping by hostname to each node in the cluster
|
|
||||||
for (( i=0; i<${#NODE_NAMES[@]}; i++)); do
|
|
||||||
node=${NODE_NAMES[$i]}
|
|
||||||
ip=${NODE_IPS[$i]}
|
|
||||||
if [ ! "$(cat /etc/hosts | grep $node)" ]; then
|
|
||||||
echo "Adding $node to hosts file"
|
|
||||||
echo "$ip $node" >> /etc/hosts
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
enable-accounting
|
|
||||||
prepare-package-manager
|
|
||||||
|
|
||||||
# Configure network
|
|
||||||
if [ "${NETWORK_PROVIDER}" != "kubenet" ]; then
|
|
||||||
provision-network-node
|
|
||||||
fi
|
|
||||||
|
|
||||||
write-salt-config kubernetes-pool
|
|
||||||
|
|
||||||
# Generate kubelet and kube-proxy auth file(kubeconfig) if there is not an existing one
|
|
||||||
known_kubeconfig_file="/srv/salt-overlay/salt/kubelet/kubeconfig"
|
|
||||||
if [[ ! -f "${known_kubeconfig_file}" ]]; then
|
|
||||||
create-salt-kubelet-auth
|
|
||||||
create-salt-kubeproxy-auth
|
|
||||||
else
|
|
||||||
# stop kubelet, let salt start it later
|
|
||||||
systemctl stop kubelet
|
|
||||||
fi
|
|
||||||
|
|
||||||
install-salt
|
|
||||||
add-volume-support
|
|
||||||
|
|
||||||
run-salt
|
|
||||||
|
|
||||||
dnf install -y socat ethtool
|
|
||||||
dnf update -y docker
|
|
@ -1,222 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2015 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
function enable-accounting() {
|
|
||||||
mkdir -p /etc/systemd/system.conf.d/
|
|
||||||
cat <<EOF >/etc/systemd/system.conf.d/kubernetes-accounting.conf
|
|
||||||
[Manager]
|
|
||||||
DefaultCPUAccounting=yes
|
|
||||||
DefaultMemoryAccounting=yes
|
|
||||||
EOF
|
|
||||||
systemctl daemon-reload
|
|
||||||
}
|
|
||||||
|
|
||||||
function prepare-package-manager() {
|
|
||||||
echo "Prepare package manager"
|
|
||||||
|
|
||||||
# Useful if a mirror is broken or slow
|
|
||||||
if [ -z "$CUSTOM_FEDORA_REPOSITORY_URL" ]; then
|
|
||||||
echo "fastestmirror=True" >> /etc/dnf/dnf.conf
|
|
||||||
else
|
|
||||||
# remove trailing slash from URL if it's present
|
|
||||||
CUSTOM_FEDORA_REPOSITORY_URL="${CUSTOM_FEDORA_REPOSITORY_URL%/}"
|
|
||||||
sed -i -e "/^metalink=/d" /etc/yum.repos.d/*.repo
|
|
||||||
sed -i -e "s@^#baseurl=http://download.fedoraproject.org/pub/fedora@baseurl=$CUSTOM_FEDORA_REPOSITORY_URL@" /etc/yum.repos.d/*.repo
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function add-volume-support() {
|
|
||||||
echo "Adding nfs volume support"
|
|
||||||
|
|
||||||
# we need nfs-utils to support volumes
|
|
||||||
dnf install -y nfs-utils
|
|
||||||
}
|
|
||||||
|
|
||||||
function write-salt-config() {
|
|
||||||
local role="$1"
|
|
||||||
|
|
||||||
# Update salt configuration
|
|
||||||
mkdir -p /etc/salt/minion.d
|
|
||||||
|
|
||||||
mkdir -p /srv/salt-overlay/pillar
|
|
||||||
cat <<EOF >/srv/salt-overlay/pillar/cluster-params.sls
|
|
||||||
service_cluster_ip_range: '$(echo "$SERVICE_CLUSTER_IP_RANGE" | sed -e "s/'/''/g")'
|
|
||||||
cert_ip: '$(echo "$MASTER_IP" | sed -e "s/'/''/g")'
|
|
||||||
enable_cluster_monitoring: '$(echo "$ENABLE_CLUSTER_MONITORING" | sed -e "s/'/''/g")'
|
|
||||||
enable_cluster_logging: '$(echo "$ENABLE_CLUSTER_LOGGING" | sed -e "s/'/''/g")'
|
|
||||||
enable_cluster_ui: '$(echo "$ENABLE_CLUSTER_UI" | sed -e "s/'/''/g")'
|
|
||||||
enable_node_logging: '$(echo "$ENABLE_NODE_LOGGING" | sed -e "s/'/''/g")'
|
|
||||||
logging_destination: '$(echo "$LOGGING_DESTINATION" | sed -e "s/'/''/g")'
|
|
||||||
elasticsearch_replicas: '$(echo "$ELASTICSEARCH_LOGGING_REPLICAS" | sed -e "s/'/''/g")'
|
|
||||||
enable_cluster_dns: '$(echo "$ENABLE_CLUSTER_DNS" | sed -e "s/'/''/g")'
|
|
||||||
dns_server: '$(echo "$DNS_SERVER_IP" | sed -e "s/'/''/g")'
|
|
||||||
dns_domain: '$(echo "$DNS_DOMAIN" | sed -e "s/'/''/g")'
|
|
||||||
instance_prefix: '$(echo "$INSTANCE_PREFIX" | sed -e "s/'/''/g")'
|
|
||||||
admission_control: '$(echo "$ADMISSION_CONTROL" | sed -e "s/'/''/g")'
|
|
||||||
enable_cpu_cfs_quota: '$(echo "$ENABLE_CPU_CFS_QUOTA" | sed -e "s/'/''/g")'
|
|
||||||
network_provider: '$(echo "$NETWORK_PROVIDER" | sed -e "s/'/''/g")'
|
|
||||||
cluster_cidr: '$(echo "$CLUSTER_IP_RANGE" | sed -e "s/'/''/g")'
|
|
||||||
opencontrail_tag: '$(echo "$OPENCONTRAIL_TAG" | sed -e "s/'/''/g")'
|
|
||||||
opencontrail_kubernetes_tag: '$(echo "$OPENCONTRAIL_KUBERNETES_TAG" | sed -e "s/'/''/g")'
|
|
||||||
opencontrail_public_subnet: '$(echo "$OPENCONTRAIL_PUBLIC_SUBNET" | sed -e "s/'/''/g")'
|
|
||||||
e2e_storage_test_environment: '$(echo "$E2E_STORAGE_TEST_ENVIRONMENT" | sed -e "s/'/''/g")'
|
|
||||||
enable_hostpath_provisioner: '$(echo "$ENABLE_HOSTPATH_PROVISIONER" | sed -e "s/'/''/g")'
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [ -n "${EVICTION_HARD:-}" ]; then
|
|
||||||
cat <<EOF >>/srv/salt-overlay/pillar/cluster-params.sls
|
|
||||||
eviction_hard: '$(echo "${EVICTION_HARD}" | sed -e "s/'/''/g")'
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat <<EOF >/etc/salt/minion.d/log-level-debug.conf
|
|
||||||
log_level: warning
|
|
||||||
log_level_logfile: warning
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/salt/minion.d/grains.conf
|
|
||||||
grains:
|
|
||||||
node_ip: '$(echo "$MASTER_IP" | sed -e "s/'/''/g")'
|
|
||||||
publicAddressOverride: '$(echo "$MASTER_IP" | sed -e "s/'/''/g")'
|
|
||||||
network_mode: openvswitch
|
|
||||||
networkInterfaceName: '$(echo "$NETWORK_IF_NAME" | sed -e "s/'/''/g")'
|
|
||||||
api_servers: '$(echo "$MASTER_IP" | sed -e "s/'/''/g")'
|
|
||||||
kubelet_kubeconfig: /srv/salt-overlay/salt/kubelet/kubeconfig
|
|
||||||
cloud: vagrant
|
|
||||||
roles:
|
|
||||||
- $role
|
|
||||||
runtime_config: '$(echo "$RUNTIME_CONFIG" | sed -e "s/'/''/g")'
|
|
||||||
docker_opts: '$(echo "$DOCKER_OPTS" | sed -e "s/'/''/g")'
|
|
||||||
master_extra_sans: '$(echo "$MASTER_EXTRA_SANS" | sed -e "s/'/''/g")'
|
|
||||||
keep_host_etcd: true
|
|
||||||
kube_user: '$(echo "$KUBE_USER" | sed -e "s/'/''/g")'
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
function release_not_found() {
|
|
||||||
echo "It looks as if you don't have a compiled version of Kubernetes. If you" >&2
|
|
||||||
echo "are running from a clone of the git repo, please run 'make quick-release'." >&2
|
|
||||||
echo "Note that this requires having Docker installed. If you are running " >&2
|
|
||||||
echo "from a release tarball, something is wrong. Look at " >&2
|
|
||||||
echo "http://kubernetes.io/ for information on how to contact the development team for help." >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
function install-salt() {
|
|
||||||
server_binary_tar="/vagrant/server/kubernetes-server-linux-amd64.tar.gz"
|
|
||||||
if [[ ! -f "$server_binary_tar" ]]; then
|
|
||||||
server_binary_tar="/vagrant/_output/release-tars/kubernetes-server-linux-amd64.tar.gz"
|
|
||||||
fi
|
|
||||||
if [[ ! -f "$server_binary_tar" ]]; then
|
|
||||||
release_not_found
|
|
||||||
fi
|
|
||||||
|
|
||||||
salt_tar="/vagrant/server/kubernetes-salt.tar.gz"
|
|
||||||
if [[ ! -f "$salt_tar" ]]; then
|
|
||||||
salt_tar="/vagrant/_output/release-tars/kubernetes-salt.tar.gz"
|
|
||||||
fi
|
|
||||||
if [[ ! -f "$salt_tar" ]]; then
|
|
||||||
release_not_found
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Running release install script"
|
|
||||||
rm -rf /kube-install
|
|
||||||
mkdir -p /kube-install
|
|
||||||
pushd /kube-install
|
|
||||||
tar xzf "$salt_tar"
|
|
||||||
cp "$server_binary_tar" .
|
|
||||||
./kubernetes/saltbase/install.sh "${server_binary_tar##*/}"
|
|
||||||
popd
|
|
||||||
|
|
||||||
if ! which salt-call >/dev/null 2>&1; then
|
|
||||||
# Install salt from official repositories.
|
|
||||||
# Need to enable testing-repos to get version of salt with fix for dnf-core-plugins
|
|
||||||
dnf config-manager --set-enabled updates-testing
|
|
||||||
dnf install -y salt-minion
|
|
||||||
|
|
||||||
# Fedora >= 23 includes salt packages but the bootstrap is
|
|
||||||
# creating configuration for a (non-existent) salt repo anyway.
|
|
||||||
# Remove the invalid repo to prevent dnf from warning about it on
|
|
||||||
# every update. Assume this problem is specific to Fedora 23 and
|
|
||||||
# will fixed by the time another version of Fedora lands.
|
|
||||||
local fedora_version=$(grep 'VERSION_ID' /etc/os-release | sed 's+VERSION_ID=++')
|
|
||||||
if [[ "${fedora_version}" = '23' ]]; then
|
|
||||||
local repo_file='/etc/yum.repos.d/saltstack-salt-fedora-23.repo'
|
|
||||||
if [[ -f "${repo_file}" ]]; then
|
|
||||||
rm "${repo_file}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function run-salt() {
|
|
||||||
echo " Now waiting for the Salt provisioning process to complete on this machine."
|
|
||||||
echo " This can take some time based on your network, disk, and cpu speed."
|
|
||||||
salt-call --local state.highstate
|
|
||||||
}
|
|
||||||
|
|
||||||
function create-salt-kubelet-auth() {
|
|
||||||
local -r kubelet_kubeconfig_folder="/srv/salt-overlay/salt/kubelet"
|
|
||||||
mkdir -p "${kubelet_kubeconfig_folder}"
|
|
||||||
(umask 077;
|
|
||||||
cat > "${kubelet_kubeconfig_folder}/kubeconfig" << EOF
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Config
|
|
||||||
clusters:
|
|
||||||
- cluster:
|
|
||||||
server: "https://${MASTER_IP}"
|
|
||||||
insecure-skip-tls-verify: true
|
|
||||||
name: local
|
|
||||||
contexts:
|
|
||||||
- context:
|
|
||||||
cluster: local
|
|
||||||
user: kubelet
|
|
||||||
name: service-account-context
|
|
||||||
current-context: service-account-context
|
|
||||||
users:
|
|
||||||
- name: kubelet
|
|
||||||
user:
|
|
||||||
token: ${KUBELET_TOKEN}
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
function create-salt-kubeproxy-auth() {
|
|
||||||
kube_proxy_kubeconfig_folder="/srv/salt-overlay/salt/kube-proxy"
|
|
||||||
mkdir -p "${kube_proxy_kubeconfig_folder}"
|
|
||||||
(umask 077;
|
|
||||||
cat > "${kube_proxy_kubeconfig_folder}/kubeconfig" << EOF
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Config
|
|
||||||
clusters:
|
|
||||||
- cluster:
|
|
||||||
insecure-skip-tls-verify: true
|
|
||||||
name: local
|
|
||||||
contexts:
|
|
||||||
- context:
|
|
||||||
cluster: local
|
|
||||||
user: kube-proxy
|
|
||||||
name: service-account-context
|
|
||||||
current-context: service-account-context
|
|
||||||
users:
|
|
||||||
- name: kube-proxy
|
|
||||||
user:
|
|
||||||
token: ${KUBE_PROXY_TOKEN}
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,389 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2014 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
# A library of helper functions that each provider hosting Kubernetes must implement to use cluster/kube-*.sh scripts.
|
|
||||||
|
|
||||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|
||||||
source "${KUBE_ROOT}/cluster/vagrant/${KUBE_CONFIG_FILE-"config-default.sh"}"
|
|
||||||
source "${KUBE_ROOT}/cluster/common.sh"
|
|
||||||
|
|
||||||
function detect-master () {
|
|
||||||
KUBE_MASTER_IP=$MASTER_IP
|
|
||||||
echo "KUBE_MASTER_IP: ${KUBE_MASTER_IP}" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get node IP addresses and store in KUBE_NODE_IP_ADDRESSES[]
|
|
||||||
function detect-nodes {
|
|
||||||
echo "Nodes already detected" 1>&2
|
|
||||||
KUBE_NODE_IP_ADDRESSES=("${NODE_IPS[@]}")
|
|
||||||
}
|
|
||||||
|
|
||||||
# Verify prereqs on host machine Also sets exports USING_KUBE_SCRIPTS=true so
|
|
||||||
# that our Vagrantfile doesn't error out.
|
|
||||||
function verify-prereqs {
|
|
||||||
for x in vagrant; do
|
|
||||||
if ! which "$x" >/dev/null; then
|
|
||||||
echo "Can't find $x in PATH, please fix and retry."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
local vagrant_plugins=$(vagrant plugin list | sed '-es% .*$%%' '-es% *% %g' | tr ' ' $'\n')
|
|
||||||
local providers=(
|
|
||||||
# Format is:
|
|
||||||
# provider_ctl_executable vagrant_provider_name vagrant_provider_plugin_re
|
|
||||||
# either provider_ctl_executable or vagrant_provider_plugin_re can
|
|
||||||
# be blank (i.e., '') if none is needed by Vagrant (see, e.g.,
|
|
||||||
# virtualbox entry)
|
|
||||||
'' vmware_fusion vagrant-vmware-fusion
|
|
||||||
'' vmware_workstation vagrant-vmware-workstation
|
|
||||||
prlctl parallels vagrant-parallels
|
|
||||||
VBoxManage virtualbox ''
|
|
||||||
virsh libvirt vagrant-libvirt
|
|
||||||
'' vsphere vagrant-vsphere
|
|
||||||
)
|
|
||||||
local provider_found=''
|
|
||||||
local provider_bin
|
|
||||||
local provider_name
|
|
||||||
local provider_plugin_re
|
|
||||||
|
|
||||||
while [ "${#providers[@]}" -gt 0 ]; do
|
|
||||||
provider_bin=${providers[0]}
|
|
||||||
provider_name=${providers[1]}
|
|
||||||
provider_plugin_re=${providers[2]}
|
|
||||||
providers=("${providers[@]:3}")
|
|
||||||
|
|
||||||
# If the provider is explicitly set, look only for that provider
|
|
||||||
if [ -n "${VAGRANT_DEFAULT_PROVIDER:-}" ] \
|
|
||||||
&& [ "${VAGRANT_DEFAULT_PROVIDER}" != "${provider_name}" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ([ -z "${provider_bin}" ] \
|
|
||||||
|| which "${provider_bin}" >/dev/null 2>&1) \
|
|
||||||
&& ([ -z "${provider_plugin_re}" ] \
|
|
||||||
|| [ -n "$(echo "${vagrant_plugins}" | grep -E "^${provider_plugin_re}$")" ]); then
|
|
||||||
provider_found="${provider_name}"
|
|
||||||
# Stop after finding the first viable provider
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "${provider_found}" ]; then
|
|
||||||
if [ -n "${VAGRANT_DEFAULT_PROVIDER:-}" ]; then
|
|
||||||
echo "Can't find the necessary components for the ${VAGRANT_DEFAULT_PROVIDER} vagrant provider."
|
|
||||||
echo "Possible reasons could be: "
|
|
||||||
echo -e "\t- vmrun utility is not in your path"
|
|
||||||
echo -e "\t- Vagrant plugin was not found."
|
|
||||||
echo -e "\t- VAGRANT_DEFAULT_PROVIDER is set, but not found."
|
|
||||||
echo "Please fix and retry."
|
|
||||||
else
|
|
||||||
echo "Can't find the necessary components for any viable vagrant providers (e.g., virtualbox), please fix and retry."
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set VAGRANT_CWD to KUBE_ROOT so that we find the right Vagrantfile no
|
|
||||||
# matter what directory the tools are called from.
|
|
||||||
export VAGRANT_CWD="${KUBE_ROOT}"
|
|
||||||
|
|
||||||
export USING_KUBE_SCRIPTS=true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Create a set of provision scripts for the master and each of the nodes
|
|
||||||
function create-provision-scripts {
|
|
||||||
kube::util::ensure-temp-dir
|
|
||||||
|
|
||||||
(
|
|
||||||
echo "#! /bin/bash"
|
|
||||||
echo-kube-env
|
|
||||||
echo "NODE_IP='${MASTER_IP}'"
|
|
||||||
echo "CONTAINER_ADDR='${MASTER_CONTAINER_ADDR}'"
|
|
||||||
echo "CONTAINER_NETMASK='${MASTER_CONTAINER_NETMASK}'"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-utils.sh"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-network-master.sh"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-master.sh"
|
|
||||||
) > "${KUBE_TEMP}/master-start.sh"
|
|
||||||
|
|
||||||
for (( i=0; i<${#NODE_NAMES[@]}; i++)); do
|
|
||||||
(
|
|
||||||
echo "#! /bin/bash"
|
|
||||||
echo-kube-env
|
|
||||||
echo "NODE_NAME=(${NODE_NAMES[$i]})"
|
|
||||||
echo "NODE_IP='${NODE_IPS[$i]}'"
|
|
||||||
echo "NODE_ID='$i'"
|
|
||||||
echo "CONTAINER_ADDR='${NODE_CONTAINER_ADDRS[$i]}'"
|
|
||||||
echo "CONTAINER_NETMASK='${NODE_CONTAINER_NETMASKS[$i]}'"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-utils.sh"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-network-node.sh"
|
|
||||||
awk '!/^#/' "${KUBE_ROOT}/cluster/vagrant/provision-node.sh"
|
|
||||||
) > "${KUBE_TEMP}/node-start-${i}.sh"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function echo-kube-env() {
|
|
||||||
echo "KUBE_ROOT=/vagrant"
|
|
||||||
echo "INSTANCE_PREFIX='${INSTANCE_PREFIX}'"
|
|
||||||
echo "MASTER_NAME='${INSTANCE_PREFIX}-master'"
|
|
||||||
echo "MASTER_IP='${MASTER_IP}'"
|
|
||||||
echo "NODE_NAMES=(${NODE_NAMES[@]})"
|
|
||||||
echo "NODE_IPS=(${NODE_IPS[@]})"
|
|
||||||
echo "DEFAULT_NETWORK_IF_NAME=${DEFAULT_NETWORK_IF_NAME}"
|
|
||||||
echo "CONTAINER_SUBNET='${CONTAINER_SUBNET}'"
|
|
||||||
echo "CLUSTER_IP_RANGE='${CLUSTER_IP_RANGE}'"
|
|
||||||
echo "MASTER_CONTAINER_SUBNET='${MASTER_CONTAINER_SUBNET}'"
|
|
||||||
echo "NODE_CONTAINER_NETMASKS='${NODE_CONTAINER_NETMASKS[@]}'"
|
|
||||||
echo "NODE_CONTAINER_SUBNETS=(${NODE_CONTAINER_SUBNETS[@]})"
|
|
||||||
echo "SERVICE_CLUSTER_IP_RANGE='${SERVICE_CLUSTER_IP_RANGE}'"
|
|
||||||
echo "MASTER_USER='${MASTER_USER}'"
|
|
||||||
echo "MASTER_PASSWD='${MASTER_PASSWD}'"
|
|
||||||
echo "KUBE_USER='${KUBE_USER}'"
|
|
||||||
echo "KUBE_PASSWORD='${KUBE_PASSWORD}'"
|
|
||||||
echo "KUBE_BEARER_TOKEN='${KUBE_BEARER_TOKEN}'"
|
|
||||||
echo "ENABLE_CLUSTER_MONITORING='${ENABLE_CLUSTER_MONITORING}'"
|
|
||||||
echo "ENABLE_CLUSTER_LOGGING='${ENABLE_CLUSTER_LOGGING:-false}'"
|
|
||||||
echo "ELASTICSEARCH_LOGGING_REPLICAS='${ELASTICSEARCH_LOGGING_REPLICAS:-1}'"
|
|
||||||
echo "ENABLE_NODE_LOGGING='${ENABLE_NODE_LOGGING:-false}'"
|
|
||||||
echo "ENABLE_CLUSTER_UI='${ENABLE_CLUSTER_UI}'"
|
|
||||||
echo "ENABLE_HOSTPATH_PROVISIONER='${ENABLE_HOSTPATH_PROVISIONER:-false}'"
|
|
||||||
echo "LOGGING_DESTINATION='${LOGGING_DESTINATION:-}'"
|
|
||||||
echo "ENABLE_CLUSTER_DNS='${ENABLE_CLUSTER_DNS:-false}'"
|
|
||||||
echo "DNS_SERVER_IP='${DNS_SERVER_IP:-}'"
|
|
||||||
echo "DNS_DOMAIN='${DNS_DOMAIN:-}'"
|
|
||||||
echo "RUNTIME_CONFIG='${RUNTIME_CONFIG:-}'"
|
|
||||||
echo "ADMISSION_CONTROL='${ADMISSION_CONTROL:-}'"
|
|
||||||
echo "DOCKER_OPTS='${EXTRA_DOCKER_OPTS:-}'"
|
|
||||||
echo "VAGRANT_DEFAULT_PROVIDER='${VAGRANT_DEFAULT_PROVIDER:-}'"
|
|
||||||
echo "KUBELET_TOKEN='${KUBELET_TOKEN:-}'"
|
|
||||||
echo "KUBE_PROXY_TOKEN='${KUBE_PROXY_TOKEN:-}'"
|
|
||||||
echo "MASTER_EXTRA_SANS='${MASTER_EXTRA_SANS:-}'"
|
|
||||||
echo "ENABLE_CPU_CFS_QUOTA='${ENABLE_CPU_CFS_QUOTA}'"
|
|
||||||
echo "NETWORK_PROVIDER='${NETWORK_PROVIDER:-}'"
|
|
||||||
echo "OPENCONTRAIL_TAG='${OPENCONTRAIL_TAG:-}'"
|
|
||||||
echo "OPENCONTRAIL_KUBERNETES_TAG='${OPENCONTRAIL_KUBERNETES_TAG:-}'"
|
|
||||||
echo "OPENCONTRAIL_PUBLIC_SUBNET='${OPENCONTRAIL_PUBLIC_SUBNET:-}'"
|
|
||||||
echo "E2E_STORAGE_TEST_ENVIRONMENT='${E2E_STORAGE_TEST_ENVIRONMENT:-}'"
|
|
||||||
echo "CUSTOM_FEDORA_REPOSITORY_URL='${CUSTOM_FEDORA_REPOSITORY_URL:-}'"
|
|
||||||
echo "EVICTION_HARD='${EVICTION_HARD:-}'"
|
|
||||||
}
|
|
||||||
|
|
||||||
function verify-cluster {
|
|
||||||
# TODO: How does the user know the difference between "tak[ing] some
|
|
||||||
# time" and "loop[ing] forever"? Can we give more specific feedback on
|
|
||||||
# whether "an error" has occurred?
|
|
||||||
echo "Each machine instance has been created/updated."
|
|
||||||
echo " Now waiting for the Salt provisioning process to complete on each machine."
|
|
||||||
echo " This can take some time based on your network, disk, and cpu speed."
|
|
||||||
echo " It is possible for an error to occur during Salt provision of cluster and this could loop forever."
|
|
||||||
|
|
||||||
# verify master has all required daemons
|
|
||||||
echo "Validating master"
|
|
||||||
local machine="master"
|
|
||||||
local -a required_processes=("kube-apiserver" "kube-scheduler" "kube-controller-manager" "kubelet" "docker")
|
|
||||||
local validated="1"
|
|
||||||
until [[ "$validated" == "0" ]]; do
|
|
||||||
validated="0"
|
|
||||||
for process in "${required_processes[@]}"; do
|
|
||||||
vagrant ssh "${machine}" -c "pgrep -f ${process}" >/dev/null 2>&1 || {
|
|
||||||
printf "."
|
|
||||||
validated="1"
|
|
||||||
sleep 2
|
|
||||||
}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# verify each node has all required daemons
|
|
||||||
local i
|
|
||||||
for (( i=0; i<${#NODE_NAMES[@]}; i++)); do
|
|
||||||
echo "Validating ${VAGRANT_NODE_NAMES[$i]}"
|
|
||||||
local machine=${VAGRANT_NODE_NAMES[$i]}
|
|
||||||
local -a required_processes=("kube-proxy" "kubelet" "docker")
|
|
||||||
local validated="1"
|
|
||||||
until [[ "${validated}" == "0" ]]; do
|
|
||||||
validated="0"
|
|
||||||
for process in "${required_processes[@]}"; do
|
|
||||||
vagrant ssh "${machine}" -c "pgrep -f ${process}" >/dev/null 2>&1 || {
|
|
||||||
printf "."
|
|
||||||
validated="1"
|
|
||||||
sleep 2
|
|
||||||
}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "Waiting for each node to be registered with cloud provider"
|
|
||||||
for (( i=0; i<${#NODE_NAMES[@]}; i++)); do
|
|
||||||
local validated="0"
|
|
||||||
start="$(date +%s)"
|
|
||||||
until [[ "$validated" == "1" ]]; do
|
|
||||||
now="$(date +%s)"
|
|
||||||
# Timeout set to 3 minutes
|
|
||||||
if [ $((now - start)) -gt 180 ]; then
|
|
||||||
echo "Timeout while waiting for echo node to be registered with cloud provider"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
local nodes=$("${KUBE_ROOT}/cluster/kubectl.sh" get nodes -o name)
|
|
||||||
validated=$(echo $nodes | grep -c "${NODE_NAMES[i]}") || {
|
|
||||||
printf "."
|
|
||||||
sleep 2
|
|
||||||
validated="0"
|
|
||||||
}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# By this time, all kube api calls should work, so no need to loop and retry.
|
|
||||||
echo "Validating we can run kubectl commands."
|
|
||||||
vagrant ssh master --command "kubectl get pods" || {
|
|
||||||
echo "WARNING: kubectl to localhost failed. This could mean localhost is not bound to an IP"
|
|
||||||
}
|
|
||||||
|
|
||||||
(
|
|
||||||
# ensures KUBECONFIG is set
|
|
||||||
get-kubeconfig-basicauth
|
|
||||||
get-kubeconfig-bearertoken
|
|
||||||
echo
|
|
||||||
echo "Kubernetes cluster is running."
|
|
||||||
echo
|
|
||||||
echo "The master is running at:"
|
|
||||||
echo
|
|
||||||
echo " https://${MASTER_IP}"
|
|
||||||
echo
|
|
||||||
echo "Administer and visualize its resources using Cockpit:"
|
|
||||||
echo
|
|
||||||
echo " https://${MASTER_IP}:9090"
|
|
||||||
echo
|
|
||||||
echo "For more information on Cockpit, visit http://cockpit-project.org"
|
|
||||||
echo
|
|
||||||
echo "The user name and password to use is located in ${KUBECONFIG}"
|
|
||||||
echo
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Instantiate a kubernetes cluster
|
|
||||||
function kube-up {
|
|
||||||
load-or-gen-kube-basicauth
|
|
||||||
load-or-gen-kube-bearertoken
|
|
||||||
get-tokens
|
|
||||||
create-provision-scripts
|
|
||||||
|
|
||||||
vagrant up --no-parallel
|
|
||||||
|
|
||||||
export KUBE_CERT="/tmp/$RANDOM-kubecfg.crt"
|
|
||||||
export KUBE_KEY="/tmp/$RANDOM-kubecfg.key"
|
|
||||||
export CA_CERT="/tmp/$RANDOM-kubernetes.ca.crt"
|
|
||||||
export CONTEXT="vagrant"
|
|
||||||
|
|
||||||
(
|
|
||||||
umask 077
|
|
||||||
vagrant ssh master -- sudo cat /srv/kubernetes/kubecfg.crt >"${KUBE_CERT}" 2>/dev/null
|
|
||||||
vagrant ssh master -- sudo cat /srv/kubernetes/kubecfg.key >"${KUBE_KEY}" 2>/dev/null
|
|
||||||
vagrant ssh master -- sudo cat /srv/kubernetes/ca.crt >"${CA_CERT}" 2>/dev/null
|
|
||||||
|
|
||||||
# Update the user's kubeconfig to include credentials for this apiserver.
|
|
||||||
create-kubeconfig
|
|
||||||
)
|
|
||||||
|
|
||||||
verify-cluster
|
|
||||||
}
|
|
||||||
|
|
||||||
# Delete a kubernetes cluster
|
|
||||||
function kube-down {
|
|
||||||
vagrant destroy -f
|
|
||||||
}
|
|
||||||
|
|
||||||
# Update a kubernetes cluster with latest source
|
|
||||||
function kube-push {
|
|
||||||
get-kubeconfig-basicauth
|
|
||||||
get-kubeconfig-bearertoken
|
|
||||||
create-provision-scripts
|
|
||||||
vagrant provision
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute prior to running tests to build a release if required for env
|
|
||||||
function test-build-release {
|
|
||||||
# Make a release
|
|
||||||
"${KUBE_ROOT}/build/release.sh"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute prior to running tests to initialize required structure
|
|
||||||
function test-setup {
|
|
||||||
"${KUBE_ROOT}/cluster/kube-up.sh"
|
|
||||||
echo "Vagrant test setup complete" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute after running tests to perform any required clean-up
|
|
||||||
function test-teardown {
|
|
||||||
kube-down
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find the node name based on the IP address
|
|
||||||
function find-vagrant-name-by-ip {
|
|
||||||
local ip="$1"
|
|
||||||
local ip_pattern="${NODE_IP_BASE}(.*)"
|
|
||||||
|
|
||||||
# This is subtle. We map 10.245.2.2 -> node-1. We do this by matching a
|
|
||||||
# regexp and using the capture to construct the name.
|
|
||||||
[[ $ip =~ $ip_pattern ]] || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "node-$((${BASH_REMATCH[1]} - 1))"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find the vagrant machine name based on the host name of the node
|
|
||||||
function find-vagrant-name-by-node-name {
|
|
||||||
local ip="$1"
|
|
||||||
if [[ "$ip" == "${INSTANCE_PREFIX}-master" ]]; then
|
|
||||||
echo "master"
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
local ip_pattern="${INSTANCE_PREFIX}-node-(.*)"
|
|
||||||
|
|
||||||
[[ $ip =~ $ip_pattern ]] || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "node-${BASH_REMATCH[1]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# SSH to a node by name or IP ($1) and run a command ($2).
|
|
||||||
function ssh-to-node {
|
|
||||||
local node="$1"
|
|
||||||
local cmd="$2"
|
|
||||||
local machine
|
|
||||||
|
|
||||||
machine=$(find-vagrant-name-by-ip $node) || true
|
|
||||||
[[ -n ${machine-} ]] || machine=$(find-vagrant-name-by-node-name $node) || true
|
|
||||||
[[ -n ${machine-} ]] || {
|
|
||||||
echo "Cannot find machine to ssh to: $1"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
vagrant ssh "${machine}" -c "${cmd}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Perform preparations required to run e2e tests
|
|
||||||
function prepare-e2e() {
|
|
||||||
echo "Vagrant doesn't need special preparations for e2e tests" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
function get-tokens() {
|
|
||||||
KUBELET_TOKEN=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null)
|
|
||||||
KUBE_PROXY_TOKEN=$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null)
|
|
||||||
}
|
|
@ -225,7 +225,7 @@ func RegisterClusterFlags() {
|
|||||||
flag.StringVar(&TestContext.KubeVolumeDir, "volume-dir", "/var/lib/kubelet", "Path to the directory containing the kubelet volumes.")
|
flag.StringVar(&TestContext.KubeVolumeDir, "volume-dir", "/var/lib/kubelet", "Path to the directory containing the kubelet volumes.")
|
||||||
flag.StringVar(&TestContext.CertDir, "cert-dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.")
|
flag.StringVar(&TestContext.CertDir, "cert-dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.")
|
||||||
flag.StringVar(&TestContext.RepoRoot, "repo-root", "../../", "Root directory of kubernetes repository, for finding test files.")
|
flag.StringVar(&TestContext.RepoRoot, "repo-root", "../../", "Root directory of kubernetes repository, for finding test files.")
|
||||||
flag.StringVar(&TestContext.Provider, "provider", "", "The name of the Kubernetes provider (gce, gke, local, vagrant, etc.)")
|
flag.StringVar(&TestContext.Provider, "provider", "", "The name of the Kubernetes provider (gce, gke, local, etc.)")
|
||||||
flag.StringVar(&TestContext.KubectlPath, "kubectl-path", "kubectl", "The kubectl binary to use. For development, you might use 'cluster/kubectl.sh' here.")
|
flag.StringVar(&TestContext.KubectlPath, "kubectl-path", "kubectl", "The kubectl binary to use. For development, you might use 'cluster/kubectl.sh' here.")
|
||||||
flag.StringVar(&TestContext.OutputDir, "e2e-output-dir", "/tmp", "Output directory for interesting/useful test data, like performance data, benchmarks, and other metrics.")
|
flag.StringVar(&TestContext.OutputDir, "e2e-output-dir", "/tmp", "Output directory for interesting/useful test data, like performance data, benchmarks, and other metrics.")
|
||||||
flag.StringVar(&TestContext.Prefix, "prefix", "e2e", "A prefix to be added to cloud resources created during testing.")
|
flag.StringVar(&TestContext.Prefix, "prefix", "e2e", "A prefix to be added to cloud resources created during testing.")
|
||||||
|
@ -3454,12 +3454,6 @@ func GetSigner(provider string) (ssh.Signer, error) {
|
|||||||
}
|
}
|
||||||
// Otherwise revert to home dir
|
// Otherwise revert to home dir
|
||||||
keyfile = "kube_aws_rsa"
|
keyfile = "kube_aws_rsa"
|
||||||
case "vagrant":
|
|
||||||
keyfile = os.Getenv("VAGRANT_SSH_KEY")
|
|
||||||
if len(keyfile) != 0 {
|
|
||||||
return sshutil.MakePrivateKeySignerFromFile(keyfile)
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("VAGRANT_SSH_KEY env variable should be provided")
|
|
||||||
case "local", "vsphere":
|
case "local", "vsphere":
|
||||||
keyfile = os.Getenv("LOCAL_SSH_KEY") // maybe?
|
keyfile = os.Getenv("LOCAL_SSH_KEY") // maybe?
|
||||||
if len(keyfile) == 0 {
|
if len(keyfile) == 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user