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
d27e3ae8
Commit
d27e3ae8
authored
Dec 28, 2015
by
Andy Zheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Run kube-proxy in Trusty in a static pod.
We copy the manifest from salt configurations, and then remove the salt content in the file and replace the variables with values.
parent
e663dbc3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
64 deletions
+105
-64
common.sh
build/common.sh
+6
-4
configure.sh
cluster/gce/trusty/configure.sh
+43
-27
node.yaml
cluster/gce/trusty/node.yaml
+56
-33
No files found.
build/common.sh
View file @
d27e3ae8
...
@@ -864,9 +864,9 @@ function kube::release::package_salt_tarball() {
...
@@ -864,9 +864,9 @@ function kube::release::package_salt_tarball() {
# such as Ubuntu Trusty.
# such as Ubuntu Trusty.
#
#
# There are two sources of manifests files: (1) some manifests in the directory
# There are two sources of manifests files: (1) some manifests in the directory
# cluster/saltbase/salt can be
directly used on instances without salt
, so we copy
# cluster/saltbase/salt can be
used directly or after minor revision
, so we copy
# them from there; (2)
for the ones containing salt config, we cannot directly
# them from there; (2)
otherwise, we will maintain separate copies in
#
use them. Therefore, we will maintain separate copies in
cluster/gce/kube-manifests.
# cluster/gce/kube-manifests.
function
kube::release::package_kube_manifests_tarball
()
{
function
kube::release::package_kube_manifests_tarball
()
{
kube::log::status
"Building tarball: manifests"
kube::log::status
"Building tarball: manifests"
...
@@ -880,9 +880,11 @@ function kube::release::package_kube_manifests_tarball() {
...
@@ -880,9 +880,11 @@ function kube::release::package_kube_manifests_tarball() {
cp
"
${
salt_dir
}
/fluentd-es/fluentd-es.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/fluentd-es/fluentd-es.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/fluentd-gcp/fluentd-gcp.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/fluentd-gcp/fluentd-gcp.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/kube-registry-proxy/kube-registry-proxy.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/kube-registry-proxy/kube-registry-proxy.yaml"
"
${
release_stage
}
/"
cp
"
${
salt_dir
}
/kube-proxy/kube-proxy.manifest"
"
${
release_stage
}
/"
# Source 2: manifests from cluster/gce/kube-manifests.
# Source 2: manifests from cluster/gce/kube-manifests.
# TODO(andyzheng0831): Enable the following line after finishing issue #16702.
# TODO(andyzheng0831): Enable the following line after finishing issue #16702.
# cp "${KUBE_ROOT}/cluster/gce/kube-manifests/
*"
"${release_stage}/"
# cp "${KUBE_ROOT}/cluster/gce/kube-manifests/
"*
"${release_stage}/"
kube::release::clean_cruft
kube::release::clean_cruft
...
...
cluster/gce/trusty/configure.sh
View file @
d27e3ae8
...
@@ -45,8 +45,10 @@ config_ip_firewall() {
...
@@ -45,8 +45,10 @@ config_ip_firewall() {
create_dirs
()
{
create_dirs
()
{
# Create required directories.
# Create required directories.
mkdir
-p
/var/lib/kubelet
mkdir
-p
/var/lib/kubelet
mkdir
-p
/var/lib/kube-proxy
mkdir
-p
/etc/kubernetes/manifests
mkdir
-p
/etc/kubernetes/manifests
if
[
"
${
KUBERNETES_MASTER
:-}
"
=
"false"
]
;
then
mkdir
-p
/var/lib/kube-proxy
fi
}
}
download_kube_env
()
{
download_kube_env
()
{
...
@@ -65,7 +67,6 @@ for k,v in yaml.load(sys.stdin).iteritems():
...
@@ -65,7 +67,6 @@ for k,v in yaml.load(sys.stdin).iteritems():
create_kubelet_kubeconfig
()
{
create_kubelet_kubeconfig
()
{
# Create the kubelet kubeconfig file.
# Create the kubelet kubeconfig file.
.
/etc/kube-env
if
[
-z
"
${
KUBELET_CA_CERT
:-}
"
]
;
then
if
[
-z
"
${
KUBELET_CA_CERT
:-}
"
]
;
then
KUBELET_CA_CERT
=
"
${
CA_CERT
}
"
KUBELET_CA_CERT
=
"
${
CA_CERT
}
"
fi
fi
...
@@ -158,38 +159,45 @@ download_or_bust() {
...
@@ -158,38 +159,45 @@ download_or_bust() {
# Downloads kubernetes binaries and kube-system manifest tarball, unpacks them,
# Downloads kubernetes binaries and kube-system manifest tarball, unpacks them,
# and places them into suitable directories.
# and places them into suitable directories.
install_kube_binary_config
()
{
install_kube_binary_config
()
{
.
/etc/kube-env
# In anyway we have to download the release tarball as docker_tag files and
# For a testing cluster, we pull kubelet, kube-proxy, and kubectl binaries,
# kube-proxy image file are there.
# and place them in /usr/local/bin. For a non-test cluster, we use the binaries
cd
/tmp
# pre-installed in the image, or pull and place them in /usr/bin if they are
k8s_sha1
=
"
${
SERVER_BINARY_TAR_URL
##*/
}
.sha1"
# not pre-installed.
echo
"Downloading k8s tar sha1 file
${
k8s_sha1
}
"
download_or_bust
"
${
k8s_sha1
}
"
"
${
SERVER_BINARY_TAR_URL
}
.sha1"
k8s_tar
=
"
${
SERVER_BINARY_TAR_URL
##*/
}
"
echo
"Downloading k8s tar file
${
k8s_tar
}
"
download_or_bust
"
${
k8s_tar
}
"
"
${
SERVER_BINARY_TAR_URL
}
"
# Validate hash.
actual
=
$(
sha1sum
${
k8s_tar
}
|
awk
'{ print $1 }'
)
||
true
if
[
"
${
actual
}
"
!=
"
${
SERVER_BINARY_TAR_HASH
}
"
]
;
then
echo
"==
${
k8s_tar
}
corrupted, sha1
${
actual
}
doesn't match expected
${
SERVER_BINARY_TAR_HASH
}
=="
else
echo
"Validated
${
SERVER_BINARY_TAR_URL
}
SHA1 =
${
SERVER_BINARY_TAR_HASH
}
"
fi
tar
xzf
"/tmp/
${
k8s_tar
}
"
-C
/tmp/
--overwrite
# Copy docker_tag and image files to /run/kube-docker-files.
mkdir
-p
/run/kube-docker-files
cp
/tmp/kubernetes/server/bin/
*
.docker_tag /run/kube-docker-files/
if
[
"
${
KUBERNETES_MASTER
:-}
"
=
"false"
]
;
then
cp
/tmp/kubernetes/server/bin/kube-proxy.tar /run/kube-docker-files/
fi
# For a testing cluster, we use kubelet, kube-proxy, and kubectl binaries
# from the release tarball and place them in /usr/local/bin. For a non-test
# cluster, we use the binaries pre-installed in the image, or pull and place
# them in /usr/bin if they are not pre-installed.
BINARY_PATH
=
"/usr/bin/"
BINARY_PATH
=
"/usr/bin/"
if
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
if
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
BINARY_PATH
=
"/usr/local/bin/"
BINARY_PATH
=
"/usr/local/bin/"
fi
fi
if
!
which kubelet
>
/dev/null
||
!
which kube-proxy
>
/dev/null
||
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
if
!
which kubelet
>
/dev/null
||
!
which kube-proxy
>
/dev/null
||
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
cd
/tmp
k8s_sha1
=
"
${
SERVER_BINARY_TAR_URL
##*/
}
.sha1"
echo
"Downloading k8s tar sha1 file
${
k8s_sha1
}
"
download_or_bust
"
${
k8s_sha1
}
"
"
${
SERVER_BINARY_TAR_URL
}
.sha1"
k8s_tar
=
"
${
SERVER_BINARY_TAR_URL
##*/
}
"
echo
"Downloading k8s tar file
${
k8s_tar
}
"
download_or_bust
"
${
k8s_tar
}
"
"
${
SERVER_BINARY_TAR_URL
}
"
# Validate hash.
actual
=
$(
sha1sum
${
k8s_tar
}
|
awk
'{ print $1 }'
)
||
true
if
[
"
${
actual
}
"
!=
"
${
SERVER_BINARY_TAR_HASH
}
"
]
;
then
echo
"==
${
k8s_tar
}
corrupted, sha1
${
actual
}
doesn't match expected
${
SERVER_BINARY_TAR_HASH
}
=="
else
echo
"Validated
${
SERVER_BINARY_TAR_URL
}
SHA1 =
${
SERVER_BINARY_TAR_HASH
}
"
fi
tar
xzf
"/tmp/
${
k8s_tar
}
"
-C
/tmp/
--overwrite
cp
/tmp/kubernetes/server/bin/kubelet
${
BINARY_PATH
}
cp
/tmp/kubernetes/server/bin/kubelet
${
BINARY_PATH
}
cp
/tmp/kubernetes/server/bin/kube-proxy
${
BINARY_PATH
}
cp
/tmp/kubernetes/server/bin/kubectl
${
BINARY_PATH
}
cp
/tmp/kubernetes/server/bin/kubectl
${
BINARY_PATH
}
rm
-rf
"/tmp/kubernetes"
rm
"/tmp/
${
k8s_tar
}
"
rm
"/tmp/
${
k8s_sha1
}
"
fi
fi
# Clean up.
rm
-rf
"/tmp/kubernetes"
rm
"/tmp/
${
k8s_tar
}
"
rm
"/tmp/
${
k8s_sha1
}
"
# Put kube-system pods manifests in /etc/kube-manifests/.
# Put kube-system pods manifests in /etc/kube-manifests/.
mkdir
-p
/run/kube-manifests
mkdir
-p
/run/kube-manifests
...
@@ -213,7 +221,6 @@ install_kube_binary_config() {
...
@@ -213,7 +221,6 @@ install_kube_binary_config() {
}
}
restart_docker_daemon
()
{
restart_docker_daemon
()
{
.
/etc/kube-env
# Assemble docker deamon options
# Assemble docker deamon options
DOCKER_OPTS
=
"-p /var/run/docker.pid --bridge=cbr0 --iptables=false --ip-masq=false"
DOCKER_OPTS
=
"-p /var/run/docker.pid --bridge=cbr0 --iptables=false --ip-masq=false"
if
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
if
[
"
${
TEST_CLUSTER
:-}
"
=
"true"
]
;
then
...
@@ -230,3 +237,12 @@ restart_docker_daemon() {
...
@@ -230,3 +237,12 @@ restart_docker_daemon() {
ifconfig docker0 down
ifconfig docker0 down
brctl delbr docker0
brctl delbr docker0
}
}
# Create the log file and set its properties.
#
# $1 is the file to create
prepare_log_file
()
{
touch
$1
chmod
644
$1
chown
root:root
$1
}
cluster/gce/trusty/node.yaml
View file @
d27e3ae8
From nobody Tue
Aug 11
10:13:54 2015
From nobody Tue
Dec 22
10:13:54 2015
Content-Type
:
multipart/mixed; boundary="===================================="
Content-Type
:
multipart/mixed; boundary="===================================="
MIME-Version
:
1.0
MIME-Version
:
1.0
...
@@ -29,10 +29,11 @@ script
...
@@ -29,10 +29,11 @@ script
config_hostname
config_hostname
echo "Configuring IP firewall rules"
echo "Configuring IP firewall rules"
config_ip_firewall
config_ip_firewall
echo "Creating required directories"
create_dirs
echo "Downloading kube-env file"
echo "Downloading kube-env file"
download_kube_env
download_kube_env
echo "Creating required directories"
. /etc/kube-env
create_dirs
echo "Creating kubelet kubeconfig file"
echo "Creating kubelet kubeconfig file"
create_kubelet_kubeconfig
create_kubelet_kubeconfig
echo "Creating kube-proxy kubeconfig file"
echo "Creating kube-proxy kubeconfig file"
...
@@ -96,6 +97,7 @@ script
...
@@ -96,6 +97,7 @@ script
set -o nounset
set -o nounset
. /etc/kube-configure.sh
. /etc/kube-configure.sh
. /etc/kube-env
install_kube_binary_config
install_kube_binary_config
end script
end script
...
@@ -148,59 +150,77 @@ post-stop exec sleep 10
...
@@ -148,59 +150,77 @@ post-stop exec sleep 10
MIME-Version
:
1.0
MIME-Version
:
1.0
Content-Type
:
text/upstart-job; charset="us-ascii"
Content-Type
:
text/upstart-job; charset="us-ascii"
Content-Transfer-Encoding
:
7bit
Content-Transfer-Encoding
:
7bit
Content-Disposition
:
attachment; filename="kube-
proxy
.conf"
Content-Disposition
:
attachment; filename="kube-
docker
.conf"
#upstart-job
#upstart-job
description "Start kube-proxy service"
description "Restart docker daemon"
start on stopped kube-install-minion and stopped kube-install-packages
respawn
# The condition "stopped kube-install-additional-packages" is to avoid
# breaking nsenter installation, which is through a docker container.
# It can be removed if we find a better way to install nsenter.
start on started kubelet and stopped kube-install-additional-packages
script
script
set -o errexit
set -o errexit
set -o nounset
set -o nounset
. /etc/kube-configure.sh
. /etc/kube-env
. /etc/kube-env
ARGS="--v=2"
restart_docker_daemon
if [ -n "${KUBEPROXY_TEST_ARGS:-}" ]; then
ARGS="${KUBEPROXY_TEST_ARGS}"
fi
BINARY_PATH="/usr/bin/kube-proxy"
if [ "${TEST_CLUSTER:-}" = "true" ]; then
BINARY_PATH="/usr/local/bin/kube-proxy"
fi
${BINARY_PATH} \
--master=https://${KUBERNETES_MASTER_NAME} \
--kubeconfig=/var/lib/kube-proxy/kubeconfig \
${ARGS}
end script
end script
# Wait for 10s to start kube-proxy again.
post-stop exec sleep 10
--====================================
--====================================
MIME-Version
:
1.0
MIME-Version
:
1.0
Content-Type
:
text/upstart-job; charset="us-ascii"
Content-Type
:
text/upstart-job; charset="us-ascii"
Content-Transfer-Encoding
:
7bit
Content-Transfer-Encoding
:
7bit
Content-Disposition
:
attachment; filename="kube-
docker
.conf"
Content-Disposition
:
attachment; filename="kube-
proxy
.conf"
#upstart-job
#upstart-job
description "
Restart docker daemon
"
description "
Start kube-proxy static pod
"
# The condition "stopped kube-install-additional-packages" is to avoid
start on stopped kube-docker
# breaking nsenter installation, which is through a docker container.
# It can be removed if we find a better way to install nsenter.
start on started kubelet and stopped kube-install-additional-packages
script
script
set -o errexit
set -o errexit
set -o nounset
set -o nounset
. /etc/kube-configure.sh
. /etc/kube-configure.sh
restart_docker_daemon
. /etc/kube-env
prepare_log_file "/var/log/kube-proxy.log"
# Load the docker image from file /run/kube-docker-files/kube-proxy.tar.
echo "Try to load docker image file kube-proxy.tar"
timeout 30 docker load -i /run/kube-docker-files/kube-proxy.tar
# Copy the manifest to /tmp to manipulate
tmp_file="/tmp/kube-proxy.manifest"
cp -f /run/kube-manifests/kubernetes/kube-proxy.manifest ${tmp_file}
# Remove the lines of salt configuration and replace variables with values.
# NOTE: Changes to variable names in cluster/saltbase/salt/kube-proxy/kube-proxy.manifest
# may break this upstart job.
sed -i "/^ *{%/d" ${tmp_file}
kubeconfig="--kubeconfig=\/var\/lib\/kube-proxy\/kubeconfig"
kube_docker_registry="gcr.io\/google_containers"
if [ -n "${KUBE_DOCKER_REGISTRY:-}" ]; then
kube_docker_registry=${KUBE_DOCKER_REGISTRY}
fi
kube_proxy_docker_tag=$(cat /run/kube-docker-files/kube-proxy.docker_tag)
test_args=""
log_level="--v=2"
if [ -n "${KUBEPROXY_TEST_ARGS:-}" ]; then
test_args="${KUBEPROXY_TEST_ARGS}"
# test_args should already contain log level setting.
log_level=""
fi
api_servers="--master=https:\/\/${KUBERNETES_MASTER_NAME}"
sed -i -e "s/{{kubeconfig}}/${kubeconfig}/g" ${tmp_file}
sed -i -e "s/{{pillar\['kube_docker_registry'\]}}/${kube_docker_registry}/g" ${tmp_file}
sed -i -e "s/{{pillar\['kube-proxy_docker_tag'\]}}/${kube_proxy_docker_tag}/g" ${tmp_file}
sed -i -e "s/{{test_args}}/${test_args}/g" ${tmp_file}
sed -i -e "s/{{log_level}}/${log_level}/g" ${tmp_file}
sed -i -e "s/{{api_servers_with_port}}/${api_servers}/g" ${tmp_file}
mv -f ${tmp_file} /etc/kubernetes/manifests/
end script
end script
--====================================
--====================================
...
@@ -243,7 +263,8 @@ Content-Disposition: attachment; filename="kube-node-health-monitoring.conf"
...
@@ -243,7 +263,8 @@ Content-Disposition: attachment; filename="kube-node-health-monitoring.conf"
description "Kubenetes node health monitoring"
description "Kubenetes node health monitoring"
start on stopped kube-docker and started kube-proxy
# The termination of kube-proxy upstart job indicates that kubelet and docker are ready.
start on stopped kube-proxy
respawn
respawn
...
@@ -254,6 +275,7 @@ script
...
@@ -254,6 +275,7 @@ script
# TODO(andyzheng0831): replace it with a more reliable method if possible.
# TODO(andyzheng0831): replace it with a more reliable method if possible.
sleep 60
sleep 60
. /etc/kube-env
sleep_seconds=10
sleep_seconds=10
max_seconds=10
max_seconds=10
# We simply kill the process when there is a failure. Another upstart job will automatically
# We simply kill the process when there is a failure. Another upstart job will automatically
...
@@ -263,14 +285,15 @@ script
...
@@ -263,14 +285,15 @@ script
echo "Docker daemon failed!"
echo "Docker daemon failed!"
pkill docker
pkill docker
fi
fi
. /etc/kube-env
if ! curl --insecure -m ${max_seconds} -f -s https://127.0.0.1:${KUBELET_PORT:-10250}/healthz > /dev/null; then
if ! curl --insecure -m ${max_seconds} -f -s https://127.0.0.1:${KUBELET_PORT:-10250}/healthz > /dev/null; then
echo "Kubelet is unhealthy!"
echo "Kubelet is unhealthy!"
pkill kubelet
pkill kubelet
fi
fi
if ! curl -m ${max_seconds} -f -s http://127.0.0.1:10249/healthz > /dev/null; then
if ! curl -m ${max_seconds} -f -s http://127.0.0.1:10249/healthz > /dev/null; then
echo "Kube-proxy is unhealthy!"
echo "Kube-proxy is unhealthy!"
pkill kube-proxy
# Get the ID of kube-proxy container and then kill it.
container=$(docker ps -q --filter name='k8s_kube-proxy')
docker kill ${container}
fi
fi
sleep ${sleep_seconds}
sleep ${sleep_seconds}
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