В этом блоге мы рассмотрим процесс создания развертывания PostgreSQL в Docker for Desktop и предоставления его через переадресацию портов с помощью kubectl.

Это будет удобно для локальной игры с PostgreSQL во время обучения, работы и даже локальной разработки приложения, работающего с базами данных!

Мы будем использовать Persistent Volumes (PV) и Persistent Volume Claims (PVC) для обеспечения постоянства данных и ConfigMaps для управления учетными данными для нашего развертывания PostgreSQL.

Давайте погрузимся!

Предпосылки

Прежде чем мы начнем, убедитесь, что на вашем локальном компьютере установлены и настроены следующие инструменты:

  1. Docker для рабочего стола: Docker позволяет нам запускать контейнеры на нашем локальном компьютере.
  2. kubectl: инструмент командной строки Kubernetes для управления кластерами Kubernetes.
  3. Клиент PostgreSQL: для взаимодействия с базой данных PostgreSQL с локального терминала.

Шаг 1. Настройте Docker для рабочего стола

Убедитесь, что Docker for Desktop установлен и запущен на вашем локальном компьютере. Вы можете скачать его с официального сайта Docker и следовать инструкциям по установке для вашей операционной системы.

Шаг 2. Настройте кластер Kubernetes в Docker для рабочего стола.

Docker for Desktop позволяет вам включить Kubernetes, перейдя в настройки и включив Kubernetes. После включения он настроит кластер Kubernetes с одним узлом на вашем локальном компьютере.

Шаг 3: Подготовьте файлы конфигурации PostgreSQL

Создайте каталог на локальном компьютере для хранения файлов конфигурации PostgreSQL. Внутри этого каталога создайте файл с именем postgres-configmap.yaml со следующим содержимым:

apiVersion: v1
kind: ConfigMap
metadata:
 name: postgres-config
data:
 POSTGRES_USER: myuser
 POSTGRES_PASSWORD: mypassword
 POSTGRES_DB: mydatabase

В этой ConfigMap мы настраиваем учетные данные PostgreSQL в качестве переменных среды. Замените myuser, mypassword и mydatabase нужными учетными данными. (В идеале для паролей следует использовать Secrets. Но поскольку мы создаем игровую площадку, можно использовать ConfigMaps).

Шаг 4. Создайте постоянный том и заявку на постоянный том

Нам нужно создать Persistent Volume (PV) и Persistent Volume Claim (PVC), чтобы обеспечить постоянство данных для нашего развертывания PostgreSQL. Создайте файл с именем postgres-pv.yaml со следующим содержимым:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: postgres-pv
spec:
 capacity:
 storage: 2Gi
 accessModes:
   - ReadWriteMany
 hostPath:
   path: "/data/postgres"

Этот файл YAML определяет постоянный том объемом 2 ГБ, используя hostPath в качестве типа хранилища. Он будет смонтирован в контейнер по пути /data/postgres. Обратите внимание, что hostPath используется в демонстрационных целях; в производственной среде следует использовать решение для хранения от облачного провайдера.

Теперь создайте файл с именем postgres-pvc.yaml со следующим содержимым:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: postgres-pvc
spec:
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 2Gi

Этот файл YAML определяет Persistent Volume Claim с запросом на 2 ГБ хранилища.

Примените эти конфигурации с помощью kubectl:

kubectl apply -f postgres-pv.yaml
kubectl apply -f postgres-pvc.yaml

Шаг 5. Разверните PostgreSQL с ConfigMap и PVC

Теперь пришло время создать развертывание PostgreSQL. Создайте файл с именем postgres-deployment.yaml со следующим содержимым:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:latest
          envFrom:
            - configMapRef:
                name: postgres-config
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-pv-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-pv-storage
          persistentVolumeClaim:
            claimName: postgres-pvc

Этот файл YAML определяет развертывание PostgreSQL с одной репликой с использованием последнего официального образа PostgreSQL Docker. Он монтирует ConfigMap для учетных данных и PVC для хранения данных.

Примените развертывание с помощью kubectl:

kubectl apply -f postgres-deployment.yaml

Шаг 6: Предоставьте PostgreSQL через переадресацию портов

Чтобы получить доступ к развертыванию PostgreSQL с вашего локального терминала, нам нужно открыть его с помощью переадресации портов. Выполните следующую команду:

kubectl port-forward deployment/postgres-deployment 5432:5432

Эта команда настраивает переадресацию портов с порта 5432 вашего локального компьютера на порт 5432 контейнера PostgreSQL.

Шаг 7. Подключитесь к PostgreSQL из локального терминала.

Наконец, давайте подключимся к базе данных PostgreSQL с вашего локального терминала. Используйте установленный ранее клиент PostgreSQL и выполните следующую команду:

psql -h localhost -p 5432 -U myuser -d mydatabase

Вам будет предложено ввести пароль, указанный в поле ConfigMap. После аутентификации вы можете взаимодействовать с базой данных PostgreSQL как обычно.

Вы также можете использовать те же данные БД в своей программе для подключения к PostgreSQL через клиент. Например, так это будет выглядеть в программе Go

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/lib/pq"
)

const (
    host     = "localhost"
    port     = 5432
    user     = "myuser"
    password = "mypassword"
    dbname   = "mydatabase"
)

func main() {
    // Create the connection string
    connStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)

    // Connect to the PostgreSQL database
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        log.Fatal("Error connecting to the database:", err)
    }
    defer db.Close()

    // Test the connection
    err = db.Ping()
    if err != nil {
        log.Fatal("Error pinging the database:", err)
    }
    fmt.Println("Connected to the database!")

    // Perform your database operations here...
}

Заключение

Поздравляем! Вы успешно настроили развертывание PostgreSQL в Docker for Desktop с помощью Kubernetes, обеспечив постоянство данных с помощью Persistent Volumes и Claims и безопасно управляя учетными данными с помощью ConfigMaps. Предоставляя развертывание через переадресацию портов, вы можете получить доступ к базе данных PostgreSQL с вашего локального терминала.

Эта установка обеспечивает удобную среду для разработки и тестирования без необходимости использования выделенного удаленного сервера.

Удачного программирования!

С уважением и уважением,
Самарт Деягонд