{ "profile": { "first_name": "Jonathan", "middle_name": "D", "last_name": "Kelley", "tagline": "Linux Systems / Python Devops / Site Reliability Engineer", "date_of_birth": "1985-05-02", "place_of_birth": "Dallas", "biography": "I am a 14 year internet technology veteran with a passion for devops and site reliability. I got my start in the late 1990s in highschool over IRC and designing web pages on Redhat Linux 9 (Shrike). \n\nI consider myself an expert at Linux, Kubernetes, Networking, AWS and all the things in between.", "current_location": { "street": "********", "housenumber": 0, "zipcode": "********", "city": "Kalamazoo", "state": "Michigan", "country": "USA", "planet": "Earth" } }, "contact_details": { "email": "jonkelley@gmail.com", "phone": "8179-998-200", "skype": "********", "website": "https://jon-kelley.com/", "keybase": "https://keybase.io/jondkelley", "linkedin": "https://linkedin.com/in/jonathandkelley/" }, "educations": [ { "title": "High School", "specification": "Computer Science (Specialization: A+)", "location": "Fort Worth, TX", "level": "Highschool", "description": "I graduated highschool, where I enjoyed doing science, math, biology and arts. I realized in my freshman year of school that I wanted to do something with Linux, so I learned PHP and other technologies.", "start_date": "2014-03-01", "end_date": "2014-05-01", "completed": true } ], "careers": [ { "title": "Mezmo Inc.", "specification": "Site Reliability Engineer", "location": "Kalamazoo, Michigan", "level": "Full Time", "description": "Works on the site reliability team managing site reliability and growth projects, along with on-call rotation", "accomplishments": [ "Supports multiple cloud providers (AWS EKS, IBM IKS) managing around 7 terabytes of log ingestion every month across thousands of k8s nodes in 12 datacenters.", "Deploys software through Terraform, Helm and IBM Razee deployment methods.", "Manage reliability and patching around MongoDB, Redis and Elasticsearch clusters as large scale StatefulSets in Kubernetes.", "Sponsored the adoption of LinkerD service mesh (multiple milestones) on Kubernetes to tackle endpoint security and eventually end-to-end observability concerns.", "Wrote email deliverability performance collection tool for email vendor monitoring key performance SLIs for system performance.", "Expanding access tools to internal CLI python client (logdnactl) for better integration into backend systems for the SRE team.", "Regularly contributes to our internal tooling which uses the k8s api and pymongo libraries to manage administrative operations across the product.", "Built a support dashboard for support to manage and integrated Flask/Rebrow Redis blueprints into the app along with Python-eve (REST toolkit) for full-search MongoORM via REST. All behind python-authlib and OpenIDConnect/Okta for RBAC.", "Re-wrote the ansible integration for LogDNA logging library for a variety of new features for our customers.", "Added functionality to support dashboard to look into ElasticSearch field mappings to troubleshoot index limits and indicate growth needs for customers.", "Developed a proxy request tool for webhooks so support can easily debug webhook payloads." ], "start_date": "2020-06-01", "end_date": null, "link": "http://mezmo.com" }, { "title": "Doximity, Inc.", "specification": "Devops Engineer", "location": "San Francisco Bay Area", "level": "Full Time", "description": "Worked in a cross-discipline devops team managing everything from Kubernetes via terraform infrastructure-as-code to Chef on ec2 instances. Used best security practices in a strict HIPAA environment with segmented networks and RBAC/IAM policies on AWS.", "accomplishments": [ "Built Doximity's first platform under k8s on EKS with Istio using Ansible, Terraform and Helm charts.", "Refactored Terraform across teams using multiple statefiles using both Jenkins pipelines and Atlantis. Migrated to terraform module patterns rather then sprawled HCL resources.", "Configured Sensu monitoring scripts for production systems.", "Wrote / manage cookbooks in Chef as well as the dependencies for patch management and better inspect testing / kitchen tests.", "Moved Jenkins jobs from traditional EC2 swarm builders over to ECS based pipelines for better resource utilization / cost saving.", "Built Jenkins automation for Chef jobs using Jenkins Job Builder, and later helped implement JCasC and managed job creation using sandboxed Groovy scripts.", "Built ansible/terraform based deployment system for Kubernetes and Istio onto EKS so the entire Doximity platform could be migrated." ], "start_date": "2019-06-01", "end_date": "2020-05-01", "link": "http://doximity.com" }, { "title": "BoomTown!", "specification": "Devops Engineer / Site Reliability Engineer", "location": "Charleston, SC", "level": "Full Time", "description": "Managed a rapidly growing real estate SaaS platform with over 10,000 agent brokers deployed through Wordpress.", "accomplishments": [ "Participates in on-call SRE style rotation for a split Windows / Linux environment.", "Works with common Amazon AWS toolsets such as ECS, EC2, VPC, ELB, SQS and Lambda's.", "Subject matter expert and mentor for Linux applications and platform tools.", "Managed TeamCity build pipelines along with Jenkins for operational tasks.", "Re-tooled container stack for frontend Wordpress product from 5 year old shell magic to docker-compose v3 + python-paver build process (for gulp/yarn/phpunit)", "Upgraded php-fpm to PHP 7 from legacy PHP 5 stack, with weighted load canary testing as proof to launch.", "Works with Varnishd, Memcached, Wordpress Network Sites, HAProxy, MySQL and Docker.", "Uses Ansible to convert stacks previously hand-hacked into ground-up infrastructure as code." ], "start_date": "2018-05-01", "end_date": "2019-06-01", "link": "http://boomtownroi.com" }, { "title": "Rackspace", "specification": "Linux Systems Engineer II", "location": "Dallas, TX", "level": "Full Time", "description": "Worked on the openstack / cloud servers as a systems administrator supporting the Rackspace Cloud Control panel and backend systems.", "accomplishments": [ "Works closely with Cloud integration teams running deployment and maintenance on large-scale backend infrastructure used for the world's 2nd largest Public Cloud.", "Expertise diagnosing complex Linux application and system problems.", "Updates and writes deployment templates and syntax for Puppet/Chef", "Subject matter expert and senior support escalation for Cloud Load Balancers, Cloud Databases, Cloud Compute and infrastructure.", "Designed migration plans of our Cloud identity token API of multi node environment. Moved identity database cluster and load balancer stack into new subnet while also performing schema upgrades and a software upgrade dependent on schema changes with record setting minimal impacting downtime.", "Takes direct action to correct cloud infrastructure issues in an oncall 24/7 environment.", "Has worked on identifying the root cause for key and critical issues in various application stacks throughout Rackspace Cloud and helped identify and report bugs, issues, or aid in fixing with appropriate product development groups.", "Deploys Tomcat application code releases on a regular basis to staging and production sometimes under tight deadlines and always zero downtime.", "Experience with the entire Rackspace Cloud suite including parts of OpenStack as well as experience writing and deploying Python applications that utilize public and internal API's.", "Conceptualized, wrote and built monitoring tools and metrics collection systems never before used to help track health of various products and their subsystems and is currently used as an early warning system to service faults in various API's within Rackspace.", "Serve as an escalation point for all Rackspace Cloud products in the Rackspace suite.", "Plans efficient cloud resource consumption in new/existing environments for internal infrastructure.", "Interview new candidates for jobs in cross-team discipline.", "Built continuous integration in Jenkins for 5 new products using a python API we wrote to trigger builds on a build server and cycling app deployments.", "Wrote python SDK for build system platform and deployment system so developers can hook, deploy and release 4 products via REST api from python CLI or jenkins or virtually anything.", "Manages staging,pre prod and prod environments for complex Ruby web app that 6000+ growing employees use 24/7 to manage the administrative backends for the worlds 2nd largest public cloud.", "Manages deployments in one-click (okay its actually 3 clicks) fashion using Salt and yum repositories to distribute software and configurations.", "Moved apps to hosted Mongo service called Objectrocket to keep in-house operations costs at a minimum.", "Handling deployment and design considerations for next-gen architecture replacing legacy internal controls design from serial to fully async process with a service backend layer to connect to backends/dbs/apis. The next gen is Python 3/Tornado with Angular.js web frontends. This is to replace a traditionally monolithic serial threaded Ruby 1.8.7 application on Phusion Passenger which bundled business logic and just couldn't scale.", "Seeing weakpoints in ops/qe tests I have written BDD Gherkin style templates in pyhon using \"behave\" to test any API that is REST. Could be extremely helpful for ops or QA functional end to end testing. It's in my projects section called testvAPI.", "Help start conversion of 230 or so Jenkins jobs to store them in Yaml and re-deploy with a tool called Jenkins Job builder. This helps enable full Jenkins disaster recovery in <1 hour instead of >2 weeks.", "Migrated tooling from Puppet2 to Puppet3 with PuppetDB, Hiera, puppetserver, directory environments and wrote a tool to wrap r10k. Security compliant PuppetDB database security model. This reduces complexity and applies patterns we were missing previously.", "Maintains Ansible modules that allow us to store firewall configurations in git. Built a release pipeline to deploy on git push. This builds a \"working documentation\" and a git log to make instant rollbacks a snap in production environments.", "Manages deployment of billing, integration and pubsub environments for the Rackspace Cloud." ], "start_date": "2011-03-01", "end_date": "2018-05-01", "link": "http://rackspace.com" }, { "title": "Zixcorp", "specification": "Embedded Device Support Engineer II", "location": "Dallas, TX", "level": "Full Time", "description": "Supported on-premise and SaaS cloud-hosted solution for HIPAA encryption. Supported Java Tomcat application as well as Postfix mail system. Managed network security policies and on-premise datacenter networks.", "accomplishments": [ "Worked in a HIPAA compliant environment dealing with personal data e-mail encryption with well-recognized companies and government agencies.", "Worked in accordance with UK data privacy and export laws in accordance to mail administration.", "Worked as administrator for E-Mail appliance based on Postfix that implemented FIPS complaint e-mail encryption solution with SSL failover to HTTPS webpage-gateway for secure email transmission.", "Handled telephone support with customers which located the appliance in their own datacenters, often assisting with network troubleshooting in very unfamiliar network environments.", "Help troubleshoot mailflow issues with different network topologies and network layouts with dozens of companies on a daily basis." ], "start_date": "2010-02-01", "end_date": "2011-03-01", "link": "http://zixcorp.com" }, { "title": "1-800-Hosting", "specification": "Linux Administrator II", "location": "Dallas, TX", "level": "Full Time", "description": "Performed Linux technical support by phone / tickets. Did professional service migrations, hardware upgrades, cabinet wiring, and performed network maintenence in the datacenter on Cisco Catalyst 6500 series hardware. Supported Cpanel and Flesk control panels.", "accomplishments": [ "Planned and executed primary data-center DNS cut-over to use new BIND stack with Linux HEARTBEAT fail-over. Wrote fail-over scripts to handle system failure with zero downtime in DNS lookups.", "Performed phone and ticket work to meet customer SLA.", "Managed OS patching, migrations, and upgrades as professional services to customers.", "Worked as DC OPS managing hardware diagnostics, upgrades and provisioning.", "Worked as DC network operations handling switch upgrades, troubleshooting, DDoS mitigation or disaster recovery.", "Diagnosed routing and other concerns escalating to network operations when required.", "Upgraded Nagios monitoring to latest version and scaled for performance.", "Upgraded MRTG graphing system for Cataylst switch monitoring to improve bandwidth graph capability.", "Created SSL monitoring in Nagios for customers who paid for SSL." ], "start_date": "2006-07-01", "end_date": "2010-02-01", "link": "http://800hosting.com" }, { "title": "C I Host", "specification": "Linux Technical Support 1", "location": "Bedford, TX", "level": "Full Time", "description": "Handled generalized Linux phone / ticket based technical support for a web-hosting firm. Supported Miva Merchant shopping, Cpanel and Flesk control panels.", "accomplishments": [ "Handled Linux Admin tasks for helping customers install and configure software within the hosting environment.", "Handled configuration of Merchant and other shopping utilities for customers who ordered the software.", "Performed work in the data-center across the street when staffing was low, assisting colo clients as well as responding to NOC escalations." ], "start_date": "2006-04-01", "end_date": "2006-07-01" } ], "skills_hypervisors": [ { "title": "AWS ec2", "level": 5, "endorsement": "" }, { "title": "XenServer", "level": 5, "endorsement": "" }, { "title": "VMWare ESXSI", "level": 5, "endorsement": "" }, { "title": "KVM", "level": 5, "endorsement": "" }, { "title": "Openstack", "level": 5, "endorsement": "" } ], "skills_devops_tools": [ { "title": "Terraform/HCL", "level": 5, "endorsement": "" }, { "title": "docker-compose", "level": 5, "endorsement": "" }, { "title": "Vagrant", "level": 5, "endorsement": "" }, { "title": "Puppet", "level": 5, "endorsement": "" }, { "title": "SaltStack", "level": 4, "endorsement": "" }, { "title": "Chef", "level": 3, "endorsement": "" } ], "skills_ci_cd": [ { "title": "Jenkins", "level": 5, "endorsement": "" }, { "title": "Bamboo", "level": 5, "endorsement": "" }, { "title": "Teamcity", "level": 4, "endorsement": "" }, { "title": "CircleCI", "level": 3, "endorsement": "" }, { "title": "Github Actions", "level": 2, "endorsement": "" }, { "title": "Gitlab", "level": 2, "endorsement": "" } ], "skills": [ { "title": "Python", "level": 5, "endorsement": "" }, { "title": "Ansible", "level": 5, "endorsement": "" }, { "title": "Kubernetes", "level": 5, "endorsement": "" }, { "title": "REST Frameworks", "level": 5, "endorsement": "" }, { "title": "HTML(5)", "level": 5, "endorsement": "" }, { "title": "CSS(3)", "level": 5, "endorsement": "" }, { "title": "Observium", "level": 5, "endorsement": "" }, { "title": "MongoDB", "level": 5, "endorsement": "" }, { "title": "MySQL", "level": 5, "endorsement": "" }, { "title": "Postgres", "level": 5, "endorsement": "" }, { "title": "AWS DynamoDB", "level": 5, "endorsement": "" }, { "title": "Docker", "level": 5, "endorsement": "" }, { "title": "Linux", "level": 5, "endorsement": "" }, { "title": "Nginx", "level": 5, "endorsement": "" }, { "title": "Apache", "level": 5, "endorsement": "" }, { "title": "JSON", "level": 5, "endorsement": "" }, { "title": "XML", "level": 5, "endorsement": "" }, { "title": "Bootstrap Framework", "level": 5, "endorsement": "" }, { "title": "SMTP", "level": 5, "endorsement": "" }, { "title": "DNS", "level": 5, "endorsement": "" }, { "title": "Wordpress", "level": 5, "endorsement": "" }, { "title": "Git (SCM)", "level": 4, "endorsement": "" }, { "title": "Postfix", "level": 4, "endorsement": "" }, { "title": "Nagios", "level": 4, "endorsement": "" }, { "title": "Tomcat", "level": 4, "endorsement": "" }, { "title": "ElasticSearch", "level": 4, "endorsement": "" }, { "title": "Redis", "level": 4, "endorsement": "" }, { "title": "Zabbix", "level": 4, "endorsement": "" }, { "title": "Networking", "level": 4, "endorsement": "" }, { "title": "Ruby", "level": 3, "endorsement": "" }, { "title": "Sensu", "level": 3, "endorsement": "" }, { "title": "PHP", "level": 3, "endorsement": "" }, { "title": "JQuery", "level": 3, "endorsement": "" }, { "title": "C/C++", "level": 2, "endorsement": "" }, { "title": "Java", "level": 2, "endorsement": "" }, { "title": "Golang", "level": 2, "endorsement": "" }, { "title": "Oracle", "level": 2, "endorsement": "" }, { "title": "Javascript", "level": 2, "endorsement": "" } ], "languages": [ { "title": "English", "level": 5, "endorsement": "Daily use" } ], "tools": [], "interests": [], "publications": [ { "title": "Building my last resume, ever, in Kubernetes.", "image": "https://i.imgur.com/QPqUbnW.png", "tags": "#resume #python #flask #pandoc #kubernetes #sidecar #docker-compose", "link": "https://www.linkedin.com/pulse/building-my-last-resume-ever-jonathan-kelley/", "slug": "building-my-last-resume-ever", "description": "An article about this website, my resume!" }, { "title": "Reconnecting after Postgres failover, introductory guide for application developers.", "image": "https://i.imgur.com/WtR5iHd.png", "tags": "#posgres #python #failover", "link": "https://www.linkedin.com/pulse/reconnecting-after-postgres-failover-guide-developer-jonathan-kelley/", "slug": "reconnecting-after-postgres-failover-guide", "description": "A brief article targeted at application developers on how to use reconnection based connection strings using libpq." }, { "title": "Error Handling from backends to the frontend!", "image": "https://i.imgur.com/b8sDiqi.jpg", "tags": "#exceptions #stacktrace #frontend #backend", "link": "https://www.linkedin.com/pulse/error-handling-tips-from-backend-your-frontend-jonathan-kelley/", "slug": "error-handling-tips-from-backend-your-frontend", "description": "The history about error handling in computing, and how a modern developer can handle frontend and backend errors better." }, { "title": "How to design subnets the right way", "image": "https://i.imgur.com/Dp1BRVR.png", "tags": "#subnet #networking #vpc #vlan #dnat #snat", "link": "https://www.linkedin.com/pulse/how-design-subnets-right-way-jonathan-kelley/", "slug": "how-design-subnets-right-way", "description": "Regardless if you are running networks in a physical datacenter or across VPCs in the cloud, you only get one chance. Learn how to do it right the first time, every time." } ], "projects": [ { "title": "eco_aprs_weather", "description": "This open source software generates packets in AX.25 (ITU-T standard protocol suite for packet-switched data communication) for the purpose of processing weather station telemetry. This telemetry is transmitted over amateur radio and can be heard by stations around the world.", "tagline": "Weather Station telemetry software for Amateur Radio", "tags": "radio, ham, aprs, ax25, radio, rf", "link": "https://github.com/jondkelley/eco_aprs_weather" }, { "title": "demo-jenkins-config-as-code", "description": "A showcase of Jenkins configurations and job creation out of the box. Using groovy and the configuration as code plugin, you can create fully viable Jenkins instances on docker.", "tagline": "Jenkins configurations and job creation right out of the box.", "tags": "Jenkins, Groovy, Configuration-as-code", "link": "https://github.com/jondkelley/demo-jenkins-config-as-code" }, { "title": "python_resume", "description": "A showcase of Python/Flask/Jinja2/HTML(5)/Bootstrap/JQuery used to both generate jon-kelley.com and my hardcopy resume.", "tagline": "The backend code for this website!", "tags": "Python, Flask, Bootstrap, Jinja2, Resume", "link": "https://github.com/jondkelley/python_resume" }, { "title": "logdna_line_export_cli", "description": "This command will recursively fetch all logs from the logdna export API. This is useful to get logs beyond the 10,000 line limit as the API does not natively provide pagination.", "tagline": "A paginator for LogDNA log export", "tags": "Python, Recursion, Pagination", "link": "https://github.com/jondkelley/logdna_line_export_cli" }, { "title": "rebrow_modernized", "description": "Built for the Python developer who needs to look into a Redis store. Allows for inspection and deletion of keys and follows PubSub messages. Also displays some runtime and configuration information.", "tagline": "Redis \"workbench\" style tool in Python/Flask.", "tags": "Python, Flask, Bootstrap, Redis", "link": "https://github.com/jondkelley/rebrow-modernized" }, { "title": "carphunter", "description": "Simple tool to locate Cisco IP/ARP and display results. Useful for small to medium datacenters (1-100 network devices)", "tagline": "A ARP cache tool for multi-device CISCO newtorks and search tool.", "tags": "Python, Flask, Bootstrap, Redis", "link": "https://github.com/jondkelley/carphunter" }, { "title": "zabbix_api_monitor", "description": "This was created to monitor HTTP / REST Endpoints under Zabbix.", "tagline": "A monitoring plugin for Zabbix.", "tags": "Python, REST, Monitoring, Zabbix, HTTP", "link": "https://github.com/jonkelleyatrackspace/zabbix_url_monitor" }, { "title": "canakit1104-api", "description": "This was created to expose a REST API for a relay board microcontroller so we could build light-based alerting systems while at Rackspace.", "tagline": "REST API to drive electronic relays.", "tags": "Python, REST, Monitoring, Electronics, Relay", "link": "https://github.com/jonkelleyatrackspace/canakit1104-api" }, { "title": "testVapi", "description": "Based on the python behave features this project emulates a cucumber style syntax to run HTTP API tests and is able to forward the messages to ELK stack. This uses a language called Gherkin to make plain-english QA testing a breeze.", "tagline": "Creative python suite which runs QA tests using plain English syntax.", "tags": "Python, Elk, Behave, Cucumber, Gherkin", "link": "https://github.com/jonkelleyatrackspace/testvapi" }, { "title": "vagrantfile-skel", "description": "I made this repo because I keep encountering quick environments setup / breakfix I need from time to time.", "tagline": "Common Vagrantfiles I tend to be using", "tags": null, "link": "https://github.com/jondkelley/vagrantfile-skel" } ] }