В этом блоге мы рассмотрим процесс создания развертывания PostgreSQL в Docker for Desktop и предоставления его через переадресацию портов с помощью kubectl
.
Это будет удобно для локальной игры с PostgreSQL во время обучения, работы и даже локальной разработки приложения, работающего с базами данных!
Мы будем использовать Persistent Volumes
(PV) и Persistent Volume Claims
(PVC) для обеспечения постоянства данных и ConfigMaps
для управления учетными данными для нашего развертывания PostgreSQL.
Давайте погрузимся!
Предпосылки
Прежде чем мы начнем, убедитесь, что на вашем локальном компьютере установлены и настроены следующие инструменты:
- Docker для рабочего стола: Docker позволяет нам запускать контейнеры на нашем локальном компьютере.
- kubectl: инструмент командной строки Kubernetes для управления кластерами Kubernetes.
- Клиент 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 с вашего локального терминала.
Эта установка обеспечивает удобную среду для разработки и тестирования без необходимости использования выделенного удаленного сервера.
Удачного программирования!
С уважением и уважением,
Самарт Деягонд