# Deploy postgresql on k8s ## 部屬 postgres * sles15-sp5 安裝 postgresql 套件 ``` $ sudo zypper in postgresql $ psql --version psql (PostgreSQL) 15.3 ``` * postgresql yaml 使用 hostpath 儲存 ``` apiVersion: v1 kind: Service metadata: name: postgres labels: app: postgres spec: ports: - port: 5432 selector: app: postgres --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres labels: app: postgres spec: selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: restartPolicy: Always containers: - image: postgres imagePullPolicy: IfNotPresent name: postgres ports: - containerPort: 5432 name: postgres env: - name: POSTGRES_DB value: postgres - name: POSTGRES_USER value: postgres - name: POSTGRES_PASSWORD value: postgres123 volumeMounts: - name: postgresql-volume mountPath: /var/lib/postgresql/data volumes: - name: postgresql-volume hostPath: path: /opt/postgresql ``` ### 除錯 * 如果部屬 postgresql 遇到 `Bus error (core dumped)` 錯誤訊息可能是因為 kernal 參數造成的。 ``` $ kubectl logs postgres-564dd6ff8d-l5r5p ...... selecting default max_connections ... 20 selecting default shared_buffers ... 400kB selecting default time zone ... Etc/UTC creating configuration files ... ok Bus error (core dumped) child process exited with exit code 135 initdb: removing contents of data directory "/var/lib/postgresql/data" running bootstrap script ... ``` * 需將 `vm.nr_hugepages` 參數設為 0 ``` $ sudo sysctl -a | grep nr_hugepages vm.nr_hugepages = 183 vm.nr_hugepages_mempolicy = 183 # 此設定為立即套用,但重開機會消失 $ sudo sysctl -w vm.nr_hugepages=0 vm.nr_hugepages = 0 $ sudo sysctl -a | grep nr_hugepages vm.nr_hugepages = 0 vm.nr_hugepages_mempolicy = 0 ``` ### 參考資料 https://stackoverflow.com/questions/67941955/kubernetes-postgres-bus-error-core-dumped ## postgresql 語法 * 指定進入 postgres database ``` # 密碼是 postgres123 $ psql -h 10.43.138.145 -p 5432 -U postgres --password Password: ``` * 建立 database ``` postgres=# CREATE DATABASE dbname; ``` * 查看目前有的 database ``` postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges -----------+----------+----------+------------+------------+------------+-----------------+----------------------- dbname | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres + | | | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | | libc | =c/postgres + | | | | | | | postgres=CTc/postgres (4 rows) ``` * 建 customer 資料表 ``` postgres=# CREATE TABLE customer ( ID int NOT NULL, NAME varchar(100) NOT NULL, AGE int, ADDRESS varchar(255), SALARY DECIMAL(10,2), PRIMARY KEY (ID) ); ``` * 新增 7 筆資料 ``` postgres=# INSERT INTO customer VALUES (1,'Ramesh',32,'Ahmedabad','2000.00'), (2,'Khilan',25,'Delhi','1500.00'), (3,'kaushik',23,'kota','2000.00'), (4,'Chaitali',25,'Mumbai','6500.00'), (5,'Hardik',27,'Bhopal','8500.00'), (6,'Komal',22,'MP','4500.00'), (7,'Muffy',24,'Indore','10000.00'); ``` * 顯示 customer 的所有資料 ``` postgres=# select * from customer; id | name | age | address | salary ----+----------+-----+-----------+---------- 1 | Ramesh | 32 | Ahmedabad | 2000.00 2 | Khilan | 25 | Delhi | 1500.00 3 | kaushik | 23 | kota | 2000.00 4 | Chaitali | 25 | Mumbai | 6500.00 5 | Hardik | 27 | Bhopal | 8500.00 6 | Komal | 22 | MP | 4500.00 7 | Muffy | 24 | Indore | 10000.00 (7 rows) ```