Tag Archives: Containers

T-SQL Tuesday #140 Wrap up: What have you been up to with containers?

I want to start by saying thank you to all who submitted, and an amazing collection of people submitted some fantastic content. Also, thanks to Steve for asking me to host and being patient with me for mixing up the dates and the hashtag. It’s #tsql2sday and it’s on Tuesday not Wednesday :P

T SQL Tuesday Logo

Now, onto the posts in submission order.

Rob Farley – On containers

Rob discusses how he uses containers to quickly spin up SQL Server instances without installing them on his local OS, replacing the virtual machine-based environments he used in the past. And I can’t agree with this more. I’ve used Macs for 20 years and have used VMs to do SQL Server-based work. That’s no longer the case. I can run SQL Server in containers without VMs*. And you can do the same you can run a container in minutes anywhere you have a container runtime like docker. Thanks for sharing, Rob!

Jeff Hill – Container Convenience

Jeff introduces us to some non-SQL Server container images he uses at home, like pi-hole, a media server, a personal CRM, and more. The big idea in this post is that due to the isolation principles of containers, you and spin up containers from container images super easy via a container repository like docker hub…which enable you to test out new software or even new versions of existing software and if you don’t want that container anymore delete it. There’s no leftover crud on your system like config files etc. Great post, Jeff! And as Jeff suggests, head over to docker hub and see what software you can find that’s useful for you!

PS: If you aren’t using Pi-Hole, oh, you really should. Check it out…I run it in a container on my laptop for when I’m traveling, and I have one in Azure that my home network is using.

Kevin Chant – Easy demos using containers

Kevin shows us how he’s been using containers in demos, specifically for sessions based on DevOps. Using tools like Azure Pipelines in Azure DevOps or GitHub Actions, you can build automated testing and deployments of SQL Server instances and databases for the various environments needed in your deployment, such as prod, stage, etc. This is truly one of the superpowers of containers…building deployment automation in code so that you can roll out in a defined, tested way…every time you roll out a new instance or database or change to an instance or database. Kevin also introduces us to the idea that many of us are already using containers and might not even know that we are. He points out that several Azure services like Databricks and Synapse Analytics use containers behind the scenes. Excellent post, Kevin!

Aaron Bertrand – What have you been up to with containers?

Aaron shows us what he’s been up to with containers, specifically spinning up containers to test out application compatibility when making changes around case-sensitivity and binary collation settings at the instance level. He describes how he can quickly spin up the container, run the test and remove the container quickly…and like we discussed earlier…this used to be something that would require provisioning a whole VM and installing SQL Server. Such a huge time saver. In addition to describing how he uses containers, Aaron also gives us some example code to start up a container with some of the unique settings he wanted to test. Thanks, Aaron, great stuff!

Tom – Containers and me

Tom discusses how he’s containers to deploy RabbitMQ, a monitoring stack using Grafana, and deploying a SQL Server environment via a build pipeline. Excellent stuff. Thanks for sharing, Tom! Tom also mentions my container-mate Andrew Pruski’s SQL Server and Containers Guide, this is fantastic stuff check it out! everything from getting started to deep dive is available there.

Todd Kleinhans – RAPIDS and SQL Server Containers

Todd shows us how you can use containers to enable data science scenarios. In his post, he shows you how to start up a RAPIDS container with access to your system’s GPU. There are two cool things to unpack there. First, RAPIDS, as Todd points out, is a suite of open-source software libraries and APIs, giving you an end-to-end data science and an analytics pipeline all in one container image. Spin that container up with access to your GPU, and you’re off to the races performing GPU accelerated data science without having to struggle with downloading software and setting it up…just grab the container and go. Of course, to do data science, you need data, so he also dives into how to spin up a SQL Server container and access that data from the RAPIDS application suite. Super awesome stuff, Todd!

Kendra Little – Create a Disposable SQL Server Database Container in an Azure DevOps Pipeline With Spawn

Kendra shows us how to create a disposable SQL Server Database Container in an Azure Pipeline using Spawn in this post. As discussed in the post, Spawn is a tool that addresses two key challenges when working with data in development processes, testing against realistic datasets and resetting that data after changes. Spawn brings the power of containers to help instantiate datasets rather than just applications. Combine that with Azure DevOps Pipelines, and you have a super slick way of building automated workflows and testing code changes against realistic datasets. Outstanding post, Kendra!

