Merge pull request #9152 from GoogleCloudPlatform/revert-8953-services-e2e

Revert "Make services.sh e2e more reliable(?) and debuggable"
This commit is contained in:
Brian Grant 2015-06-02 16:54:30 -07:00
commit be118f0b1c

View File

@ -22,12 +22,11 @@ set -o pipefail
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
: ${NAMESPACE:="services-${RANDOM}"}
: ${KUBE_VERSION_ROOT:=${KUBE_ROOT}} : ${KUBE_VERSION_ROOT:=${KUBE_ROOT}}
: ${KUBECTL:="${KUBE_VERSION_ROOT}/cluster/kubectl.sh --namespace=${NAMESPACE}"} : ${KUBECTL:="${KUBE_VERSION_ROOT}/cluster/kubectl.sh"}
: ${KUBE_CONFIG_FILE:="config-test.sh"} : ${KUBE_CONFIG_FILE:="config-test.sh"}
export NAMESPACE KUBECTL KUBE_CONFIG_FILE export KUBECTL KUBE_CONFIG_FILE
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"
@ -40,9 +39,7 @@ function error() {
} }
function sort_args() { function sort_args() {
[ $# == 0 ] && return printf "%s\n" "$@" | sort -n | tr '\n\r' ' ' | sed 's/ */ /g'
a=($(printf "%s\n" "$@" | sort -n))
echo "${a[*]}"
} }
# Join args $2... with $1 between them. # Join args $2... with $1 between them.
@ -61,7 +58,10 @@ function join() {
svcs_to_clean=() svcs_to_clean=()
function do_teardown() { function do_teardown() {
${KUBECTL} delete namespace "${NAMESPACE}" local svc
for svc in "${svcs_to_clean[@]:+${svcs_to_clean[@]}}"; do
stop_service "${svc}"
done
} }
# Args: # Args:
@ -70,7 +70,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 '${NAMESPACE}/$1' on port $2 with $3 replicas" echo "Starting service '$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 +78,7 @@ function start_service() {
"apiVersion": "v1beta3", "apiVersion": "v1beta3",
"metadata": { "metadata": {
"name": "$1", "name": "$1",
"namespace": "${NAMESPACE}", "namespace": "default",
"labels": { "labels": {
"name": "$1" "name": "$1"
} }
@ -124,7 +124,7 @@ __EOF__
"apiVersion": "v1beta3", "apiVersion": "v1beta3",
"metadata": { "metadata": {
"name": "$1", "name": "$1",
"namespace": "${NAMESPACE}", "namespace": "default",
"labels": { "labels": {
"name": "$1" "name": "$1"
} }
@ -218,28 +218,30 @@ 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 (sorted) # $5: pod IDs
function wait_for_service_up() { function wait_for_service_up() {
local i local i
local found_pods local found_pods
echo "waiting for $1 at $2:$3" for i in $(seq 1 20); do
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*3))); do for i in $(seq -s' ' 1 $4); do
curl -s --connect-timeout 1 http://$2:$3; curl -s --connect-timeout 1 http://$2:$3;
echo; echo;
done | sort -n | uniq done | sort | 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
return break
fi fi
echo "expected '$5', got '${found_pods}': will try again" echo "Waiting for endpoints to propagate"
sleep 3 # wait for endpoints to propagate sleep 3
done done
error "$1: failed to verify portal from host" if [[ "${found_pods}" != "$5" ]]; then
error "Endpoints did not propagate in time"
fi
} }
# Args: # Args:
@ -262,26 +264,35 @@ 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 (sorted) # $5: pod IDs
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*3))); do for i in $(seq -s' ' 1 $4); do
if wget -q -T 3 -O - http://$2:$3; then ok=false
for j in $(seq -s' ' 1 10); do
if wget -q -T 5 -O - http://$2:$3; then
echo echo
else 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
echo "expected '$5', got '${found_pods}'" error -e "$1 VIP failed from container, expected:\n
error "$1: failed to verify VIP from container" $(printf '\t%s\n' $5)\n
got:\n
$(printf '\t%s\n' ${found_pods})
"
fi fi
} }
@ -293,13 +304,13 @@ test_node="${MINION_NAMES[0]}"
master="${MASTER_NAME}" master="${MASTER_NAME}"
# Launch some pods and services. # Launch some pods and services.
svc1_name="service1" svc1_name="service-${RANDOM}"
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="service2" svc2_name="service-${RANDOM}"
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}"
@ -403,6 +414,7 @@ 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}"