dns/py/run_perf.py (88 lines of code) (raw):

#!/usr/bin/env python3 # Copyright 2016 The Kubernetes 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 # # 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. import argparse import logging import sys from runner import Runner _log = logging.getLogger('main') def parse_args(): parser = argparse.ArgumentParser( description=""" Run a DNS performance test on a kubernetes cluster. Assumes a working `kubectl` executable. """) parser.add_argument( '--kubectl-exec', type=str, default='kubectl', help='location of the kubectl executable') parser.add_argument( '--dns-server', type=str, default='kube-dns', help='the type of dns server (kube-dns or coredns)') parser.add_argument( '--deployment-yaml', type=str, default='', help='yaml for the dns server deployment') parser.add_argument( '--service-yaml', type=str, default='', help='yaml for the dns server service') parser.add_argument( '--configmap-yaml', type=str, default='', help='yaml for the dns server configmap') parser.add_argument( '--dnsperf-yaml', type=str, default='cluster/dnsperf-deploy.yaml', help='yaml for the dnsperf client') parser.add_argument( '--query-dir', type=str, default='queries/', help='location of query files') parser.add_argument( '--params', type=str, required=True, help='perf test parameters') parser.add_argument( '--run-large-queries', action='store_true', help='runs large example query file from dnsperf repo') parser.add_argument( '--testsvc-yaml', type=str, default='cluster/testsvc.yaml', help='yaml for creating test services to be queried by dnsperf') parser.add_argument( '--out-dir', type=str, default='out', help='output directory') parser.add_argument( '--db', type=str, required=False, help='if set, put results in db for analysis') parser.add_argument( '--client-node', type=str, help='if set, force the client pod to be created on the given node') parser.add_argument( '--server-node', type=str, help='if set, force the server pod to be created on the given node') parser.add_argument( '--use-cluster-dns', action='store_true', help='if set, use cluster DNS instead of creating one') parser.add_argument( '--dns-ip', type=str, default='10.0.0.20', help='IP to use for the DNS service. Note: --use-cluster-dns ' 'implicitly sets the service-ip of kube-dns service') parser.add_argument( '--nodecache-ip', type=str, default='', help='IP of existing node-cache service to use for testing') parser.add_argument( '-v', '--verbose', action='store_true', help='show verbose logging') parser.add_argument( '--single-node', action='store_true', help='allow test to run on a single node (for local development only)') return parser.parse_args() if __name__ == '__main__': args = parse_args() if args.dns_server == "kube-dns": if not args.deployment_yaml: args.deployment_yaml = 'cluster/kube-dns-deployment.yaml' if not args.service_yaml: args.service_yaml = 'cluster/kube-dns-service.yaml' if args.dns_server == "coredns": if not args.deployment_yaml: args.deployment_yaml = 'cluster/coredns-deployment.yaml' if not args.service_yaml: args.service_yaml = 'cluster/coredns-service.yaml' if not args.configmap_yaml: args.configmap_yaml = 'cluster/coredns-configmap.yaml' logging.basicConfig( level=logging.DEBUG if args.verbose else logging.INFO, format='%(levelname)s %(asctime)s %(filename)s:%(lineno)d] %(message)s', datefmt="%m-%d %H:%M:%S") runner = Runner(args) sys.exit(runner.go())