PS: I saw Spawn a few years back at a SQLSaturday…watch this space. I think they’re building something special here!

Mark Wilkinson – Baselining SQL Server with the TIG Stack

Next up, my fellow EightKB organizer Mark Wilkinson shows us how to stand up a STIG (Telegraf, InfluxDB, Grafana) monitoring stack using Docker Compose. Grab the code here! The STIG monitoring stack enables you to collect baseline metrics for your SQL Server instances and use visualization dashboards via Grafana. This post hits home for me. I will use this code to stand up performance monitoring environments for testing and spot troubleshooting. As a consultant, this would have been SO super valuable since I can quickly spin up the whole monitoring stack and collect metrics on instances…I’ve had many clients over the years that have no monitoring. This project would have been a HUGE time saver for me. Banging post, Mark!

Barney Lawrence – Containers for Business and Pleasure

In Barney’s post, he mixes business and pleasure…showing us how to deploy SQL Server in a container on docker backed by Windows Services for Linux (WSL) and how to deploy a Minecraft Bedrock Server using Docker Compose. There are a couple of cool things to point out here: first, how data is managed in both scenarios using Docker Volumes, and second, leveraging Docker Compose to manage the configuration and state of the Minecraft Server defining environment variables and volumes in code. Well done, Barney!

Cathrine Wilhelmsen – Developing in Containers using Visual Studio Code

In this post, Catherine walks us through setting up a development environment using containers in Visual Studio Code. She highlights some core reasons for using containers containers. First, containers give organizations the ability to control which libraries and tools developers are using. Second, containers enable organizations to quickly onboard new developers and consultants like herself online with the proper tooling as fast as possible to be productive as quickly as possible. Thank you for sharing this super valuable content, Catherine!

Deborah Melkin – What have I been doing with Containers

Deborah highlights the various use cases for running SQL Server in containers, things like quick deployment, and code and upgrade testing. She also introduces the term ‘virtual instance’, which is a fantastic way to describe to DBAs what you get when you run SQL Server in a container. Deborah also links to some other posts that where she describes her experiences getting started with docker and setting up ports for SQL Server in containers. Awesome post(s) :) thanks for this, Deborah!

And Last But Not Least, the Rule Breakers!!!

They didn’t post on my invite post, but I found them on that pesky #tsql2sday hashtag on Twitter.

Shane O’Neill – What have you been up to with containers?

In this post, Shane shares with us what happens when you run a Kubernetes cluster on your laptop…things get hot…fast. (Y’all remember when my laptop caught fire đŸ”„???) But anyway, Shane isolats the problem, cleans things up, and gets back to running SQL Server in containers in Docker on his laptop to keep things cool 😎 . Thanks for sharing this, Shane!

KUBERNETES…drink!

Rob Sewell – TSql2sday video – Azure Arc Enabled Data Services in AKS Cluster

The Beard brings it all together…in his “post” (which is a YouTube video because Rob is incredible and also a rule breaker), Rob shows you Azure Arc enabled Data Services (something near and dear to my heart)…he deploys an Azure Kubernetes Service cluster, an Azure Arc enabled Data Services deployment, a couple of SQL Server Managed Instances, and a complete monitoring and logging stack using Grafana and Kibana. And this, my friend, is the magic of containers and Kubernetes…Rob does all of this in code in a repeatable fashion in just about 30 minutes.

Summary

Summing this all up, there are a couple of primary themes here, speed and consistency. Containers enable you to develop, deploy and maintain applications quickly and consistently in code. And as we discussed in the Invitation post, containers are the foundation for the next generation of the Microsoft Data Platform; Azure Arc enabled Data Services! Thank you all again for your fantastic posts!

Updated Pluralsight Course – Managing the Kubernetes API Server and Pods

My updated course “Managing the Kubernetes API Server and Pods” in now available on Pluralsight here! If you want to learn about the course, check out the trailer here or if you want to dive right in check it out here! 

This course targets IT professionals that design and maintain Kubernetes and container based solutions. The course can be used by both the IT pro learning new skills and the system administrator or developer preparing for using Kubernetes both on premises and in the Cloud.

Let’s take your Kubernetes administration and configuration skills to the next level and get you started now!

