Published on

October 25, 2020

Постоянные метаданные имени сервера при развертывании SQL Server в Kubernetes

В этом блог-посте мы рассмотрим концепцию постоянных метаданных имени сервера при развертывании SQL Server в Kubernetes. Мы исследуем, как генерируется имя Pod, жизненный цикл имени Pod и как это влияет на метаданные имени сервера внутри SQL Server.

При развертывании SQL Server в Kubernetes с использованием развертывания (Deployment), Pod, созданный контроллером развертывания, будет иметь имя с определенной структурой. Например, имя может быть “mssql-deployment-8cbdc8ddd-9n7jh”. Разберем это примерное имя Pod:

  • “mssql-deployment” – Это имя развертывания, указанное в metadata.name. Оно остается неизменным на протяжении жизненного цикла развертывания.
  • “8cbdc8ddd” – Это хэш Pod Template Spec в шаблоне объекта Deployment template.spec. Изменение Pod Template Spec изменяет это значение и вызывает переключение на новую конфигурацию Pod.
  • “9n7jh” – Это случайная строка, назначенная для уникальной идентификации Pod. Она меняется вместе с жизненным циклом самого Pod.

В конфигурации развертывания по умолчанию имя Pod используется в качестве системного имени хоста внутри Pod. Однако, когда Pod удаляется или создается новый Pod с новым именем, это может привести к интересной ситуации внутри SQL Server, поскольку имя Pod может измениться.

Чтобы обеспечить независимый жизненный цикл данных SQL Server от жизненного цикла Pod, используется PersistentVolume для директории экземпляра “/var/opt/mssql”. Во время первоначального запуска текущее имя хоста Pod используется для установки системных метаданных SQL Server для имени сервера. Это включает @@SERVERNAME, SERVERPROPERTY(‘ServerName’) и столбец Name из sys.servers.

Однако, когда Pod удаляется и создается новый Pod с новым именем, метаданные имени сервера внутри SQL Server могут не обновляться, чтобы отразить новое имя Pod. Это может вызвать несоответствия и потенциальные проблемы с репликацией, системами мониторинга сервера и кодом.

Для решения этой проблемы вы можете установить поле template.pod.spec.hostname в развертывании, чтобы обеспечить постоянное имя хоста Pod. Это также обновит метаданные имени сервера внутри SQL Server. Если у вас уже есть работающий SQL Server в Kubernetes и вы не установили значение template.pod.spec.hostname, вам потребуется обновить метаданные имени сервера с помощью стандартных методов SQL Server с использованием sp_dropserver и sp_addserver.

Установив имя хоста в Pod Template Spec, вы можете обеспечить постоянное имя хоста и метаданные имени сервера внутри SQL Server. Это критически важно для служб и кода, которые зависят от статического имени хоста.

В заключение, при развертывании SQL Server в Kubernetes важно понимать, как генерируются имена Pod и как они влияют на метаданные имени сервера внутри SQL Server. Установив постоянное имя хоста в Pod Template Spec, вы можете обеспечить согласованные метаданные имени сервера и избежать потенциальных проблем с репликацией и системами мониторинга.

Следите за нашим следующим блог-постом, где мы рассмотрим StatefulSets в Kubernetes, которые обеспечивают постоянное и стабильное именование, независимое от жизненного цикла Pod.

Спасибо за чтение!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.