diff --git a/config/activator-ds.yaml b/config/activator-ds.yaml new file mode 120000 index 000000000000..7ec2494d07ef --- /dev/null +++ b/config/activator-ds.yaml @@ -0,0 +1 @@ +./core/activator-ds.yaml \ No newline at end of file diff --git a/config/core/activator-ds.yaml b/config/core/activator-ds.yaml new file mode 100644 index 000000000000..213c4971b778 --- /dev/null +++ b/config/core/activator-ds.yaml @@ -0,0 +1,104 @@ +# Copyright 2020 The Knative 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 +# +# https://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. + +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: activator + namespace: knative-serving + labels: + knative.dev/release: devel +spec: + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 50% + selector: + matchLabels: + app: activator + role: activator + template: + metadata: + labels: + app: activator + role: activator + knative.dev/release: devel + spec: + serviceAccountName: controller + containers: + - name: activator + # This is the Go import path for the binary that is containerized + # and substituted here. + image: knative.dev/serving/cmd/activator + + resources: + requests: + cpu: 300m + memory: 60Mi + limits: + cpu: 500m + memory: 200Mi + env: + # Run Activator with GC collection when newly generated memory is 500%. + - name: GOGC + value: "500" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: SYSTEM_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONFIG_LOGGING_NAME + value: config-logging + - name: CONFIG_OBSERVABILITY_NAME + value: config-observability + # TODO(https://github.com/knative/pkg/pull/953): Remove stackdriver specific config + - name: METRICS_DOMAIN + value: knative.dev/internal/serving + + securityContext: + allowPrivilegeEscalation: false + + ports: + - name: metrics + containerPort: 9090 + - name: profiling + containerPort: 8008 + - name: http1 + containerPort: 8012 + - name: h2c + containerPort: 8013 + + readinessProbe: &probe + httpGet: + port: 8012 + httpHeaders: + - name: k-kubelet-probe + value: "activator" + livenessProbe: *probe + # The activator (often) sits on the dataplane, and may proxy long (e.g. + # streaming, websockets) requests. We give a long grace period for the + # activator to "lame duck" and drain outstanding requests before we + # forcibly terminate the pod (and outstanding connections). This value + # should be at least as large as the upper bound on the Revision's + # timeoutSeconds property to avoid servicing events disrupting + # connections. + terminationGracePeriodSeconds: 300 + diff --git a/config/core/deployments/activator-hpa.yaml b/config/core/deployments/activator-hpa.yaml index 3930befc4a6e..d97017f7f75f 100644 --- a/config/core/deployments/activator-hpa.yaml +++ b/config/core/deployments/activator-hpa.yaml @@ -21,7 +21,7 @@ metadata: serving.knative.dev/release: devel spec: minReplicas: 1 - maxReplicas: 20 + maxReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment diff --git a/config/core/deployments/activator.yaml b/config/core/deployments/activator.yaml index 8be66c1f999c..380219e13633 100644 --- a/config/core/deployments/activator.yaml +++ b/config/core/deployments/activator.yaml @@ -44,11 +44,11 @@ spec: # https://github.com/knative/serving/issues/1625#issuecomment-511930023 resources: requests: - cpu: 300m + cpu: 100m memory: 60Mi limits: - cpu: 1000m - memory: 600Mi + cpu: 300m + memory: 200Mi env: # Run Activator with GC collection when newly generated memory is 500%. diff --git a/pkg/activator/net/revision_backends.go b/pkg/activator/net/revision_backends.go index 4ea8ede80638..d785b1591869 100644 --- a/pkg/activator/net/revision_backends.go +++ b/pkg/activator/net/revision_backends.go @@ -251,7 +251,7 @@ func (rw *revisionWatcher) checkDests(dests sets.String) { // precise load balancing in the throttler. hs, noop, err := rw.probePodIPs(dests) if err != nil { - rw.logger.Errorw("Failed probing", zap.Error(err)) + rw.logger.With(zap.Error(err)).Warnf("Failed probing: %+v", dests) // We dont want to return here as an error still affects health states. } diff --git a/test/e2e-common.sh b/test/e2e-common.sh index afe0de5f7d75..10136fc0ff88 100644 --- a/test/e2e-common.sh +++ b/test/e2e-common.sh @@ -366,10 +366,6 @@ metadata: data: profiling.enable: "true" EOF - - echo ">> Patching activator HPA" - # We set min replicas to 2 for testing multiple activator pods. - kubectl -n knative-serving patch hpa activator --patch '{"spec":{"minReplicas":2}}' || return 1 } # Check if we should use --resolvabledomain. In case the ingress only has diff --git a/test/e2e/scale.go b/test/e2e/scale.go index f14157517d62..c6f1022d040c 100644 --- a/test/e2e/scale.go +++ b/test/e2e/scale.go @@ -110,11 +110,11 @@ func ScaleToWithin(t *testing.T, scale int, duration time.Duration, latencies La }, }), v1alpha1testing.WithRevisionTimeoutSeconds(10)) - if err != nil { t.Errorf("CreateLatestService() = %v", err) return fmt.Errorf("CreateLatestService() failed: %w", err) } + // Record the time it took to create the service. latencies.Add("time-to-create", start) names.Route = serviceresourcenames.Route(svc) @@ -135,6 +135,7 @@ func ScaleToWithin(t *testing.T, scale int, duration time.Duration, latencies La url = s.Status.URL.URL() return v1a1test.IsServiceReady(s) }, "ServiceUpdatedWithURL") + if err != nil { t.Errorf("WaitForServiceState(w/ Domain) = %v", err) return fmt.Errorf("WaitForServiceState(w/ Domain) failed: %w", err)