Key updates to the course include:

  • Using kubectl command options to create workloads and build YAML manifest templates fast such as --dry-run

  • Working with Static Pods

  • Working with Init Containers

  • Managing Pod health with Container Probes

The modules of the course are:

  • Using the Kubernetes API – In this module we dive into the Kubernetes API and the API server. We take a closer look at the API itself, API objects, and the internals of the API server. Next up is we look at working with Kubernetes objects. Looking at the types of objects available, how to use them, looking closely at how we define objects, Kubernetes API groups, and also how the API server itself is versioned. Then we wrap up the module with a deep dive into the anatomy of an API request, where we look closely at what happens when we submit a request into the API server.

  • Managing Objects with Labels, Annotations, and Namespaces – In this module, we discuss organizing objects in Kubernetes, and the techniques to organize objects such as namespaces, labels, and annotations. Once we have those principles behind us, we learn how Kubernetes uses labels to manage critical system functions such as managing Services, controlling Deployments, and workload scheduling in our cluster.

  • Running and Managing Pods – Dig into the fundamental workload element and learn how to run and manage Pods. In this module, we start the conversation off with understanding Pods and why we need this abstraction of a Pod around our container‑based application. Then we look at the interoperation between controllers like Deployments and Replica Sets and Pods themselves and learn why we need such a construct. We look at multi‑container Pods where we have multiple containers resident inside of a single Pod and why we would use something like that in our container‑based application deployments. And then we wrap up the conversation with managing Pod health with probes where we can give Kubernetes a little more information about the health of our application so that it can make good decisions on how to react in certain scenarios with regards to our applications that we’re deploying in Pods.

Check out the course at Pluralsight!

Availability Group StatusNewImage 3

Updated Pluralsight Course – Kubernetes Installation and Configuration Fundamentals

My updated course “Kubernetes Installation and Configuration Fundamentals” in now available on Pluralsight here! If you want to learn about the course, check out the trailer here or if you want to dive right in check it out here! 

This course targets IT professionals that design and maintain Kubernetes and container based solutions. The course can be used by both the IT pro learning new skills and the system administrator or developer preparing for using Kubernetes both on premises and in the Cloud.

Let’s take your Kubernetes administration and configuration skills to the next level and get you started now!

Key updates to the course include:

  • Using containerd as a container runtime

  • Building clusters with kubeadm and Cluster Configuration Files

  • Using kubectl command options to create workloads and build YAML manifest templates fast such as --dry-run

The modules of the course are:

  • Exploring the Kubernetes Architecture – In this module we introduce Kubernetes, deep dive into each component and its responsibility in a cluster. We also look at higher level abstractions such as Services, Controllers, and Deployments and how they can be used to ensure the desired state of an application deployed in Kubernetes

  • Installing and Configuring Kubernetes – In this module, we learn several ways to install a Kubernetes cluster. We start off simple with an installation using kubeadm using containerd. Then we head off to the Cloud, we look at the current state of the cloud managed Kubernetes services and installation methods for each of the major cloud providers (Google, AWS, and Azure) and perform a cluster deployment using Azure Kubernetes Service (AKS).

  • Working with Your Kubernetes Cluster – In this module, we learn how to interact with our cluster. We learn how to use and configure the primary tool for communicating with Kubernetes clusters, kubectl. We then learn how to perform a simple application Deployment both imperatively and declaratively in our Kubernetes cluster. And also learn how to use kubectl to generated YAML manifests for cluster resources quickly and correctly

Check out the course at Pluralsight!

Availability Group StatusNewImage 3

Installing and Configuring containerd as a Kubernetes Container Runtime

In this post, I’m going to show you how to install containerd as the container runtime in a Kubernetes cluster. I will also cover setting the cgroup driver for containerd to systemd which is the preferred cgroup driver for Kubernetes. In Kubernetes version 1.20 Docker was deprecated and will be removed after 1.22. containerd is a CRI compatible container runtime and is one of the supported options you have as a container runtime in Kubernetes in this post Docker Kubernetes world. I do want to call out that you can use containers created with Docker in containerd.

Configure required modules

First load two modules in the current running environment and configure them to load on boot

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

Configure required sysctl to persist across system reboots

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

Apply sysctl parameters without reboot to current running enviroment

sudo sysctl --system

Install containerd packages

sudo apt-get update 
sudo apt-get install -y containerd

Create a containerd configuration file

sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

Set the cgroup driver for runc to systemd

Set the cgroup driver for runc to systemd which is required for the kubelet.
For more information on this config file see the containerd configuration docs here and also here.

At the end of this section in /etc/containerd/config.toml

        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
        ...

Around line 86, add these two lines, indentation matters.

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

Restart containerd with the new configuration

sudo systemctl restart containerd

And that’s it, from here you can install and configure Kubernetes on top of this container runtime. In an upcoming post, I will bootstrap a cluster using containerd as the container runtime.

Persistent Server Name Metadata When Deploying SQL Server in Kubernetes

In this post, we will explore how a Pod name is generated, Pod Name lifecycle, how it’s used inside a Pod to set the system hostname, and how the system hostname is used by SQL Server to set its server name metadata.

Pod Naming in Deployments

When deploying SQL Server in Kubernetes using a Deployment, the Pod created by the Deployment Controller will have a name with a structure of <DeploymentName>-<PodTemplateHash>-<PodID> for example, mssql-deployment-8cbdc8ddd-9n7jh.

Let’s break that example Pod name down a bit more:

  • mssql-deployment – this is the name of the Deployment specified at metatdata.name. This is stable for the lifecycle of the deployment
  • 8cbdc8ddd – this is a hash of the Pod Template Spec in the Deployment object template.spec. Changing the Pod Template Spec changes this value and also triggers a rollout of the new Pod configuration.
  • 9n7jh – this is a random string assigned to help identify the Pod uniquely. This changes with the lifecycle of the Pod itself.

In a default Deployment configuration, the Pod’s name is used to system hostname inside the Pod. In a Deployment, when a Pod is deleted for whatever reason, Pod/Node failure, Pod administratively deleted, or an update to the Pod Template Spec triggering a rollout, the new Pod created will have a new Pod Name and a matching hostname inside the Pod. It is a new Pod after all. :) This can lead to an interesting scenario inside SQL Server since the Pod name can change. Let’s dig deeper…

Server name metadata inside SQL Server running in a Pod

To ensure SQL Server’s data has a lifecycle independent of the Pod’s lifecycle, in a basic configuration, a PersistentVolume is used for the instance directory /var/opt/mssql. The first time SQL Server starts up, it copies a set of system databases into the directory /var/opt/mssql. During the initial startup, the current hostname of the Pod is used to set SQL Server system metadata for the server name. Specifically @@SERVERNAME, SERVERPROPERTY('ServerName') and the Name column from sys.servers.

In Listing 1, is an example Deployment for SQL Server. In this configuration, the hostname inside the Pod will match the current Pod Name. But what happens when the Pod name changes when a Pod is deleted, and new Pod is created with a new name? Let’s walk through that together in the next section.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
spec:  
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
        app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      securityContext:
        fsGroup: 10001
      containers:
      - name: mssql
        image: 'mcr.microsoft.com/mssql/server:2019-CU8-ubuntu-18.04'
        ports:
        - containerPort: 1433
        env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: SA_PASSWORD 
        volumeMounts:
        - name: mssqldb
          mountPath: /var/opt/mssql
      volumes:
      - name: mssqldb
        persistentVolumeClaim:
          claimName: pvc-nfs-instance

Listing 1 – Example SQL Server Manifest using a Deployment Controller

Examining Server Name Metadata When Deploying SQL Server in a Deployment

Initial Deployment

When the Deployment is created, a Pod is created. In the output below, you can see the name of the Pod is mssql-deployment-bb44b7bf7-nzkmt, and the hostname set inside the Pod is the same, mssql-deployment-bb44b7bf7-nzkmt

kubectl get pods 
NAME                               READY   STATUS    RESTARTS   AGE
mssql-deployment-bb44b7bf7-nzkmt   1/1     Running   0          7s

kubectl exec -it mssql-deployment-bb44b7bf7-nzkmt -- /bin/hostname
mssql-deployment-bb44b7bf7-nzkmt

Check Server Name Metadata

Since this is the initial deployment of this SQL Server instance, system databases are copied into /var/opt/mssql, and the server name metadata is set. Let’s query SQL Server for @@SERVERNAME, SERVERPROPERTY('ServerName') and the Name column from sys.servers. In the output below you can see all three values match.

