Speaking at PASS Summit 2019!

I’m very pleased to announce that I will be speaking at PASS Summit 2019!  This is my second time speaking at PASS Summit and I’m very excited to be doing so! What’s more, is I get to help blaze new ground with an emerging technology,** Kubernetes and how to run SQL Server in Kubernetes**!

My session is Inside Kubernetes – An Architectural Deep Dive if you’re a just getting started in the container space and want to learn how Kubernetes works and dive into how to deploy SQL Server in Kubernetes this is the session for you. I hope to see you there!

Updated: Getting Started with Installing Kubernetes

Let’s get you started on your Kubernetes journey with installing Kubernetes and creating a cluster in virtual machines.

Kubernetes is a distributed system, you will be creating a cluster which will have a master node that is in charge of all operations in your cluster. In this walkthrough we’ll create three workers which will run our applications. This cluster topology is, by no means, production ready. If you’re looking for production cluster builds check out Kubernetes documentation. [Here][1] and [here][2]. The primary components that need high availability in a Kubernetes cluster are the [API Server][3] which controls the state of the cluster and the [etcd][4] database which persists the state of the cluster. You can learn more about Kubernetes cluster components [here][5]. If you want to dive into Kubernetes more check out my Pluralsight Courses [here][6]! Where I have a dedicated course on [Installation and Configuration][7].

Memory Settings for Running SQL Server in Kubernetes

People often ask me what’s the number one thing to look out for when running SQL Server on Kubernetes…the answer is memory settings. In this post, we’re going to dig into why you need to configure resource limits in your SQL Server’s Pod Spec when running SQL Server workloads in Kubernetes. I’m running these demos in Azure Kubernetes Service (AKS), but these concepts apply to any SQL Server environment running in Kubernetes.

Restoring Backups from Azure Blob with dbatools

Recently I needed to write a PowerShell script that could build a backup set from a collection of backups stored in Azure Blob Storage without any backup history available from MSDB. And as with all things SQL Server and PowerShell related I went straight to dbatools.io to see if Restore-DbaDatabase was up to the task…and of course, it is…let’s talk about how I solved this challenge.

When restoring from Azure Blob, the main challenge you have is accessing the blobs and building a backup set. For this process, you’ll need access to the Storage Account via PowerShell and you’ll have to have define a Credential on your SQL Instance that has access to the Storage Account. Here’s the code I used to connect to my Storage Account in Azure.

Using kubectl logs to read the SQL Server Error Log in Kubernetes

When working with SQL Server running containers the Error Log is written to standard out. Kubernetes will expose that information to you via kubectl. Let’s check out how it works.

If we start up a Pod running SQL Server and grab the Pod name

kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
mssql-deployment-56d8dbb7b7-hrqwj   1/1     Running   0          22m

We can usefollow flag and that will continuously write the error log to your console, similar to using tail with the -f option. If you remove the follow flag it will write the current log to your console. This can be useful in debugging failed startups or in the case below, monitoring the status of a database restore. When finished you can use CTRL+C to break out and return back to your prompt.

New Pluralsight Course – Managing Kubernetes Controllers and Deployments

      My new course **“Managing Kubernetes Controllers and Deployments”** in now available on Pluralsight <a href="https://www.pluralsight.com/courses/managing-kubernetes-controllers-deployments">here</a>! Check out the trailer <a href="https://www.pluralsight.com/player?name=82f986e5-de18-4897-a461-f1215db691ae&mode=live&clip=0&course=managing-kubernetes-controllers-deployments&author=anthony-nocentino">here</a> or if you want to dive right in go <a href="https://www.pluralsight.com/courses/managing-kubernetes-controllers-deployments">here</a>! This course offers practical tips from my experiences managing Kubernetes Clusters and workloads for Centino Systems clients.

      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 <a href="https://www.pluralsight.com/courses/managing-kubernetes-controllers-deployments">now</a>!

      The modules of the course are:

    <ul>
      <li>
        **Using Controllers to Deploy Applications and Deployment Basics** – In this module we dive into what Controllers are and how they can be used to deploy applications in Kubernetes. We’ll introduce several core controller types and look at the fundamentals of using the `Deployment` Controller to deploy applications and take a deep dive into the Controller operations of `ReplicaSets`.
      </li>
      <li>
        **Maintaining Applications with Deployments** – In this demo-heavy module, we look closer at `Deployments` and learn how we can maintain our container based applications. We look at updating Deployments, controlling rollouts and using `u``pdateStrategy` and `readinessProbes` to ensure successful rollouts. We’ll also cover what to do when things go wrong and learn how to pause and rollback rollouts.
      </li>
      <li>
        **<a href="https://www.pluralsight.com/courses/managing-kubernetes-controllers-deployments">Deploying and Maintaining Applications with DaemonSets and Jobs</a>** – In this module, we introduce the `DaemonSet` controller and how it’s used to deploy applications to all Nodes or a subset of Nodes in our cluster, we’ll also cover `DaemonSet` operations such as updating and controlling rollouts. We wrap up the course with a look at how we can use `Jobs` and `CronJobs` to ensure work completes in our cluster.
      </li>
    </ul>

      <img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="/images/2019/01/Availability-Group-StatusNewImage-3.png" alt="NewImage" width="565" height="128" border="0" />

      <a href="https://www.pluralsight.com/courses/managing-kubernetes-controllers-deployments">Check out the course at Pluralsight!</a>

Workshop – Kubernetes Zero to Hero at SQL Saturday Denver!

Pre-conference Workshop at SQLSaturday Denver

I’m proud to announce that I will be be presenting an all day pre-conference workshop at SQL Saturday Denver on October 11th 2019! This one won’t let you down!

The workshop is **“Kubernetes Zero to Hero – Installation, Configuration, and Application Deployment” **

    <a href="https://www.eventbrite.com/e/kubernetes-zero-to-hero-installation-configuration-and-application-deployment-tickets-70529350185"><img loading="lazy" style="display: block; margin-left: auto; margin-right: auto;" title="NewImage.png" src="/images/2019/01/Availability-Group-StatusNewImage-1.png" alt="NewImage" width="129" height="126" border="0" /></a>

    **Here’s the abstract for the workshop**

  <blockquote>

      Modern application deployment needs to be fast and consistent to keep up with business objectives and Kubernetes is quickly becoming the standard for deploying container-based applications, fast. In this day-long session, we will start with an architectural overview of a Kubernetes cluster and how it manages application state. Then we will learn how to build a production-ready cluster. With our cluster up and running, we will learn how to interact with our cluster, common administrative tasks, then wrap up with how to deploy applications and SQL Server. At the end of the session, you will know how to set up a Kubernetes cluster, manage a cluster, deploy applications and databases, and how to keep everything up and running.

  </blockquote>

Session Objectives

Using strace inside a SQL Server Container

So, if you’ve been following my blog you know my love for internals. Well, I needed to find out exactly how something worked at the startup of a SQL Server process running inside a docker container and my primary tool for this is <a href="http://man7.org/linux/man-pages/man1/strace.1.html">strace</a>, well how do you run strace against processes running in a container? I hadn’t done this before and needed to figure this out…so let’s go through how I pulled this off.

Docker Image Tags are Case Sensitive

A quick post about pulling docker containers (this applies to docker run too)…when specifying the container image, the container image name and tag are case sensitive. We’re not going to discuss how much time troubleshooting it too me to figure this out…but let’s just say it’s more than I care to admit publicly.

In this code you can see I’m specifying the following image and tag server:2019-rc1-ubuntu (notice the lowercase rc in the tag)

Persisting SQL Server Data in Docker Containers – Part 3

In the first two posts in this series we discussed the need for data persistency in containers then we discussed where the data actually lives on our systems. Now let’s look at specifying the location of the data on the underlying file system of the base OS.

This is the third post in a three part series on Persisting SQL Server Data in Docker Containers. The first post introducing Docker Volumes is here. The second post on where Docker actually stores your data is here.