<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Opslifeuk Limited</title><link>https://opslife.co.uk/</link><description>Recent content on Opslifeuk Limited</description><generator>Hugo</generator><language>en-gb</language><lastBuildDate>Sun, 05 Jul 2020 21:12:43 +0100</lastBuildDate><atom:link href="https://opslife.co.uk/index.xml" rel="self" type="application/rss+xml"/><item><title>How does the browser resolve DNS?</title><link>https://opslife.co.uk/general/dns/</link><pubDate>Sun, 05 Jul 2020 21:12:43 +0100</pubDate><guid>https://opslife.co.uk/general/dns/</guid><description>&lt;p&gt;Have you ever wondered how your browser resolves a domain name when you hit &lt;code&gt;Enter&lt;/code&gt; on a URL? Here&amp;rsquo;s how it works, at a high level.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Your browser first looks in its own cache for the address. If it doesn&amp;rsquo;t find it, it checks the OS cache, and finally the ISP&amp;rsquo;s cache.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the name isn&amp;rsquo;t cached, the next step is the &lt;code&gt;/etc/hosts&lt;/code&gt; file. If there&amp;rsquo;s an &lt;code&gt;IP&lt;/code&gt; address there, the browser tries to load the page from that server.&lt;/p&gt;</description></item><item><title>Amazon's 14 Leadership Principles</title><link>https://opslife.co.uk/general/amazon/</link><pubDate>Sat, 20 Jun 2020 16:33:50 +0100</pubDate><guid>https://opslife.co.uk/general/amazon/</guid><description>&lt;p&gt;Amazon&amp;rsquo;s Leadership Principles are used in everything from hiring to design
reviews, and they&amp;rsquo;ve become hugely influential well beyond Amazon itself.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=B-xdfQv3I1k"&gt;Watch a walkthrough of the principles on YouTube →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The fourteen principles:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Customer Obsession&lt;/li&gt;
&lt;li&gt;Ownership&lt;/li&gt;
&lt;li&gt;Invent and Simplify&lt;/li&gt;
&lt;li&gt;Are Right, A Lot&lt;/li&gt;
&lt;li&gt;Learn and Be Curious&lt;/li&gt;
&lt;li&gt;Hire and Develop the Best&lt;/li&gt;
&lt;li&gt;Insist on the Highest Standards&lt;/li&gt;
&lt;li&gt;Think Big&lt;/li&gt;
&lt;li&gt;Bias for Action&lt;/li&gt;
&lt;li&gt;Frugality&lt;/li&gt;
&lt;li&gt;Earn Trust&lt;/li&gt;
&lt;li&gt;Dive Deep&lt;/li&gt;
&lt;li&gt;Have Backbone; Disagree and Commit&lt;/li&gt;
&lt;li&gt;Deliver Results&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;(Amazon has since added two more - &amp;ldquo;Strive to be Earth&amp;rsquo;s Best Employer&amp;rdquo; and
&amp;ldquo;Success and Scale Bring Broad Responsibility&amp;rdquo; - bringing the total to sixteen.)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Arnold's 6 Rules for Success</title><link>https://opslife.co.uk/general/arnold/</link><pubDate>Sat, 20 Jun 2020 16:23:57 +0100</pubDate><guid>https://opslife.co.uk/general/arnold/</guid><description>&lt;p&gt;Arnold Schwarzenegger gave this commencement speech at the University of
Southern California, and the six rules he lays out have stuck with me. They&amp;rsquo;re
simple, but they apply just as much to a career in engineering as to anything
else.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=uvYXMnnO2jg"&gt;Watch Arnold&amp;rsquo;s full USC commencement speech on YouTube →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;His six rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Trust yourself.&lt;/strong&gt; Work out who you really are and what you want, rather than what others expect of you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Break the rules.&lt;/strong&gt; Not the laws - the conventions. You rarely do anything remarkable by following the well-worn path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t be afraid to fail.&lt;/strong&gt; You can&amp;rsquo;t win without being willing to lose. Failure is the cost of trying anything worthwhile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t listen to the naysayers.&lt;/strong&gt; &amp;ldquo;It can&amp;rsquo;t be done&amp;rdquo; usually means &amp;ldquo;I couldn&amp;rsquo;t do it.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work your butt off.&lt;/strong&gt; There is no substitute for the hours. Talent without effort gets overtaken.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Give back.&lt;/strong&gt; Reaching the top means nothing if you don&amp;rsquo;t reach back and help others up.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What I take from it for our work: most of the interesting problems in cloud and
reliability engineering come from being willing to question how things are
&amp;ldquo;normally&amp;rdquo; done, putting in the unglamorous hours to get the details right, and
then sharing what you learn. That&amp;rsquo;s a big part of why this blog exists.&lt;/p&gt;</description></item><item><title>Kubernetes Resource Limits and JVM Heap Size</title><link>https://opslife.co.uk/kubernetes/memory/</link><pubDate>Sat, 13 Jun 2020 17:40:34 +0100</pubDate><guid>https://opslife.co.uk/kubernetes/memory/</guid><description>&lt;p&gt;By default, the JVM&amp;rsquo;s &lt;code&gt;maximum heap size&lt;/code&gt; is 1/4 of the physical memory available - you can read about this &lt;a href="https://docs.oracle.com/javase/9/gctuning/parallel-collector1.htm#JSGCT-GUID-74BE3BC9-C7ED-4AF8-A202-793255C864C4"&gt;in the Oracle GC tuning guide&lt;/a&gt;. This means that if you don&amp;rsquo;t define &lt;code&gt;-Xmx&lt;/code&gt; in your JVM parameters, the container will set &lt;code&gt;1/4&lt;/code&gt; of the host memory as the &lt;code&gt;maximum heap size&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On a recent enough JVM (8u191+ and 10+), the JVM is container-aware: if you set a Kubernetes &lt;code&gt;resource limit&lt;/code&gt;, the JVM uses that limit rather than the host&amp;rsquo;s memory to size the heap. So your &lt;code&gt;maximum heap size&lt;/code&gt; becomes &lt;code&gt;1/4&lt;/code&gt; of your Kubernetes &lt;code&gt;resource limit&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Kubernetes Service Accounts and Secrets - Mounting Secrets as Volumes</title><link>https://opslife.co.uk/kubernetes/secrets/</link><pubDate>Fri, 12 Jun 2020 14:00:33 +0100</pubDate><guid>https://opslife.co.uk/kubernetes/secrets/</guid><description>&lt;p&gt;A Service Account provides an identity for processes that run in a pod. When processes inside a pod contact the API server, they are authenticated as a particular Service Account.&lt;/p&gt;
&lt;p&gt;Create a Service Account using the YAML below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ServiceAccount&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sa-app-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;namespace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;namespace-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the Service Account is created, you can reference it in your pod spec:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Pod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;app-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;serviceAccountName&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sa-app-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now on to Kubernetes Secrets. A Secret lets you store and manage sensitive information. Here we&amp;rsquo;ll create two secrets for our tests: &lt;code&gt;mysecret1&lt;/code&gt; and &lt;code&gt;mysecret2&lt;/code&gt;. Note the &lt;code&gt;---&lt;/code&gt; separator - without it, the second document silently overwrites the first.&lt;/p&gt;</description></item><item><title>15 Books Bill Gates Thinks Everyone Should Read</title><link>https://opslife.co.uk/general/bill/</link><pubDate>Thu, 11 Jun 2020 23:29:17 +0100</pubDate><guid>https://opslife.co.uk/general/bill/</guid><description>&lt;p&gt;Bill Gates is famously a voracious reader, getting through dozens of books a
year and publishing detailed recommendations on his blog, &lt;em&gt;GatesNotes&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=a47dqygseGo"&gt;Watch a roundup of fifteen of his picks on YouTube →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What I like about his lists is how little of it is about technology. Gates reads
widely - history, public health, psychology, science, biography - and that
breadth clearly feeds into how he thinks about hard problems.&lt;/p&gt;</description></item><item><title>Static website hosting using S3 and CloudFront</title><link>https://opslife.co.uk/aws/static/</link><pubDate>Tue, 09 Jun 2020 22:49:25 +0100</pubDate><guid>https://opslife.co.uk/aws/static/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A note on dates:&lt;/strong&gt; this post was written in 2020 using Terraform 0.12 and the
&lt;code&gt;nodejs12.x&lt;/code&gt; Lambda runtime. The architecture still holds up well, but if you&amp;rsquo;re
following along today, check the current AWS provider docs and use a supported
Lambda runtime and Terraform version. In particular, the &lt;code&gt;aws_s3_bucket&lt;/code&gt;
resource has since been split into smaller resources (&lt;code&gt;aws_s3_bucket_acl&lt;/code&gt;,
&lt;code&gt;aws_s3_bucket_logging&lt;/code&gt;, &lt;code&gt;aws_s3_bucket_website_configuration&lt;/code&gt; and so on).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recently I had the chance to create a static website using &lt;a href="https://aws.amazon.com/s3/"&gt;S3&lt;/a&gt; and &lt;a href="https://aws.amazon.com/cloudfront/"&gt;CloudFront&lt;/a&gt;. I used &lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt; as the framework for content management and &lt;a href="https://www.terraform.io/docs/index.html"&gt;Terraform&lt;/a&gt; to provision the infrastructure. There were a few interesting challenges, but in the end it worked out well.&lt;/p&gt;</description></item><item><title>Istio Masterclass</title><link>https://opslife.co.uk/talks/istio/</link><pubDate>Sun, 07 Jun 2020 00:54:42 +0100</pubDate><guid>https://opslife.co.uk/talks/istio/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/Z0X0NmVXk0g?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;This talk by Dawid Ziolkowski at &lt;strong&gt;DevOpsDays Warsaw&lt;/strong&gt; is a clear introduction
to &lt;strong&gt;Istio&lt;/strong&gt;. If you&amp;rsquo;ve heard of service meshes but never quite grasped what
problems they solve, it&amp;rsquo;s a good place to start - it covers what a mesh gives
you (traffic management, observability and mutual TLS between services) and how
Istio implements it on top of Kubernetes.&lt;/p&gt;</description></item><item><title>Building APIs with Amazon API Gateway</title><link>https://opslife.co.uk/talks/api/</link><pubDate>Sun, 07 Jun 2020 00:49:21 +0100</pubDate><guid>https://opslife.co.uk/talks/api/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/XwfpPEFHKtQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;In this talk, Chris Munns walks through building APIs with &lt;strong&gt;Amazon API
Gateway&lt;/strong&gt; - covering how it fits into a serverless architecture, the design
choices you&amp;rsquo;ll face, and how to operate APIs in production. A solid primer if
you&amp;rsquo;re putting an API Gateway in front of Lambda or your own backends.&lt;/p&gt;</description></item><item><title>Encrypting Secrets in Amazon EKS</title><link>https://opslife.co.uk/talks/secrets/</link><pubDate>Sun, 07 Jun 2020 00:24:41 +0100</pubDate><guid>https://opslife.co.uk/talks/secrets/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/d21JrnszG7Y?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;In this talk, Paavan Mistry explains how to encrypt Kubernetes secrets at rest
in &lt;strong&gt;etcd&lt;/strong&gt; on Amazon EKS. By default, Kubernetes stores secrets only
base64-encoded - not encrypted - so anyone who gains access to the API server
or to etcd can read them in the clear. The talk shows how to use &lt;strong&gt;AWS KMS
envelope encryption&lt;/strong&gt; to protect secrets at rest, which is an easy win for
anyone running EKS in production.&lt;/p&gt;</description></item><item><title>A Message from the Director</title><link>https://opslife.co.uk/general/welcome/</link><pubDate>Thu, 04 Jun 2020 18:43:26 +0100</pubDate><guid>https://opslife.co.uk/general/welcome/</guid><description>&lt;figure&gt;&lt;img src="https://opslife.co.uk/images/beach.jpg"&gt;
&lt;/figure&gt;

&lt;p&gt;Thank you for considering Opslifeuk Limited.&lt;/p&gt;
&lt;p&gt;With many years of experience helping clients with digital transformation and
cloud migration, our consultants bring deep, hands-on expertise to every
engagement. We partner with you at every step of the journey and deliver
results built on &lt;strong&gt;Quality, Reliability and Technical Competence.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Opslifeuk Limited stands for Love, Life and Tech. We believe happy engineers make happy
customers - so we do the work we enjoy, and we do it with care.&lt;/p&gt;</description></item></channel></rss>