sqlcmd -S $SERVICEIP,$PORT -U sa -Q "SELECT @@SERVERNAME AS SERVERNAME, SERVERPROPERTY('ServerName') AS SERVERPROPERTY, name FROM sys.servers" -P $PASSWORD -W
SERVERNAME                          SERVERPROPERTY                   name
----------                          --------------                   ----
mssql-deployment-bb44b7bf7-nzkmt    mssql-deployment-bb44b7bf7-nzkmt mssql-deployment-bb44b7bf7-nzkmt

Delete the Currently Running Pod

Next, let’s delete a Pod and what happens to the Pod’s name, the Pod’s hostname, and the SQL Server server name metadata.

kubectl delete pod mssql-deployment-bb44b7bf7-nzkmt
pod "mssql-deployment-bb44b7bf7-nzkmt" deleted

I’ve deleted the Pod, and since this is controller by a Deployment controller, it immediately creates a new Pod in its place. This Pod gets a new name. The existing databases and configuration are persisted in the attached PersistentVolume at /var/opt/mssql. These databases are all brought online. In this output below, you can see the new Pod name and hostname are both mssql-deployment-bb44b7bf7-6gm6v.

kubectl get pods 
NAME                               READY   STATUS    RESTARTS   AGE
mssql-deployment-bb44b7bf7-6gm6v   1/1     Running   0          20s

kubectl exec -it mssql-deployment-bb44b7bf7-6gm6v -- hostname
mssql-deployment-bb44b7bf7-6gm6v

What’s in a name?

Now let’s query the server name metadata again. In the output below, you can see there are some inconsistencies. We saw above that Pod has a new name and hostname (mssql-deployment-bb44b7bf7-6gm6v), but this change isn’t updating all the server name metadata inside our Instance. The only place it is updated is SERVERPROPERTY('ServerName') the other values still have the initial Pod Name mssql-deployment-bb44b7bf7-nzkmt.

sqlcmd -S $SERVICEIP,$PORT -U sa -Q "SELECT @@SERVERNAME AS SERVERNAME, SERVERPROPERTY('ServerName') AS SERVERPROPERTY, name FROM sys.servers" -P $PASSWORD -W
SERVERNAME                          SERVERPROPERTY                   name
----------                          --------------                   ----
mssql-deployment-bb44b7bf7-nzkmt mssql-deployment-bb44b7bf7-6gm6v mssql-deployment-bb44b7bf7-nzkmt

Setting a Pod’s Hostname

So what do we do about this? Having instability in the server name metadata can break Replication, mess up our server monitoring systems, and even break code. To get the Pod’s hostname to a persistent value, you need to set the template.pod.spec.hostname field in the Deployment. This sets the system hostname inside the Pod to this value.

In the code below you, can see I’ve set the template.pod.spec.hostname to sql01. On the initial deployment of a SQL Instance, this is the value that is stored in the Instance server name metadata.

If you already have a SQL Server up and running in Kubernetes and did not set the template.pod.spec.hostname value, the server name metadata will need to be updated using standard SQL Server methods with sp_dropserver and sp_addserver.

But for demonstration purposes, I’m going to start over as if this is an initial deployment. And deploy the manifest in Listing 2 into my cluster.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
spec:  
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
        app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      securityContext:
        fsGroup: 10001
      hostname:
        sql01
      containers:
      - name: mssql
        image: 'mcr.microsoft.com/mssql/server:2019-CU8-ubuntu-18.04'
        ports:
        - containerPort: 1433
        env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: SA_PASSWORD 
        volumeMounts:
        - name: mssqldb
          mountPath: /var/opt/mssql
      volumes:
      - name: mssqldb
        persistentVolumeClaim:
          claimName: pvc-nfs-instance

Listing 2 – Example SQL Server Manifest using a Deployment Controller, setting the Pod’s hostname

In the output, below the Pod Name is mssql-deployment-8cbdc8ddd-nv8j4, but inside the Pod, the hostname is sql01, and now all three values for our server name metadata match. If this Pod is deleted, the Pod gets a new name, the hostname inside the Pod will still be sql01, and the Pod server name metadata will still be set to sql01.

kubectl get pods 
NAME                               READY   STATUS    RESTARTS   AGE
mssql-deployment-8cbdc8ddd-nv8j4   1/1     Running   0          43s

kubectl exec -it mssql-deployment-8cbdc8ddd-nv8j4  -- hostname
sql01

