mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Make services e2e more debuggable
This commit is contained in:
parent
9740c7c3ad
commit
a2b7117ee4
@ -28,6 +28,9 @@ KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|||||||
|
|
||||||
export KUBECTL KUBE_CONFIG_FILE
|
export KUBECTL KUBE_CONFIG_FILE
|
||||||
|
|
||||||
|
TEST_NAMESPACE="services-test-${RANDOM}"
|
||||||
|
KUBECTL="${KUBECTL} --namespace=${TEST_NAMESPACE}"
|
||||||
|
|
||||||
source "${KUBE_ROOT}/cluster/kube-env.sh"
|
source "${KUBE_ROOT}/cluster/kube-env.sh"
|
||||||
source "${KUBE_VERSION_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh"
|
source "${KUBE_VERSION_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh"
|
||||||
|
|
||||||
@ -39,7 +42,9 @@ function error() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function sort_args() {
|
function sort_args() {
|
||||||
printf "%s\n" "$@" | sort -n | tr '\n\r' ' ' | sed 's/ */ /g'
|
[ $# == 0 ] && return
|
||||||
|
a=($(printf "%s\n" "$@" | sort -n))
|
||||||
|
echo "${a[*]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Join args $2... with $1 between them.
|
# Join args $2... with $1 between them.
|
||||||
@ -58,10 +63,20 @@ function join() {
|
|||||||
|
|
||||||
svcs_to_clean=()
|
svcs_to_clean=()
|
||||||
function do_teardown() {
|
function do_teardown() {
|
||||||
local svc
|
${KUBECTL} delete namespace "${TEST_NAMESPACE}"
|
||||||
for svc in "${svcs_to_clean[@]:+${svcs_to_clean[@]}}"; do
|
}
|
||||||
stop_service "${svc}"
|
|
||||||
done
|
function make_namespace() {
|
||||||
|
echo "Making namespace '${TEST_NAMESPACE}'"
|
||||||
|
${KUBECTL} create -f - << __EOF__
|
||||||
|
{
|
||||||
|
"kind": "Namespace",
|
||||||
|
"apiVersion": "v1beta3",
|
||||||
|
"metadata": {
|
||||||
|
"name": "${TEST_NAMESPACE}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__EOF__
|
||||||
}
|
}
|
||||||
|
|
||||||
# Args:
|
# Args:
|
||||||
@ -70,7 +85,7 @@ function do_teardown() {
|
|||||||
# $3: service replica count
|
# $3: service replica count
|
||||||
# $4: public IPs (optional, string e.g. "1.2.3.4 5.6.7.8")
|
# $4: public IPs (optional, string e.g. "1.2.3.4 5.6.7.8")
|
||||||
function start_service() {
|
function start_service() {
|
||||||
echo "Starting service '$1' on port $2 with $3 replicas"
|
echo "Starting service '${TEST_NAMESPACE}/$1' on port $2 with $3 replicas"
|
||||||
svcs_to_clean+=("$1")
|
svcs_to_clean+=("$1")
|
||||||
${KUBECTL} create -f - << __EOF__
|
${KUBECTL} create -f - << __EOF__
|
||||||
{
|
{
|
||||||
@ -78,7 +93,6 @@ function start_service() {
|
|||||||
"apiVersion": "v1beta3",
|
"apiVersion": "v1beta3",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "$1",
|
"name": "$1",
|
||||||
"namespace": "default",
|
|
||||||
"labels": {
|
"labels": {
|
||||||
"name": "$1"
|
"name": "$1"
|
||||||
}
|
}
|
||||||
@ -124,7 +138,6 @@ __EOF__
|
|||||||
"apiVersion": "v1beta3",
|
"apiVersion": "v1beta3",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "$1",
|
"name": "$1",
|
||||||
"namespace": "default",
|
|
||||||
"labels": {
|
"labels": {
|
||||||
"name": "$1"
|
"name": "$1"
|
||||||
}
|
}
|
||||||
@ -218,30 +231,28 @@ function wait_for_pods() {
|
|||||||
# $2: service IP
|
# $2: service IP
|
||||||
# $3: service port
|
# $3: service port
|
||||||
# $4: pod count
|
# $4: pod count
|
||||||
# $5: pod IDs
|
# $5: pod IDs (sorted)
|
||||||
function wait_for_service_up() {
|
function wait_for_service_up() {
|
||||||
local i
|
local i
|
||||||
local found_pods
|
local found_pods
|
||||||
for i in $(seq 1 20); do
|
echo "waiting for $1 at $2:$3"
|
||||||
|
for i in $(seq 1 5); do
|
||||||
results=($(ssh-to-node "${test_node}" "
|
results=($(ssh-to-node "${test_node}" "
|
||||||
set -e;
|
set -e;
|
||||||
for i in $(seq -s' ' 1 $4); do
|
for i in $(seq -s' ' 1 $(($4*3))); do
|
||||||
curl -s --connect-timeout 1 http://$2:$3;
|
curl -s --connect-timeout 1 http://$2:$3;
|
||||||
echo;
|
echo;
|
||||||
done | sort | uniq
|
done | sort -n | uniq
|
||||||
"))
|
"))
|
||||||
|
|
||||||
found_pods=$(sort_args "${results[@]:+${results[@]}}")
|
found_pods=$(sort_args "${results[@]:+${results[@]}}")
|
||||||
echo "Checking if ${found_pods} == ${5}"
|
|
||||||
if [[ "${found_pods}" == "$5" ]]; then
|
if [[ "${found_pods}" == "$5" ]]; then
|
||||||
break
|
return
|
||||||
fi
|
fi
|
||||||
echo "Waiting for endpoints to propagate"
|
echo "expected '$5', got '${found_pods}': will try again"
|
||||||
sleep 3
|
sleep 3 # wait for endpoints to propagate
|
||||||
done
|
done
|
||||||
if [[ "${found_pods}" != "$5" ]]; then
|
error "$1: failed to verify portal from host"
|
||||||
error "Endpoints did not propagate in time"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Args:
|
# Args:
|
||||||
@ -264,35 +275,26 @@ function wait_for_service_down() {
|
|||||||
# $2: service IP
|
# $2: service IP
|
||||||
# $3: service port
|
# $3: service port
|
||||||
# $4: pod count
|
# $4: pod count
|
||||||
# $5: pod IDs
|
# $5: pod IDs (sorted)
|
||||||
function verify_from_container() {
|
function verify_from_container() {
|
||||||
|
echo "waiting for $1 at $2:$3"
|
||||||
results=($(ssh-to-node "${test_node}" "
|
results=($(ssh-to-node "${test_node}" "
|
||||||
set -e;
|
set -e;
|
||||||
sudo docker pull busybox >/dev/null;
|
sudo docker pull busybox >/dev/null;
|
||||||
sudo docker run busybox sh -c '
|
sudo docker run busybox sh -c '
|
||||||
for i in $(seq -s' ' 1 $4); do
|
for i in $(seq -s' ' 1 $(($4*3))); do
|
||||||
ok=false
|
if wget -q -T 3 -O - http://$2:$3; then
|
||||||
for j in $(seq -s' ' 1 10); do
|
echo
|
||||||
if wget -q -T 5 -O - http://$2:$3; then
|
else
|
||||||
echo
|
|
||||||
ok=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if [[ \${ok} == false ]]; then
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
'")) \
|
'" | sort -r -n | uniq)) \
|
||||||
|| error "testing $1 VIP from container failed"
|
|| error "testing $1 VIP from container failed"
|
||||||
found_pods=$(sort_args "${results[@]}")
|
found_pods=$(sort_args "${results[@]}")
|
||||||
if [[ "${found_pods}" != "$5" ]]; then
|
if [[ "${found_pods}" != "$5" ]]; then
|
||||||
error -e "$1 VIP failed from container, expected:\n
|
echo "expected '$5', got '${found_pods}'"
|
||||||
$(printf '\t%s\n' $5)\n
|
error "$1: failed to verify VIP from container"
|
||||||
got:\n
|
|
||||||
$(printf '\t%s\n' ${found_pods})
|
|
||||||
"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,14 +305,17 @@ detect-minions
|
|||||||
test_node="${MINION_NAMES[0]}"
|
test_node="${MINION_NAMES[0]}"
|
||||||
master="${MASTER_NAME}"
|
master="${MASTER_NAME}"
|
||||||
|
|
||||||
|
# Make our namespace
|
||||||
|
make_namespace
|
||||||
|
|
||||||
# Launch some pods and services.
|
# Launch some pods and services.
|
||||||
svc1_name="service-${RANDOM}"
|
svc1_name="service1"
|
||||||
svc1_port=80
|
svc1_port=80
|
||||||
svc1_count=3
|
svc1_count=3
|
||||||
svc1_publics="192.168.1.1 192.168.1.2"
|
svc1_publics="192.168.1.1 192.168.1.2"
|
||||||
start_service "${svc1_name}" "${svc1_port}" "${svc1_count}" "${svc1_publics}"
|
start_service "${svc1_name}" "${svc1_port}" "${svc1_count}" "${svc1_publics}"
|
||||||
|
|
||||||
svc2_name="service-${RANDOM}"
|
svc2_name="service2"
|
||||||
svc2_port=80
|
svc2_port=80
|
||||||
svc2_count=3
|
svc2_count=3
|
||||||
start_service "${svc2_name}" "${svc2_port}" "${svc2_count}"
|
start_service "${svc2_name}" "${svc2_port}" "${svc2_count}"
|
||||||
@ -414,7 +419,6 @@ echo "Manually removing iptables rules"
|
|||||||
# Remove both the new and old style chains, in case we're testing on an old kubelet
|
# Remove both the new and old style chains, in case we're testing on an old kubelet
|
||||||
ssh-to-node "${test_node}" "sudo iptables -t nat -F KUBE-PORTALS-HOST || true"
|
ssh-to-node "${test_node}" "sudo iptables -t nat -F KUBE-PORTALS-HOST || true"
|
||||||
ssh-to-node "${test_node}" "sudo iptables -t nat -F KUBE-PORTALS-CONTAINER || true"
|
ssh-to-node "${test_node}" "sudo iptables -t nat -F KUBE-PORTALS-CONTAINER || true"
|
||||||
ssh-to-node "${test_node}" "sudo iptables -t nat -F KUBE-PROXY || true"
|
|
||||||
echo "Verifying the VIPs from the host"
|
echo "Verifying the VIPs from the host"
|
||||||
wait_for_service_up "${svc3_name}" "${svc3_ip}" "${svc3_port}" \
|
wait_for_service_up "${svc3_name}" "${svc3_ip}" "${svc3_port}" \
|
||||||
"${svc3_count}" "${svc3_pods}"
|
"${svc3_count}" "${svc3_pods}"
|
||||||
|
Loading…
Reference in New Issue
Block a user