Skip to content

Commit

Permalink
move assets paths (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
osterman authored May 6, 2018
1 parent ba1850a commit dacc158
Show file tree
Hide file tree
Showing 122 changed files with 84 additions and 84 deletions.
2 changes: 1 addition & 1 deletion content/_header.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<a href="/"><img src="/images/fe450ef-small-TransparentWhite-version-HQ.png" id="header-logo" /></a>
<a href="/"><img src="/images/logo.png" id="header-logo" /></a>
2 changes: 1 addition & 1 deletion content/contributors/erik-osterman.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ Born and raised in Southern California, Erik is a 2002 graduate of UCLA, receivi
|Blog|https://osterman.com/|


![](/images/ba3ae6b-erik_osterman.png)
![](/assets/ba3ae6b-erik_osterman.png)
14 changes: 7 additions & 7 deletions content/development/github/feature-branches.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,21 @@ The next thing that needs to happen is that the `master` branch is treated as th

Once a feature is considered ready, the developer submits a Pull Request (or PR) and assigns it to a Subject Matter Expert (SME) or peer for review.

On the surface, this is what a well-formatted Pull Request looks like: ![](/images/e802ae2-image_3.png) A _Pull Request_ allows many things to happen:
On the surface, this is what a well-formatted Pull Request looks like: ![](/assets/e802ae2-image_3.png) A _Pull Request_ allows many things to happen:

- **Title**: A "human readable" title that represents the feature! ![](/images/2d4fce9-image.png)
- **Title**: A "human readable" title that represents the feature! ![](/assets/2d4fce9-image.png)
- **Description**: A long description that details **_What_** was changed, **_Why_** it was deemed necessary, and any other **_References_** that might be useful (E.g. Jira ticket)

- **Comments**: let anyone provide arbitrary feedback viewable by everyone.

- **Diffs**: show what changed between this feature and the current master branch

- **Formal Code Review Process:** let multiple people contribute to the code review process by submitting comments on a line-by-line basis. Having these code reviews formally documented serves as an excellent teaching tool. Over time, the reviews become faster and faster as developers learn what is expected. ![](/images/9df4fad-image_2.png)
- **Formal Code Review Process:** let multiple people contribute to the code review process by submitting comments on a line-by-line basis. Having these code reviews formally documented serves as an excellent teaching tool. Over time, the reviews become faster and faster as developers learn what is expected. ![](/assets/9df4fad-image_2.png)

- **Merging**: Once the PR is approved, the developer can squash and merge their code into the master branch. Squashing allows the master branch to have a very clean commit history where every commit corresponds to a PR. ![](/images/2b3e7eb-image_4.png)
- **Clean Commit History**: means that every change to the master branch is documented and justified. No one is sneaking in changes. ![](/images/b3dae79-image_5.png)
- **History of Features** and when they were added ![](/images/f9a3727-image_7.png)
- **Reverting**: If a feature needs to be removed, with the click of a single button it can be removed from the `master` branch ![](/images/28887e9-image_8.png)
- **Merging**: Once the PR is approved, the developer can squash and merge their code into the master branch. Squashing allows the master branch to have a very clean commit history where every commit corresponds to a PR. ![](/assets/2b3e7eb-image_4.png)
- **Clean Commit History**: means that every change to the master branch is documented and justified. No one is sneaking in changes. ![](/assets/b3dae79-image_5.png)
- **History of Features** and when they were added ![](/assets/f9a3727-image_7.png)
- **Reverting**: If a feature needs to be removed, with the click of a single button it can be removed from the `master` branch ![](/assets/28887e9-image_8.png)

# Technical Details

Expand Down
2 changes: 1 addition & 1 deletion content/development/markdown/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Markdown
excerpt: ''
---

![](/images/5a735a9-markdown.png) Markdown is a simple way to format plain text that looks great on any device without using any HTML or CSS. It doesn't permit do anything fancy like changing fonts, color, or typeface -- just the bare essentials by using keyboard symbols you already know.
![](/assets/5a735a9-markdown.png) Markdown is a simple way to format plain text that looks great on any device without using any HTML or CSS. It doesn't permit do anything fancy like changing fonts, color, or typeface -- just the bare essentials by using keyboard symbols you already know.

# Standard Formatting

Expand Down
6 changes: 3 additions & 3 deletions content/development/markdown/markdown-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Markdown Best Practices
excerpt: ''
---

![](/images/13f56b6-markdown.png)
![](/assets/13f56b6-markdown.png)

Using Markdown is essential for clear communication on mediums such as GitHub, Slack or just plain text. Here are some of our recommendations on when to use certain conventions.

Expand Down Expand Up @@ -45,9 +45,9 @@ Here's an example:
* Use `value` for all values
````

Which will render to something like this: ![](/images/8d8cdf3-image_23.png)
Which will render to something like this: ![](/assets/8d8cdf3-image_23.png)

![](/images/a2761a9-image_22.png)
![](/assets/a2761a9-image_22.png)

# Feature List Formatting

Expand Down
2 changes: 1 addition & 1 deletion content/development/semantic-versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ excerpt: ''

We practice [Semantic Versioning](https://semver.org/) for all projects (e.g. GitHub Tags/Releases, Helm Charts, Terraform Modules, Docker Images).

![Image credit: [Gopher Academy](https://blog.gopheracademy.com/advent-2015/semver/)](/images/aa35c54-semver.png)Image credit: [Gopher Academy](https://blog.gopheracademy.com/advent-2015/semver/)
![Image credit: [Gopher Academy](https://blog.gopheracademy.com/advent-2015/semver/)](/assets/aa35c54-semver.png)Image credit: [Gopher Academy](https://blog.gopheracademy.com/advent-2015/semver/)

# Semantics

Expand Down
2 changes: 1 addition & 1 deletion content/devops-methodology/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ This is our methodology.
# Tips & Tricks
* [Docker Tips & Tricks](doc:tips-tricks)
* [Terraform Tips & Tricks](doc:terraform-tips-tricks)
* [Fancy Shell Prompts](doc:fancy-prompts)
* [Fancy Shell Prompts](doc:fancy-prompts)
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ The site experienced the classic cascading failure that affected all components

## Unexplained problems

- During the rollout, API keys for the `amazon-associates-link-builder` plugin got cleared ![](/images/e82e21a-image_10.png)
- During the rollout, TablePress options got cleared ![](/images/4204bed-image_11.png)
- During the rollout, API keys for the `amazon-associates-link-builder` plugin got cleared ![](/assets/e82e21a-image_10.png)
- During the rollout, TablePress options got cleared ![](/assets/4204bed-image_11.png)

## Remediations

Expand Down Expand Up @@ -117,41 +117,41 @@ Prior to rollout, all 3 production instances indicated high memory pressure (90%

### Pingom

![](/images/1f27db8-image_12.png)
![](/assets/1f27db8-image_12.png)

![](/images/89c0050-image_13.png)
![](/assets/89c0050-image_13.png)

![](/images/9d3f441-image_14.png)
![](/assets/9d3f441-image_14.png)

### Elastic Beanstalk

ElasticBeanstalk saw a massive increase in requests which manifested as a Denial of Service Attack. This was triggered probably by mod_pagespeed generating pages for webp assets which could not be served by upgraded servers. Varnish does not cache 404s. ![](/images/af54926-image_15.png)
ElasticBeanstalk saw a massive increase in requests which manifested as a Denial of Service Attack. This was triggered probably by mod_pagespeed generating pages for webp assets which could not be served by upgraded servers. Varnish does not cache 404s. ![](/assets/af54926-image_15.png)

![](/images/dc4dbd3-image_16.png)
![](/assets/dc4dbd3-image_16.png)

### RDS

There were no deadlocks. There was no increase in IOPS (r/w)

#### CPU Utilization spiked.

![](/images/2e1d7be-image_17.png)
![](/assets/2e1d7be-image_17.png)

#### Connections peaked and maxed out.

![](/images/8f2e7d3-image_18.png)
![](/assets/8f2e7d3-image_18.png)

#### Selects went through the roof.

![](/images/43dfb04-image_19.png)
![](/assets/43dfb04-image_19.png)

#### CPU credits were not exhausted, so we had excess capacity

![](/images/7bd6416-image_20.png)
![](/assets/7bd6416-image_20.png)

#### Commits / Writes went through the roof

![](/images/b7a608c-image_21.png)
![](/assets/b7a608c-image_21.png)

## Related Post Mortems

Expand Down
2 changes: 1 addition & 1 deletion content/devops-methodology/software-lifecycle/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Software Lifecycle
excerpt: ''
---

Conceptual process loop is 8 segment wheel. Left half of it is about software development, right half - software execution. ![Process Loop](/images/fa5c2bb-Process_Loop_-_general_-_Page_1_1.png)Process Loop Each step have legend who involved in work on that step and what tools are used ![General Process Loop](/images/2c9fd63-Process_Loop_-_Page_1_4.png)General Process Loop During development we have to develop, config and execute different types of software. Depends of purpose, the process loop for that types can use different tools, involve different kind of engineers and even can skip some loop steps.
Conceptual process loop is 8 segment wheel. Left half of it is about software development, right half - software execution. ![Process Loop](/assets/fa5c2bb-Process_Loop_-_general_-_Page_1_1.png)Process Loop Each step have legend who involved in work on that step and what tools are used ![General Process Loop](/assets/2c9fd63-Process_Loop_-_Page_1_4.png)General Process Loop During development we have to develop, config and execute different types of software. Depends of purpose, the process loop for that types can use different tools, involve different kind of engineers and even can skip some loop steps.

- [Language Libraries & Frameworks](doc:library)
- [Deployable Applications](doc:deployable-application)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ This is a hybrid of two types: `Infrastructure as a Code` and `Deployable backin

`Backing Services` usually extends the functionality of kubernetes or provide some services for CI/CD and development (example: artifact storage / chartmuseum / external dns / tls certbot )

`Backing Services` stored in the same repo with `Infrastructure as a Code` software. So `Backing Services` does not have independent build, test and release steps. On deploy step `Backing Services` deploys independently from umbrella `Infrastructure as a Code` app. ![Backing Services Process loop](/images/70b071a-Process_Loop_-_Backing_Services_-_Page_1.png)Backing Services Process loop
`Backing Services` stored in the same repo with `Infrastructure as a Code` software. So `Backing Services` does not have independent build, test and release steps. On deploy step `Backing Services` deploys independently from umbrella `Infrastructure as a Code` app. ![Backing Services Process loop](/assets/70b071a-Process_Loop_-_Backing_Services_-_Page_1.png)Backing Services Process loop
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ excerpt: ''

*Deployable application* - is the software that can be deployed and operated independently. All required dependencies bundled into artifacts.

This type of software has the whole process loop and we can specify some tools that are standard for all of our projects. ![Deployable Applications Process Loop](/images/715f6ff-Process_Loop_-_Deployable_Application_-_Page_1.png)Deployable Applications Process Loop
This type of software has the whole process loop and we can specify some tools that are standard for all of our projects. ![Deployable Applications Process Loop](/assets/715f6ff-Process_Loop_-_Deployable_Application_-_Page_1.png)Deployable Applications Process Loop
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ excerpt: ''

_Infrastructure as Code_ - is software that configures and operates basic infrastructure - servers, networking, kubernetes platform. Because this code manage very basic layer of system, it is applied manually by DevOps Engineer. _Infrastructure as Code_ - does not have the "operate" step, it modify infrastructure and then this infrastructure operates on cloud independently. Monitoring step use the common monitoring and alerting tools to monitor cloud infrastructure and notify about incidents.

![Infrastructure as a Code Process Loop](/images/3cf5259-Process_Loop_-_Infrastructure_as_a_Code_-_Page_1.png)
![Infrastructure as a Code Process Loop](/assets/3cf5259-Process_Loop_-_Infrastructure_as_a_Code_-_Page_1.png)
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ _Library_ - is the software that can be run only as a part of some other softwar

Examples are npm packages, ruby gems, python modules, etc. Ultimately, these libraries are typically bundled as part of the Docker image along with other software.

It does not have **deploy** step because they are included as dependencies by other software. Because of that it also does not have the **operate** and **monitoring** steps ![Library Process Loop](/images/0effe9c-Process_Loop_-_Library_-_Page_1.png)Library Process Loop
It does not have **deploy** step because they are included as dependencies by other software. Because of that it also does not have the **operate** and **monitoring** steps ![Library Process Loop](/assets/0effe9c-Process_Loop_-_Library_-_Page_1.png)Library Process Loop
2 changes: 1 addition & 1 deletion content/geodesic/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ excerpt: >-
homepage: true
---

![](/images/638d917-geodesic-small.png)
![](/assets/638d917-geodesic-small.png)

|
------------ | ----------------------------------------------------------------------------------------------------------------------------
Expand Down
8 changes: 4 additions & 4 deletions content/geodesic/geodesic-module/use/with-kops.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ terraform plan
terraform apply
```

![](/images/b5e88dd-joany-staging-kops-state.png)
![](/assets/b5e88dd-joany-staging-kops-state.png)
The public and private SSH keys are created and stored automatically in the encrypted S3 bucket.

![](/images/9d5dc1c-joany-staging-kops-state-ssh-keys.png)
![](/assets/9d5dc1c-joany-staging-kops-state-ssh-keys.png)
From the Terraform outputs, copy the `zone_name` and `bucket_name` into the ENV vars `CLUSTER_NAME` and `KOPS_STATE_STORE` in the `Dockerfile`.

# Build Manifest
Expand Down Expand Up @@ -93,7 +93,7 @@ You will find the rendered `kops` manifest file `/conf/kops/manifest.yaml`.
# Launch Cluster

Run `kops create -f manifest.yaml` to create the cluster (this will just create the cluster state and store it in the S3 bucket, but not the AWS resources for the cluster).
![](/images/b251e2e-kops-create.png)
![](/assets/b251e2e-kops-create.png)
Run the following to add the SSH public key to the cluster.
```
kops create secret sshpublickey admin -i /secrets/tf/ssh/joany-staging-kops-us-west-2.pub \
Expand All @@ -105,7 +105,7 @@ Run the following to provision the AWS resources for the cluster.
kops update cluster --name us-west-2.staging.joany.net --yes
```

![](/images/944178e-kops-update-cluster.png)
![](/assets/944178e-kops-update-cluster.png)

All done. The `kops` cluster is now up and running.

Expand Down
4 changes: 2 additions & 2 deletions content/geodesic/geodesic-module/use/with-terraform.md
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ terraform plan
terraform apply
```
![](/images/81d14ff-cloudtrail.png)
![](/assets/81d14ff-cloudtrail.png)
## Example: Provision Backing Services with Terraform
Change directory to the required resources folder
Expand All @@ -375,7 +375,7 @@ terraform plan
terraform apply
```
![](/images/8dd848c-vpc_and_subnets.png)
![](/assets/8dd848c-vpc_and_subnets.png)
Repeat for all other projects in the solution (`dns`, `acm`, etc.).
# Build and Release geodesic shell
Expand Down
2 changes: 1 addition & 1 deletion content/helm-charts/_index.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
---
title: "Helm Charts"
excerpt: ""
---
---
2 changes: 1 addition & 1 deletion content/helm-charts/supported-charts/external-dns.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "external-dns"
excerpt: "Configure external DNS servers (AWS Route53, Google CloudDNS and others) for Kubernetes Ingresses and Services"
draft: true
---
![](/images/61e5a81-external-dns.png)
![](/assets/61e5a81-external-dns.png)

# FAQ

Expand Down
10 changes: 5 additions & 5 deletions content/kubernetes/kubernetes-resource-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,21 @@ some-pod 0/1 OOMKilled 1 24s
By inspecting a "Node" in the kubernetes dashboard, it's really easy to tell if a cluster is oversubscribed. In the example below, we can see that pods have requested 54% of available CPU, but the hard limit has been set to 100% of available CPU. This means, that nothing else should be scheduled do this node as 100% of total available capacity has been allocated.

In terms of memory, we see that all pods of a total memory limit of 4.3GB, which is 113% of available resources. This means the cluster is overcommitted in terms of the maximum permitted amount of memory. In terms of actually requested memory, we're still under the threshold.
![](/images/334a25e-Screen_Shot_2018-04-17_at_1.50.21_PM.png)
![](/assets/334a25e-Screen_Shot_2018-04-17_at_1.50.21_PM.png)
## How can we tell if we have enough CPU/Memory Allocated?
Navigate to the kubernetes dashboard. Click the "Cluster" menu option on the left (it's also the default view). At the top, it will show how much CPU and Memory is being consumed versus total available.

In the cluster below, you can see CPU is not constrained, but available memory is very low.
![](/images/e075391-Screen_Shot_2018-04-17_at_1.30.32_PM.png)
![](/assets/e075391-Screen_Shot_2018-04-17_at_1.30.32_PM.png)
## What's the best way to view resources consumed by a namespace?

Navigate to the kubernetes dashboard. Click the "Overview" menu option on the left and then filter by the namespace. By default, the "default" namespace is selected. Generally, we don't use this namespace.

If everything is running smoothly, you should see "Deployments", "Pods" and "ReplicaSets" all at 100%, which means there are no failures.
![](/images/a701e1e-Screen_Shot_2018-04-17_at_1.25.03_PM.png)
![](/assets/a701e1e-Screen_Shot_2018-04-17_at_1.25.03_PM.png)
Note, you can also select "All Namespaces" to view aggregate information for the cluster.

![](/images/edea654-Screen_Shot_2018-04-17_at_1.34.31_PM.png)
![](/assets/edea654-Screen_Shot_2018-04-17_at_1.34.31_PM.png)
# How can we set resource requests & limits?


Expand All @@ -51,4 +51,4 @@ It's possible to restrict the total resources available to a namespace.
## Deployment / Pod Level
* Who is responsible for this?
* How do you do it? Go to helmfile which is capable of overriding the limits. Redeploy? Relationship to codefresh
* We need docs on process for using `helmfile` (e.g. `helmfile sync`)
* We need docs on process for using `helmfile` (e.g. `helmfile sync`)
2 changes: 1 addition & 1 deletion content/learn-by-example/root-module/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ weight: 1
* Configure Terraform Remote State
* Establish DNS Zones
* Provision sub accounts
* Setup IAM Credentials to access sub accounts
* Setup IAM Credentials to access sub accounts
4 changes: 2 additions & 2 deletions content/local-development-environments/docker-compose.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: "Docker Compose"
excerpt: ""
---
![](/images/7804914-docker-compose.png)
![](/assets/7804914-docker-compose.png)

This document compiles “lessons learned” and advice for working with Docker Compose.

Expand All @@ -24,4 +24,4 @@ This document compiles “lessons learned” and advice for working with Docker

* No native way in `docker-compose` YAML to run bootstrapping scripts (e.g. init DB); recommend sidekick containers
* No way to enforce startup *delays* between containers
* `restart: always` only works when the command exits non-zero
* `restart: always` only works when the command exits non-zero
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ If you are not comfortable writing shell scripts, then this is a great time to l

# Lives alongside the application code
* When application requirements change, the developer can ensure those are captured; no more “we forgot to upgrade `libssl` in production, so that's why the application crashed”
* CI/CD compatibility
* CI/CD compatibility
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Fancy shell prompts are not just pretty, they're also incredibly practical. With


This is how to get a fancy shell prompt like the one below for the `bash` shell.
![](/images/500c4b8-Screen_Shot_2018-04-02_at_7.54.13_PM.png)
![](/assets/500c4b8-Screen_Shot_2018-04-02_at_7.54.13_PM.png)

## Install powerline

Expand Down
4 changes: 2 additions & 2 deletions content/local-development-environments/makefile/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ excerpt: ""
The `make` command has been around for decades. Predominantly, it was used to build complex projects in C & C++, but it's seen a resurgence in the ops world for automating routine tasks and orchestration of infrastructure-as-code. In the 12-factor pattern, these are your “admin tasks”.


![](/images/4132caf-image_3.png)
![](/assets/4132caf-image_3.png)
# Understanding Makefiles

Because `make` is a very simple language, there's not very much you need to learn to get started. Some things, however, might seem unintuitive when approaching it from the perspective of other languages. Namely, `make` is really a template engine that renders “stubs” and then executes those stubs in a shell. Environment variables can be considered as the arguments to those targets.
Expand Down Expand Up @@ -275,4 +275,4 @@ To correct this, we could instead write:
foobar:
@export MONTH=February; \
echo $${MONTH}
```
```
Loading

0 comments on commit dacc158

Please sign in to comment.