sqlcmd -S $SERVICEIP,$PORT -U sa -Q "SELECT @@SERVERNAME AS SERVERNAME, SERVERPROPERTY('ServerName') AS SERVERPROPERTY, name FROM sys.servers" -P $PASSWORD -W
SERVERNAME  SERVERPROPERTY name
----------  -------------- ----
sql01       sql01           sql01

Setting the hostname in the Pod Template Spec gives you the ability to persist the hostname and thus the server name metadata inside SQL Server. This is crucial for services and code that depend on a static hostname. A StatefulSet is a Controller in Kubernetes that does give you persistent, stable naming independent of the lifecycle of a Pod. I will explore those in an upcoming blog post.

New Pluralsight Course – Configuring and Managing Kubernetes Security

My new course “Configuring and Managing Kubernetes Security” is now available on Pluralsight here! Check out the trailer here or if you want to dive right in head over to Pluralsight!
 
This course will teach you to configure and manage security in Kubernetes clusters.  

This course targets IT professionals that design and maintain Kubernetes and container-based solutions. The course can be used by both the IT pro learning new skills and the system administrator or developer preparing for using Kubernetes both on-premises and in the Cloud. 

This course is part of my Learning Path covering the content needed to prepare for the Certified Kubernetes Administrator exam.

Let’s take your Kubernetes administration and configuration skills to the next level and get you started now!

The modules of the course are:

  • Kubernetes Security Fundamentals – First, you’ll explore Kubernetes security fundamentals, learning how authentication and authorization work to control access to the Kubernetes API.
  • Managing Certificates and kubeconfig Files – Next, you’ll learn how certificates are used in Kubernetes and how to create and manage certificates in your cluster. Then, you’ll learn how to create and manage kubeconfig files for accessing clusters and then configure cluster access for a new user.
  • Managing Role Based Access Controls – In the last module, you’ll learn how to control access to the Kubernetes API with role based access controls.

When you’re finished with this course you will have the skills needed to operate and manage security in Kubernetes clusters.

NewImage

Check out the course at Pluralsight!

New Pluralsight Course – Maintaining, Monitoring and Troubleshooting Kubernetes

My new course “Maintaining, Monitoring, and Troubleshooting Kubernetes” is now available on Pluralsight here! Check out the trailer here or if you want to dive right in head over to Pluralsight!
 
This course will teach you to maintain, monitor, and troubleshoot production Kubernetes clusters.  

This course targets IT professionals that design and maintain Kubernetes and container-based solutions. The course can be used by both the IT pro learning new skills and the system administrator or developer preparing for using Kubernetes both on-premises and in the Cloud. 

This course is part of my Learning Path covering the content needed to prepare for the Certified Kubernetes Administrator exam.

Let’s take your Kubernetes administration and configuration skills to the next level and get you started now!

The modules of the course are:

  • Maintaining Kubernetes Clusters – In this module you will learn core Kubernetes cluster maintenance tasks. We will start off with a closer look at what etcd is, the services it provides, and learn its backup and restore operations. Next, you will then learn the cluster upgrade process, enabling you to take advantage of new Kubernetes features. Then finally, you will learn how to facilitate Worker Node maintenance such as operating system upgrades with draining and cordoning.
  • Logging and Monitoring in Kubernetes Clusters – Monitoring and logging enable you to understand what’s happening inside your Kubernetes cluster and can tell you how things are performing and when things go wrong. In this module we will look at the Kubernetes logging architecture, learning where logs are stored for the Control Plane, Nodes, and Pods and how to access and review those logs. Then next, we’ll dive into how to monitor performance in your cluster with the Kubernetes Metrics Server and access performance data for Nodes and Pods running in your cluster.
  • Troubleshooting Kubernetes – It is inevitable, something will go wrong in your cluster. In this module, you will learn the tools and techniques needed to troubleshoot your Kubernetes cluster. We will start by introducing common troubleshooting methodologies and pain points in Kubernetes. Then you will learn how to debug and fix issues with your cluster, focusing on the control plane and worker nodes.

NewImage

Check out the course at Pluralsight!

New Pluralsight Course – Configuring and Managing Kubernetes Networking, Services, and Ingress

My new course “Configuring and Managing Kubernetes Networking, Services, and Ingress” is now available on Pluralsight here! Check out the trailer here or if you want to dive right in go here!
 
