Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
224aebd2
Commit
224aebd2
authored
Dec 02, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #17977 from mikedanese/vagrant-fix
Auto commit by PR queue bot
parents
7d25f715
e2c5c898
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
238 additions
and
438 deletions
+238
-438
kube-apiserver.manifest
cluster/saltbase/salt/kube-apiserver/kube-apiserver.manifest
+3
-1
kube-controller-manager.manifest
.../kube-controller-manager/kube-controller-manager.manifest
+3
-1
init.sls
cluster/saltbase/salt/kube-node-unpacker/init.sls
+1
-0
default
cluster/saltbase/salt/kubelet/default
+1
-1
provision-master.sh
cluster/vagrant/provision-master.sh
+10
-232
provision-minion.sh
cluster/vagrant/provision-minion.sh
+8
-132
provision-utils.sh
cluster/vagrant/provision-utils.sh
+153
-0
util.sh
cluster/vagrant/util.sh
+59
-71
No files found.
cluster/saltbase/salt/kube-apiserver/kube-apiserver.manifest
View file @
224aebd2
...
...
@@ -9,7 +9,9 @@
{% set cloud_config_volume = "" -%}
{% if grains.cloud is defined -%}
{% set cloud_provider = "--cloud-provider=" + grains.cloud -%}
{% if grains.cloud != 'vagrant' -%}
{% set cloud_provider = "--cloud-provider=" + grains.cloud -%}
{% endif -%}
{% if grains.cloud in [ 'aws', 'gce' ] and grains.cloud_config is defined -%}
{% set cloud_config = "--cloud-config=" + grains.cloud_config -%}
...
...
cluster/saltbase/salt/kube-controller-manager/kube-controller-manager.manifest
View file @
224aebd2
...
...
@@ -27,7 +27,9 @@
{% set cloud_config_volume = "" -%}
{% if grains.cloud is defined -%}
{% set cloud_provider = "--cloud-provider=" + grains.cloud -%}
{% if grains.cloud != 'vagrant' -%}
{% set cloud_provider = "--cloud-provider=" + grains.cloud -%}
{% endif -%}
{% set service_account_key = " --service-account-private-key-file=/srv/kubernetes/server.key " -%}
{% if grains.cloud in [ 'aws', 'gce' ] and grains.cloud_config is defined -%}
...
...
cluster/saltbase/salt/kube-node-unpacker/init.sls
View file @
224aebd2
/etc/kubernetes/kube-node-unpacker.sh:
file.managed:
- source: salt://kube-node-unpacker/kube-node-unpacker.sh
- makedirs: True
- user: root
- group: root
- mode: 755
...
...
cluster/saltbase/salt/kubelet/default
View file @
224aebd2
...
...
@@ -46,7 +46,7 @@
{% endif -%}
{% set cloud_provider = "" -%}
{% if grains.cloud is defined -%}
{% if grains.cloud is defined
and grains.cloud != 'vagrant'
-%}
{% set cloud_provider = "--cloud-provider=" + grains.cloud -%}
{% endif -%}
...
...
cluster/vagrant/provision-master.sh
View file @
224aebd2
...
...
@@ -14,8 +14,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# exit on any error
set
-e
set
-o
errexit
set
-o
nounset
set
-o
pipefail
# Set the host name explicitly
# See: https://github.com/mitchellh/vagrant/issues/2430
...
...
@@ -47,26 +48,6 @@ function release_not_found() {
exit
1
}
# Look for our precompiled binary releases. When running from a source repo,
# these are generated under _output. When running from an release tarball these
# are under ./server.
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
# Setup hosts file to support ping by hostname to each minion in the cluster from apiserver
for
((
i
=
0
;
i<
${#
NODE_NAMES
[@]
}
;
i++
))
;
do
minion
=
${
NODE_NAMES
[
$i
]
}
...
...
@@ -82,87 +63,7 @@ echo "$MASTER_IP $MASTER_NAME" >> /etc/hosts
# Configure the master network
provision-network-master
# Update salt configuration
mkdir
-p
/etc/salt/minion.d
cat
<<
EOF
>/etc/salt/minion.d/master.conf
master: '
$(
echo
"
$MASTER_NAME
"
|
sed
-e
"s/'/''/g"
)
'
auth_timeout: 10
auth_tries: 2
auth_safemode: True
ping_interval: 1
random_reauth_delay: 3
state_aggregrate:
- pkg
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"
)
'
cloud: vagrant
roles:
- kubernetes-master
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
EOF
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_replicas: '
$(
echo
"
$DNS_REPLICAS
"
|
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"
)
'
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"
)
'
EOF
# Configure the salt-master
# Auto accept all keys from minions that try to join
mkdir
-p
/etc/salt/master.d
cat
<<
EOF
>/etc/salt/master.d/auto-accept.conf
open_mode: True
auto_accept: True
EOF
cat
<<
EOF
>/etc/salt/master.d/reactor.conf
# React to new minions starting by running highstate on them.
reactor:
- 'salt/minion/*/start':
- /srv/reactor/highstate-new.sls
EOF
cat
<<
EOF
>/etc/salt/master.d/salt-output.conf
# Minimize the amount of output to terminal
state_verbose: False
state_output: mixed
log_level: debug
log_level_logfile: debug
EOF
cat
<<
EOF
>/etc/salt/minion.d/log-level-debug.conf
log_level: debug
log_level_logfile: debug
EOF
write-salt-config kubernetes-master
# Generate and distribute a shared secret (bearer token) to
# apiserver and kubelet so that kubelet can authenticate to
...
...
@@ -179,57 +80,9 @@ if [[ ! -f "${known_tokens_file}" ]]; then
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
)
kubelet_kubeconfig_file
=
"/srv/salt-overlay/salt/kubelet/kubeconfig"
mkdir
-p
/srv/salt-overlay/salt/kubelet
(
umask
077
;
cat
>
"
${
kubelet_kubeconfig_file
}
"
<<
EOF
apiVersion: v1
kind: Config
clusters:
- cluster:
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
)
mkdir
-p
/srv/salt-overlay/salt/kube-proxy
kube_proxy_kubeconfig_file
=
"/srv/salt-overlay/salt/kube-proxy/kubeconfig"
# Make a kubeconfig file with the token.
# TODO(etune): put apiserver certs into secret too, and reference from authfile,
# so that "Insecure" is not needed.
(
umask
077
;
cat
>
"
${
kube_proxy_kubeconfig_file
}
"
<<
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
)
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
...
...
@@ -250,94 +103,19 @@ if [ ! -e "${BASIC_AUTH_FILE}" ]; then
echo
"
${
MASTER_USER
}
,
${
MASTER_PASSWD
}
,admin"
>
"
${
BASIC_AUTH_FILE
}
"
)
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
# 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
wget https://copr.fedoraproject.org/coprs/sgallagh/cockpit-preview/repo/fedora-21/sgallagh-cockpit-preview-fedora-21.repo
yum
install
-y
cockpit cockpit-kubernetes
yum
install
-y
cockpit cockpit-kubernetes
popd
systemctl
enable
cockpit.socket
systemctl start cockpit.socket
fi
# we will run provision to update code each time we test, so we do not want to do salt installs each time
if
!
which salt-master &>/dev/null
;
then
# Configure the salt-api
cat
<<
EOF
>/etc/salt/master.d/salt-api.conf
# Set vagrant user as REST API user
external_auth:
pam:
vagrant:
- .*
rest_cherrypy:
port: 8000
host:
${
MASTER_IP
}
disable_ssl: True
webhook_disable_auth: True
EOF
install-salt
# Install Salt Master
#
# -M installs the master
# -N does not install the minion
curl
-sS
-L
--connect-timeout
20
--retry
6
--retry-delay
10 https://bootstrap.saltstack.com | sh
-s
--
-M
-N
# Install salt-api
#
# This is used to provide the network transport for salt-api
yum
install
-y
python-cherrypy
# This is used to inform the cloud provider used in the vagrant cluster
yum
install
-y
salt-api
# Set log level to a level higher than "info" to prevent the message about
# enabling the service (which is not an error) from being printed to stderr.
SYSTEMD_LOG_LEVEL
=
notice systemctl
enable
salt-api
systemctl start salt-api
fi
if
!
which salt-minion
>
/dev/null 2>&1
;
then
# Install Salt minion
curl
-sS
-L
--connect-timeout
20
--retry
6
--retry-delay
10 https://bootstrap.saltstack.com | sh
-s
# Edit the Salt minion unit file to do restart always
# needed because vagrant uses this as basis for registration of nodes in cloud provider
# set a oom_score_adj to -999 to prevent our node from being killed with salt-master and then making kubelet NotReady
# because its not found in salt cloud provider call
cat
<<
EOF
>/usr/lib/systemd/system/salt-minion.service
[Unit]
Description=The Salt Minion
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/bin/salt-minion
Restart=Always
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart salt-minion.service
else
# Only run highstate when updating the config. In the first-run case, Salt is
# set up to run highstate as new minions join for the first time.
echo
"Executing configuration"
salt
'*'
mine.update
salt
--force-color
'*'
state.highstate
fi
run-salt
cluster/vagrant/provision-minion.sh
View file @
224aebd2
...
...
@@ -14,59 +14,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# exit on any error
set
-e
#setup kubelet config
mkdir
-p
"/var/lib/kubelet"
(
umask
077
;
cat
>
"/var/lib/kubelet/kubeconfig"
<<
EOF
apiVersion: v1
kind: Config
users:
- name: kubelet
user:
token:
${
KUBELET_TOKEN
}
clusters:
- name: local
cluster:
insecure-skip-tls-verify: true
contexts:
- context:
cluster: local
user: kubelet
name: service-account-context
current-context: service-account-context
EOF
)
#setup proxy config
mkdir
-p
"/var/lib/kube-proxy/"
# Make a kubeconfig file with the token.
# TODO(etune): put apiserver certs into secret too, and reference from authfile,
# so that "Insecure" is not needed.
(
umask
077
;
cat
>
"/var/lib/kube-proxy/kubeconfig"
<<
EOF
apiVersion: v1
kind: Config
users:
- name: kube-proxy
user:
token:
${
KUBE_PROXY_TOKEN
}
clusters:
- name: local
cluster:
insecure-skip-tls-verify: true
contexts:
- context:
cluster: local
user: kube-proxy
name: service-account-context
current-context: service-account-context
EOF
)
set
-o
errexit
set
-o
nounset
set
-o
pipefail
# Set the host name explicitly
# See: https://github.com/mitchellh/vagrant/issues/2430
...
...
@@ -109,85 +59,11 @@ done
# Configure network
provision-network-minion
# Placeholder for any other manifests that may be per-node.
mkdir
-p
/etc/kubernetes/manifests
# Let the minion know who its master is
# Recover the salt-minion if the salt-master network changes
## auth_timeout - how long we want to wait for a time out
## auth_tries - how many times we will retry before restarting salt-minion
## auth_safemode - if our cert is rejected, we will restart salt minion
## ping_interval - restart the minion if we cannot ping the master after 1 minute
## random_reauth_delay - wait 0-3 seconds when reauthenticating
## recon_default - how long to wait before reconnecting
## recon_max - how long you will wait upper bound
## state_aggregrate - try to do a single yum command to install all referenced packages where possible at once, should improve startup times
##
mkdir
-p
/etc/salt/minion.d
cat
<<
EOF
>/etc/salt/minion.d/master.conf
master: '
$(
echo
"
$MASTER_NAME
"
|
sed
-e
"s/'/''/g"
)
'
auth_timeout: 10
auth_tries: 2
auth_safemode: True
ping_interval: 1
random_reauth_delay: 3
state_aggregrate:
- pkg
EOF
write-salt-config kubernetes-pool
cat
<<
EOF
>/etc/salt/minion.d/log-level-debug.conf
log_level: debug
log_level_logfile: debug
EOF
create-salt-kubelet-auth
create-salt-kubeproxy-auth
# Our minions will have a pool role to distinguish them from the master.
cat
<<
EOF
>/etc/salt/minion.d/grains.conf
grains:
cloud: vagrant
network_mode: openvswitch
node_ip: '
$(
echo
"
$NODE_IP
"
|
sed
-e
"s/'/''/g"
)
'
api_servers: '
$(
echo
"
$MASTER_IP
"
|
sed
-e
"s/'/''/g"
)
'
networkInterfaceName: '
$(
echo
"
$NETWORK_IF_NAME
"
|
sed
-e
"s/'/''/g"
)
'
roles:
- kubernetes-pool
cbr-cidr: '
$(
echo
"
$CONTAINER_SUBNET
"
|
sed
-e
"s/'/''/g"
)
'
hostname_override: '
$(
echo
"
$NODE_IP
"
|
sed
-e
"s/'/''/g"
)
'
docker_opts: '
$(
echo
"
$DOCKER_OPTS
"
|
sed
-e
"s/'/''/g"
)
'
EOF
install-salt
# QoS support requires that swap memory is disabled on each of the minions
echo
"Disable swap memory to ensure proper QoS"
swapoff
-a
# we will run provision to update code each time we test, so we do not want to do salt install each time
if
!
which salt-minion
>
/dev/null 2>&1
;
then
# Install Salt
curl
-sS
-L
--connect-timeout
20
--retry
6
--retry-delay
10 https://bootstrap.saltstack.com | sh
-s
# Edit the Salt minion unit file to do restart always
# needed because vagrant uses this as basis for registration of nodes in cloud provider
# set a oom_score_adj to -999 to prevent our node from being killed with salt-master and then making kubelet NotReady
# because its not found in salt cloud provider call
cat
<<
EOF
>/usr/lib/systemd/system/salt-minion.service
[Unit]
Description=The Salt Minion
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/bin/salt-minion
Restart=Always
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl restart salt-minion.service
else
# Sometimes the minion gets wedged when it comes up along with the master.
# Restarting it here un-wedges it.
systemctl restart salt-minion.service
fi
run-salt
cluster/vagrant/provision-utils.sh
0 → 100755
View file @
224aebd2
#!/bin/bash
# Copyright 2015 The Kubernetes Authors All rights reserved.
#
# 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
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_replicas: '
$(
echo
"
$DNS_REPLICAS
"
|
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"
)
'
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"
)
'
EOF
cat
<<
EOF
>/etc/salt/minion.d/log-level-debug.conf
log_level: info
log_level_logfile: debug
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"
)
'
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
EOF
}
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 binaries
curl
-sS
-L
--connect-timeout
20
--retry
6
--retry-delay
10 https://bootstrap.saltstack.com | sh
-s
fi
}
function
run-salt
()
{
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:
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
)
}
cluster/vagrant/util.sh
100644 → 100755
View file @
224aebd2
...
...
@@ -120,45 +120,11 @@ function create-provision-scripts {
(
echo
"#! /bin/bash"
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-kube-env
echo
"NODE_IP='
${
MASTER_IP
}
'"
echo
"CONTAINER_SUBNET='
${
CONTAINER_SUBNET
}
'"
echo
"CONTAINER_NETMASK='
${
MASTER_CONTAINER_NETMASK
}
'"
echo
"MASTER_CONTAINER_SUBNET='
${
MASTER_CONTAINER_SUBNET
}
'"
echo
"CONTAINER_ADDR='
${
MASTER_CONTAINER_ADDR
}
'"
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
"ENABLE_CLUSTER_MONITORING='
${
ENABLE_CLUSTER_MONITORING
}
'"
echo
"ENABLE_NODE_LOGGING='
${
ENABLE_NODE_LOGGING
:-
false
}
'"
echo
"ENABLE_CLUSTER_UI='
${
ENABLE_CLUSTER_UI
}
'"
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
"DNS_REPLICAS='
${
DNS_REPLICAS
:-}
'"
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
"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"
...
...
@@ -166,31 +132,60 @@ function create-provision-scripts {
for
((
i
=
0
;
i<
${#
NODE_NAMES
[@]
}
;
i++
))
;
do
(
echo
"#! /bin/bash"
echo
"MASTER_NAME='
${
MASTER_NAME
}
'"
echo
"MASTER_IP='
${
MASTER_IP
}
'"
echo
"NODE_NAMES=(
${
NODE_NAMES
[@]
}
)"
echo-kube-env
echo
"NODE_NAME=(
${
NODE_NAMES
[
$i
]
}
)"
echo
"NODE_IPS=(
${
NODE_IPS
[@]
}
)"
echo
"NODE_IP='
${
NODE_IPS
[
$i
]
}
'"
echo
"NODE_ID='
$i
'"
echo
"NODE_IP='
${
NODE_IPS
[
$i
]
}
'"
echo
"MASTER_CONTAINER_SUBNET='
${
MASTER_CONTAINER_SUBNET
}
'"
echo
"CONTAINER_ADDR='
${
NODE_CONTAINER_ADDRS
[
$i
]
}
'"
echo
"CONTAINER_NETMASK='
${
NODE_CONTAINER_NETMASKS
[
$i
]
}
'"
echo
"NODE_CONTAINER_SUBNETS=(
${
NODE_CONTAINER_SUBNETS
[@]
}
)"
echo
"CONTAINER_SUBNET='
${
CONTAINER_SUBNET
}
'"
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
"E2E_STORAGE_TEST_ENVIRONMENT='
${
E2E_STORAGE_TEST_ENVIRONMENT
:-}
'"
awk
'!/^#/'
"
${
KUBE_ROOT
}
/cluster/vagrant/provision-utils.sh"
awk
'!/^#/'
"
${
KUBE_ROOT
}
/cluster/vagrant/provision-network-minion.sh"
awk
'!/^#/'
"
${
KUBE_ROOT
}
/cluster/vagrant/provision-minion.sh"
)
>
"
${
KUBE_TEMP
}
/minion-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
"CONTAINER_SUBNET='
${
CONTAINER_SUBNET
}
'"
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
"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
"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
"DNS_REPLICAS='
${
DNS_REPLICAS
:-}
'"
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
:-}
'"
}
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
...
...
@@ -203,16 +198,12 @@ function verify-cluster {
# verify master has all required daemons
echo
"Validating master"
local
machine
=
"master"
local
-a
required_
daemon
=(
"salt-master"
"salt-minion"
"kubelet
"
)
local
-a
required_
processes
=(
"kube-apiserver"
"kube-scheduler"
"kube-controller-manager"
"kubelet"
"docker
"
)
local
validated
=
"1"
# This is a hack, but sometimes the salt-minion gets stuck on the master, so we just restart it
# to ensure that users never wait forever
vagrant ssh
"
$machine
"
-c
"sudo systemctl restart salt-minion"
until
[[
"
$validated
"
==
"0"
]]
;
do
validated
=
"0"
local
daemon
for
daemon
in
"
${
required_daemon
[@]
}
"
;
do
vagrant ssh
"
$machine
"
-c
"which '
${
daemon
}
'"
>
/dev/null 2>&1
||
{
for
process
in
"
${
required_processes
[@]
}
"
;
do
vagrant ssh
"
${
machine
}
"
-c
"pgrep -f
${
process
}
"
>
/dev/null 2>&1
||
{
printf
"."
validated
=
"1"
sleep
2
...
...
@@ -225,13 +216,12 @@ function verify-cluster {
for
((
i
=
0
;
i<
${#
NODE_NAMES
[@]
}
;
i++
))
;
do
echo
"Validating
${
VAGRANT_NODE_NAMES
[
$i
]
}
"
local
machine
=
${
VAGRANT_NODE_NAMES
[
$i
]
}
local
-a
required_
daemon
=(
"salt-minion
"
"kubelet"
"docker"
)
local
-a
required_
processes
=(
"kube-proxy
"
"kubelet"
"docker"
)
local
validated
=
"1"
until
[[
"
$
validated
"
==
"0"
]]
;
do
until
[[
"
$
{
validated
}
"
==
"0"
]]
;
do
validated
=
"0"
local
daemon
for
daemon
in
"
${
required_daemon
[@]
}
"
;
do
vagrant ssh
"
$machine
"
-c
"which
$daemon
"
>
/dev/null 2>&1
||
{
for
process
in
"
${
required_processes
[@]
}
"
;
do
vagrant ssh
"
${
machine
}
"
-c
"pgrep -f
${
process
}
"
>
/dev/null 2>&1
||
{
printf
"."
validated
=
"1"
sleep
2
...
...
@@ -242,16 +232,14 @@ function verify-cluster {
echo
echo
"Waiting for each minion to be registered with cloud provider"
for
((
i
=
0
;
i<
${#
NODE_IPS
[@]
}
;
i++
))
;
do
local
machine
=
"
${
NODE_IPS
[
$i
]
}
"
local
count
=
"0"
until
[[
"
$count
"
==
"1"
]]
;
do
local
minions
minions
=
$(
"
${
KUBE_ROOT
}
/cluster/kubectl.sh"
get nodes
-o
go-template
=
'{{range.items}}{{.metadata.name}}:{{end}}'
--api-version
=
v1
)
count
=
$(
echo
$minions
|
grep
-c
"
${
NODE_IPS
[i]
}
"
)
||
{
for
((
i
=
0
;
i<
${#
NODE_NAMES
[@]
}
;
i++
))
;
do
local
validated
=
"0"
until
[[
"
$validated
"
==
"1"
]]
;
do
local
minions
=
$(
"
${
KUBE_ROOT
}
/cluster/kubectl.sh"
get nodes
-o
name
--api-version
=
v1
)
validated
=
$(
echo
$minions
|
grep
-c
"
${
NODE_NAMES
[i]
}
"
)
||
{
printf
"."
sleep
2
count
=
"0"
validated
=
"0"
}
done
done
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment