{"id":12308,"date":"2019-03-13T07:08:23","date_gmt":"2019-03-13T06:08:23","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/"},"modified":"2019-03-13T07:08:23","modified_gmt":"2019-03-13T06:08:23","slug":"upgrading-sql-server-pods-on-k8s-and-helm-charts","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/","title":{"rendered":"Upgrading SQL Server pods on K8s and helm charts"},"content":{"rendered":"<p>It has been while since my last blog. Today it is about continuing with helm charts and how to upgrade \/ downgrade SQL Server containers to a specific cumulative update. My first write-up in my to-do list.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-30215\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\" alt=\"blog 149 - 0 - banner\" width=\"766\" height=\"236\" \/><\/a><\/p>\n<p>Last year, I wrote an introduction of <a href=\"https:\/\/www.dbi-services.com\/blog\/introducing-sql-server-on-kubernetes\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQL Server containers on K8s<\/a>. I remembered to face some issues when testing upgrade scenarios (probably a lack of knowledge). Since then, I have discovered helm charts and I use them intensively with my environments and they also provide upgrade \/ rollback capabilities.<\/p>\n<p>So, the question is how to upgrade an existing SQL Server container to a new cumulative update with a helm chart?<\/p>\n<p>First of all, during deployment you need to specify a strategy type. There are several strategy types and most of them address upgrade scenarios with stateless applications (ramped, blue\/green, canary and a\/b testing). Unfortunately, with stateful applications like SGBDRs the story is not the same because persistent storage cannot be accessed by several at time. In this case K8s must first stop and remove the current pod and then spin up a new pod with the new version. \u201crecreate\u201d strategy type is designed to carry out this task and to address SQL Server pod upgrade scenarios.<\/p>\n<p>My deployment file is as follow:<\/p>\n<pre class=\"brush: xml; gutter: true; first-line: 1\">apiVersion: apps\/v1beta2\nkind: Deployment\nmetadata:\n  name: {{ template \"mssql.fullname\" . }}\n  labels:\n    app: {{ template \"mssql.name\" . }}\n    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace \"+\" \"_\" }}\n    release: {{ .Release.Name }}\n    heritage: {{ .Release.Service }}\n{{- if .Values.deployment.annotations }}\n  annotations:\n{{ toYaml .Values.deployment.annotations | indent 4 }}\n{{- end }}\nspec:\n  replicas: {{ .Values.replicaCount }}\n  strategy:\n    type: Recreate\n  selector:\n    matchLabels:\n      app: {{ template \"mssql.name\" . }}\n      release: {{ .Release.Name }}\n  template:\n    metadata:\n      labels:\n        app: {{ template \"mssql.name\" . }}\n        release: {{ .Release.Name }}\n    spec:\n      containers:\n        - name: {{ .Chart.Name }}\n          image: \"{{ .Values.image.repository }}:{{ .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          env:\n            - name: ACCEPT_EULA\n              value: \"{{ .Values.acceptEula.value | upper }}\"\n            - name: MSSQL_PID\n              value: \"{{ .Values.edition.value }}\"\n            - name: MSSQL_SA_PASSWORD\n              valueFrom:\n               secretKeyRef:\n                 name: {{ template \"mssql.fullname\" . }}-sa-secret\n                 key: sapassword\n            - name: MSSQL_TCP_PORT\n              value: \"{{ .Values.service.port.value }}\"\n            - name: MSSQL_LCID\n              value: \"{{ .Values.lcid.value }}\"\n            - name: MSSQL_COLLATION\n              value: \"{{ .Values.collation.value }}\"\n            - name: MSSQL_ENABLE_HADR\n              value: \"{{ .Values.hadr.value }}\"\n            {{ if .Values.resources.limits.memory }}\n            - name: MSSQL_MEMORY_LIMIT_MB\n              valueFrom:\n                resourceFieldRef:\n                  resource: limits.memory\n                  divisor: 1Mi\n            {{ end }}\n          ports:\n            - name: mssql\n              containerPort: {{ .Values.service.port.value }}\n          volumeMounts:\n            - name: data\n              mountPath: \/var\/opt\/mssql\/data\n          livenessProbe:\n            tcpSocket:\n               port: mssql\n            initialDelaySeconds: {{ .Values.livenessprobe.initialDelaySeconds }}\n            periodSeconds: {{ .Values.livenessprobe.periodSeconds }}\n          readinessProbe:\n            tcpSocket:\n               port: mssql\n            initialDelaySeconds: {{ .Values.readinessprobe.initialDelaySeconds }}\n            periodSeconds: {{ .Values.readinessprobe.periodSeconds }}\n          resources:\n{{ toYaml .Values.resources | indent 12 }}\n    {{- if .Values.nodeSelector }}\n      nodeSelector:\n{{ toYaml .Values.nodeSelector | indent 8 }}\n    {{- end }}\n      volumes:\n      - name: data\n      {{- if .Values.persistence.enabled }}\n        persistentVolumeClaim:\n          {{- if .Values.persistence.existingDataClaim }}\n          claimName: {{ .Values.persistence.existingDataClaim }}\n          {{- else }}\n          claimName: {{ template \"mssql.fullname\" . }}-data\n          {{- end -}}\n      {{- else }}\n        emptyDir: {}\n      {{- end }}<\/pre>\n<p>&nbsp;<\/p>\n<p>My\u00a0default values (in values.yaml) are the following:<\/p>\n<pre class=\"brush: xml; gutter: true; first-line: 1\"># General parameters\nacceptEula: \n  value: \"Y\"\nedition: \n  value: \"Developer\"\ncollation: \n  value: SQL_Latin1_General_CP1_CI_AS\nlcid: \n  value: 1033\nhadr: \n    value: 0\n# User parameters\nsapassword: \n  value: Password1\n# Image parameters\nimage:\n  repository: mcr.microsoft.com\/mssql\/server\n  tag: 2017-CU12-ubuntu\n  pullPolicy: IfNotPresent\n# Service parameters\nservice:\n  type: \n    value: LoadBalancer\n  port: \n    value: 1460\n  annotations: {}\ndeployment:\n  annotations: {}\n# Volumes &amp; persistence parameters\npersistence:\n  enabled: true\n  storageClass: \"\"\n  dataAccessMode: ReadWriteOnce\n  dataSize: 5Gi\n# Probe parameters\nlivenessprobe:\n  initialDelaySeconds: 20\n  periodSeconds: 15\nreadinessprobe:\n  initialDelaySeconds: 20\n  periodSeconds: 15\n# Resourcep parameters\nresources:\n  limits:\n  #  cpu: 100m\n    memory: 3Gi\n  # requests:\n  #  cpu: 100m\n  #  memory: 2Gi\nnodeSelector: {}\n\n<\/pre>\n<p>You may notice I will pull a SQL Server image from the MCR with the <em>2017-CU12-ubuntu<\/em> tag.<\/p>\n<p>Let\u2019s now install SQL2017container\u00a0release:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm install --name sql2017container .<\/pre>\n<p>&nbsp;<\/p>\n<p>This command will install a helm release which includes among others\u00a0a deployment, a replicaset with\u00a0one pod\u00a0(my SQL Server pod), a secret that contains the sa password, a persistence volume claim to persistent my database files (mapped to the \/var\/opt\/mssql\/data path inside the pod) and the service to expose the pod on port 1460 TCP.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm status sql2017container\nLAST DEPLOYED: Tue Mar 12 20:36:12 2019\nNAMESPACE: ci\nSTATUS: DEPLOYED\n\nRESOURCES:\n==&gt; v1\/Secret\nNAME                                        TYPE    DATA  AGE\nsql2017container-dbi-mssql-linux-sa-secret  Opaque  1     7m7s\n\n==&gt; v1\/PersistentVolumeClaim\nNAME                                   STATUS  VOLUME                                    CAPACITY  ACCESS MODES  STORAGECLASS  AGE\nsql2017container-dbi-mssql-linux-data  Bound   pvc-18304483-44fe-11e9-a668-ca78ebdc2a19  5Gi       RWO           default       7m7s\n\n==&gt; v1\/Service\nNAME                              TYPE          CLUSTER-IP    EXTERNAL-IP     PORT(S)         AGE\nsql2017container-dbi-mssql-linux  LoadBalancer  10.0.104.244  xx.xx.xx.xx  1460:31502\/TCP  7m6s\n\n==&gt; v1beta2\/Deployment\nNAME                              DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE\nsql2017container-dbi-mssql-linux  1        1        1           1          7m6s\n\n==&gt; v1\/Pod(related)\nNAME                                               READY  STATUS   RESTARTS  AGE\nsql2017container-dbi-mssql-linux-76b4f7c8f5-mmhqt  1\/1    Running  0         7m6s<\/pre>\n<p>&nbsp;<\/p>\n<p>My SQL Server pod is running with the expected version and CU:<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">master&gt; select @@version AS [version];\n+-----------+\n| version   |\n|-----------|\n| Microsoft SQL Server 2017 (RTM-CU12) (KB4464082) - 14.0.3045.24 (X64)\n        Oct 18 2018 23:11:05\n        Copyright (C) 2017 Microsoft Corporation\n        Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)           |\n+-----------+\n(1 row affected)\nTime: 0.354s<\/pre>\n<p>&nbsp;<\/p>\n<p>It\u2019s time now to upgrade my pod with the latest CU13 (at the moment of this write-up). With helm charts this task is pretty simple. I will just upgrade my release with the new desired tag as follows:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm upgrade sql2017container . --set=image.tag=2017-CU13-ubuntu\nRelease \"sql2017container\" has been upgraded. Happy Helming!<\/pre>\n<p>&nbsp;<\/p>\n<p>Let\u2019s dig further into deployment stuff:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ kubectl describe deployment sql2017container-dbi-mssql-linux<\/pre>\n<p>&nbsp;<\/p>\n<p>The interesting part is below:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">Events:\n  Type    Reason             Age   From                   Message\n  ----    ------             ----  ----                   -------\n  Normal  ScalingReplicaSet  18m   deployment-controller  Scaled up replica set sql2017container-dbi-mssql-linux-76b4f7c8f5 to 1\n  Normal  ScalingReplicaSet  1m    deployment-controller  Scaled down replica set sql2017container-dbi-mssql-linux-76b4f7c8f5 to 0\n  Normal  ScalingReplicaSet  1m    deployment-controller  Scaled up replica set sql2017container-dbi-mssql-linux-799ff7979b to 1<\/pre>\n<p>&nbsp;<\/p>\n<p>Referring to the deployment strategy, the deployment controller has recreated a new ReplicaSet (and a new SQL Server pod) accordingly. A quick check from client tool confirms the instance has been upgraded correctly:<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">master&gt; select @@version AS [version];\n+-----------+\n| version   |\n|-----------|\n| Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64)\n        Nov 30 2018 12:57:58\n        Copyright (C) 2017 Microsoft Corporation\n        Developer Edition (64-bit) on Linux (Ubuntu 16.04.5 LTS)           |\n+-----------+\n(1 row affected)\nTime: 0.716s<\/pre>\n<p>&nbsp;<\/p>\n<p>Another interesting part is how SQL Server detects the new image and starts upgrading process. Let\u2019s dump the SQL Server log pod. I just put a sample of messages\u00a0from the pod log\u00a0to get a picture of scripts used during the upgrade.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ kubectl logs sql2017container-dbi-mssql-linux-799ff7979b-knqrm\n2019-03-12 19:54:59.11 spid22s     Service Broker manager has started.\n2019-03-12 19:54:59.44 spid6s      Database 'master' is upgrading script 'ProvisionAgentIdentity.sql' from level 234884069 to level 234884072.\n2019-03-12 19:54:59.45 spid6s      Database 'master' is upgrading script 'no_op.sql' from level 234884069 to level 234884072.\n2019-03-12 19:54:59.70 spid6s      Database 'master' is upgrading script 'no_op.sql' from level 234884069 to level 234884072.\n\u2026.\n2019-03-12 19:54:59.70 spid6s      -----------------------------------------\n2019-03-12 19:54:59.70 spid6s      Starting execution of dummy.sql\n2019-03-12 19:54:59.70 spid6s      -----------------------------------------\n\u2026\n2019-03-12 19:55:00.24 spid6s      Starting execution of PRE_MSDB.SQL\n2019-03-12 19:55:00.24 spid6s      ----------------------------------\n2019-03-12 19:55:00.70 spid6s      Setting database option COMPATIBILITY_LEVEL to 100 for database 'msdb'.\n2019-03-12 19:55:00.90 spid6s      -----------------------------------------\n2019-03-12 19:55:00.90 spid6s      Starting execution of PRE_SQLAGENT100.SQL\n2019-03-12 19:55:00.90 spid6s      -----------------------------------------\n\u2026\n2019-03-12 19:55:12.09 spid6s      ----------------------------------\n2019-03-12 19:55:12.09 spid6s      Starting execution of MSDB.SQL\n2019-03-12 19:55:12.09 spid6s      ----------------------------------\n\u2026\n2019-03-12 19:55:12.86 spid6s      -----------------------------------------\n2019-03-12 19:55:12.86 spid6s      Starting execution of MSDB_VERSIONING.SQL\n2019-03-12 19:55:12.86 spid6s      -----------------------------------------\n\u2026\n2019-03-12 19:55:51.68 spid6s      -----------------------------------------\n2019-03-12 19:55:51.68 spid6s      Starting execution of EXTENSIBILITY.SQL\n2019-03-12 19:55:51.68 spid6s      -----------------------------------------\n\u2026\n2019-03-12 19:56:01.51 spid6s      --------------------------------\n2019-03-12 19:56:01.51 spid6s      Starting execution of Alwayson.SQL\n2019-03-12 19:56:01.51 spid6s      --------------------------------\n\u2026\n2019-03-12 19:56:29.17 spid6s      ------------------------------------\n2019-03-12 19:56:29.17 spid6s      Moving 2005 SSIS Data to 2008 tables\n2019-03-12 19:56:29.17 spid6s      ------------------------------------\n\u2026\n2019-03-12 19:56:32.52 spid6s      ------------------------------------------------------\n2019-03-12 19:56:32.52 spid6s      Starting execution of UPGRADE_UCP_CMDW_DISCOVERY.SQL\n2019-03-12 19:56:32.52 spid6s      ------------------------------------------------------\n\u2026\n2019-03-12 19:56:32.66 spid6s      ------------------------------------------------------\n2019-03-12 19:56:32.66 spid6s      Starting execution of SSIS_DISCOVERY.SQL\n2019-03-12 19:56:32.66 spid6s      ------------------------------------------------------\n\u2026\n2019-03-12 19:56:32.83 spid6s      ------------------------------------------------------\n2019-03-12 19:56:32.83 spid6s      Start provisioning of CEIPService Login\n2019-03-12 19:56:32.83 spid6s      ------------------------------------------------------\n\u2026<\/pre>\n<p>&nbsp;<\/p>\n<p>A set of scripts developed by the SQL Server team runs during the SQL Server pod startup and updates different parts of the SQL Server instance.<\/p>\n<p>Helm provides a command to view release history \u2026<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm history sql2017container\nREVISION        UPDATED                         STATUS          CHART                   DESCRIPTION\n1               Tue Mar 12 20:36:12 2019        SUPERSEDED      dbi-mssql-linux-1.0.0   Install complete\n2               Tue Mar 12 20:53:26 2019        DEPLOYED        dbi-mssql-linux-1.0.0   Upgrade complete<\/pre>\n<p>&nbsp;<\/p>\n<p>\u2026 and to rollback to previous release revision if anything goes wrong:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm rollback sql2017container 1<\/pre>\n<p>&nbsp;<\/p>\n<p>The same process applies here. The deployment controller will recreate a ReplicaSet and a downgraded SQL Server pod to the previous version.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ kubectl describe deployment sql2017container-dbi-mssql-linux\nEvents:\n  Type    Reason             Age               From                   Message\n  ----    ------             ----              ----                   -------\n  Normal  ScalingReplicaSet  31m               deployment-controller  Scaled down replica set sql2017container-dbi-mssql-linux-76b4f7c8f5 to 0\n  Normal  ScalingReplicaSet  31m               deployment-controller  Scaled up replica set sql2017container-dbi-mssql-linux-799ff7979b to 1\n  Normal  ScalingReplicaSet  6m                deployment-controller  Scaled down replica set sql2017container-dbi-mssql-linux-799ff7979b to 0\n  Normal  ScalingReplicaSet  6m (x2 over 49m)  deployment-controller  Scaled up replica set sql2017container-dbi-mssql-linux-76b4f7c8f5 to 1<\/pre>\n<p>&nbsp;<\/p>\n<p>Same set of TSQL scripts\u00a0seem to be\u00a0executed again during the SQL Server pod startup for downgrade purpose this time.<\/p>\n<p>The release rollback is logged in the release history:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">$ helm history sql2017container\nREVISION        UPDATED                         STATUS          CHART                   DESCRIPTION\n1               Tue Mar 12 20:36:12 2019        SUPERSEDED      dbi-mssql-linux-1.0.0   Install complete\n2               Tue Mar 12 20:53:26 2019        SUPERSEDED      dbi-mssql-linux-1.0.0   Upgrade complete\n3               Tue Mar 12 21:18:57 2019        DEPLOYED        dbi-mssql-linux-1.0.0   Rollback to 1<\/pre>\n<p>&nbsp;<\/p>\n<p>Rollback capabilities of helm charts (and implicitly of K8s) may be attractive but for database applications it will likely not fit with all upgrade scenarios. To be used sparingly \u2026 What\u2019s next? Taking a look at the upgrade scenarios with availability groups on K8s for sure \u2026 see you on a next write-up!<\/p>\n<p><span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It has been while since my last blog. Today it is about continuing with helm charts and how to upgrade \/ downgrade SQL Server containers to a specific cumulative update. My first write-up in my to-do list. Last year, I wrote an introduction of SQL Server containers on K8s. I remembered to face some issues [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":12174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,1320,1504,1522,99],"tags":[1523,1365,89,51],"type_dbi":[],"class_list":["post-12308","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","category-devops","category-docker","category-kubernetes","category-sql-server","tag-helm","tag-k8s","tag-kubernetes","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Upgrading SQL Server pods on K8s and helm charts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Upgrading SQL Server pods on K8s and helm charts\" \/>\n<meta property=\"og:description\" content=\"It has been while since my last blog. Today it is about continuing with helm charts and how to upgrade \/ downgrade SQL Server containers to a specific cumulative update. My first write-up in my to-do list. Last year, I wrote an introduction of SQL Server containers on K8s. I remembered to face some issues [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-13T06:08:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"766\" \/>\n\t<meta property=\"og:image:height\" content=\"236\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"Upgrading SQL Server pods on K8s and helm charts\",\"datePublished\":\"2019-03-13T06:08:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\"},\"wordCount\":623,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\",\"keywords\":[\"helm\",\"k8s\",\"kubernetes\",\"SQL Server\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"DevOps\",\"Docker\",\"Kubernetes\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\",\"name\":\"Upgrading SQL Server pods on K8s and helm charts\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\",\"datePublished\":\"2019-03-13T06:08:23+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg\",\"width\":766,\"height\":236},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upgrading SQL Server pods on K8s and helm charts\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Upgrading SQL Server pods on K8s and helm charts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/","og_locale":"en_US","og_type":"article","og_title":"Upgrading SQL Server pods on K8s and helm charts","og_description":"It has been while since my last blog. Today it is about continuing with helm charts and how to upgrade \/ downgrade SQL Server containers to a specific cumulative update. My first write-up in my to-do list. Last year, I wrote an introduction of SQL Server containers on K8s. I remembered to face some issues [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/","og_site_name":"dbi Blog","article_published_time":"2019-03-13T06:08:23+00:00","og_image":[{"width":766,"height":236,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"Upgrading SQL Server pods on K8s and helm charts","datePublished":"2019-03-13T06:08:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/"},"wordCount":623,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg","keywords":["helm","k8s","kubernetes","SQL Server"],"articleSection":["Database Administration &amp; Monitoring","DevOps","Docker","Kubernetes","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/","url":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/","name":"Upgrading SQL Server pods on K8s and helm charts","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg","datePublished":"2019-03-13T06:08:23+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-149-0-banner.jpg","width":766,"height":236},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/upgrading-sql-server-pods-on-k8s-and-helm-charts\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Upgrading SQL Server pods on K8s and helm charts"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=12308"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12308\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/12174"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=12308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=12308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=12308"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=12308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}