In this course you will learn Kubernetes cluster networking fundamentals and configuring and accessing applications in a Kubernetes Cluster with Services and Ingress.  

This course targets IT professionals that design and maintain Kubernetes and container-based solutions. The course can be used by both the IT pro learning new skills and the system administrator or developer preparing for using Kubernetes both on-premises and in the Cloud. 

Let’s take your Kubernetes administration and configuration skills to the next level and get you started now!

The modules of the course are:

  • Kubernetes Networking Fundamentals – In this module, you will learn Kubernetes networking fundamentals. We will start with the Kubernetes networking model and the motivation behind it, providing developers consistent and robust networking. You will learn cluster network topology, Pod networking internals and how CNI and network plugins implement the Kubernetes network model. Finally, we will learn how DNS is integrated into our cluster and how to configure the DNS Server and Pod DNS clients.
  • Configuring and Managing Application Access with Services Services are the core abstraction to access applications deployed in Kubernetes. In this module, you will learn the motivation for Services and how Services work. You will learn the types of Services available and when to choose which type for your application. We’ll dive deep and look at how Services are implemented in the cluster. You will then learn the key concepts of Service Discovery in a cluster, enabling applications you deploy to work together seamlessly. 
  • Configuring and Managing Application Access with Ingress – In this demo-heavy module you will learn how to expose applications outside of a Kubernetes cluster using Ingress. Starting with the core constructs Ingress and Ingress Controllers. You will learn how traffic flows from outside your cluster through the Ingress controller and to your Pod-based applications. We will learn how to define rules to access applications in several scenarios including single and multi-service access, name-based virtual hosts, and securing access to applications with TLS.

NewImage

Check out the course at Pluralsight!

Speaking at Data Grillen 2020

I’m proud to announce that I will be speaking at Data Grillen 2020 the conference runs from 28 May 2020 through 29 May 2020.

This is an incredible event packed with fantastic content, speakers, bratwurst and Beer! 

Check out the amazing schedule (and when I say check out the amazing schedule, I really mean it. Some of the world’s best Data Platform speakers are going to be there)

On Thursday, May 28th at 15:00 – I’m presenting “Containers –  Day 2” in the Handschuh room.

Here’s the abstract

You’ve been working with containers in development for a while, benefiting from the ease and speed of the deployments. Now it’s time to extend your container-based data platform’s capabilities for your production scenarios.

In this session, we’ll look at how to build custom containers, enabling you to craft a container image for your production system’s needs. We’ll also dive deeper into operationalizing your container-based data platform and learn how to provision advanced disk topologies, seed larger databases, implement resource control and understand performance concepts.

By the end of this session, you will learn what it takes to build containers and make them production ready for your environment.

My good friend, and container expert, Andrew Pruski (@dbafromthecold) will be presenting “SQL Server and Kubernetes” in the same room just before me at 13:30, be sure to come to both sessions for a deep dive into running SQL Server in Containers and Kubernetes.

Prost! 

Speaking at PowerShell Summit 2020!

I’m proud to announce that I will be speaking at PowerShell + DevOps Global Summit 2020 the conference runs from April 27th through April 30. This is an incredible event packed with fantastic content and speakers. Check out the amazing schedule! All the data you need on going is in this excellent brochure right here!

This year I have two sessions!

On Wednesday, April 29th at 09:00AM – I’m presenting “Inside Kubernetes – An Architectural Deep Dive”

Here’s the abstract

In this session we will introduce Kubernetes, we’ll deep dive into cluster architecture and higher-level abstractions such as Services, Controllers, and Deployments and how they can be used to ensure the desired state of an application deployed in Kubernetes. In this session we will introduce Kubernetes, we’ll deep dive into each component and its responsibility in a cluster. We will also look at and demonstrate higher-level abstractions such as Services, Controllers, Deployments and Jobs and how they can be used to ensure the desired state of an application deployed in Kubernetes. By the end of this session, you will understand what’s needed to put your applications in production in a Kubernetes cluster

Session Objectives

  • Understand Kubernetes cluster architecture
  • Understand Services, Controllers, and Deployments
  • Designing Production-Ready Kubernetes Clusters
  • Learn to run PowerShell in Kubernetes Jobs.

I look forward to seeing you there.