PgAdminにDB接続情報を環境設定的に構成する方法
あらかじめ接続情報を入れておきたいとか、構成管理したいとか、そういった状況。
設定方法はいくつかのサイトで解説が見られるが、バージョン依存で上手くいかないケースが散見される。
stackoverflow.com
最終的に上手くいったのは以下の方法となった。
stackoverflow.com
以下、Docker Compose を前提としたソースコード。
docker-compose.yaml
version: "3.9" services: postgres_db: image: postgres volumes: - ./postgres_db_data:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres ports: - "15432:5432" pgadmin: image: dpage/pgadmin4:7.1 restart: always environment: PGADMIN_DEFAULT_EMAIL: pgadmin@pgadmin.com PGADMIN_DEFAULT_PASSWORD: pgadmin ports: - "8080:80" volumes: - ./servers.json:/pgadmin4/servers.json - ./pgpass:/var/lib/pgadmin/pgpass depends_on: - "postgres_db"
ファイルマウントが重要なわけだが、pgpass については後述する相対パスで指定するのでたぶんどこに置いてもいける。
servers.json
{ "Servers": { "1": { "Name": "docker_postgres", "Group": "docker_postgres_group", "Host": "postgres_db", "Port": 5432, "MaintenanceDB": "postgres", "Username": "postgres", "PassFile": "../../pgpass", "SSLMode": "prefer" }, "2": { "Name": "docker_postgres_host", "Group": "docker_postgres_group", "Host": "host.docker.internal", "Port": 15432, "MaintenanceDB": "postgres", "Username": "postgres", "PassFile": "../../pgpass", "SSLMode": "prefer" } } }
"PassFile": "../../pgpass" が最重要ポイント。相対パスになっているっぽい。
pgpass
postgres_db:5432:postgres:postgres:postgres host.docker.internal:15432:postgres:postgres:postgres
パスワードは hostname:port:database:username:password の形式で書けば良い。
複数DBを1ファイルにも書ける。
微妙にハマるポイントが多く、予想に反して面倒であった。
Kubernetes リソースを Excel 表にするワンライナー
以下のようなワンライナーを実行する。
$ NAMESPACE=openshift-monitoring
$ echo -e "NAME\tKIND\tREPLICAS\tCONTAINER\tREQUEST MEMORY\tREQUEST CPU\tLIMIT MEMORY\tLIMIT CPU"; \
> oc get deployment,statefulset,daemonset -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.kind}{"\t"}{.spec.replicas}{"\t"}{range .spec.template.spec.containers[*]}{.name}{"\t"}{.resources.requests.memory}{"\t"}{.resources.requests.cpu}{"\t"}{.resources.limits.memory}{"\t"}{.resources.limits.cpu}{"\n\t\t\t"}{end}{"\n"}{end}' -n ${NAMESPACE} | sed '/^\t\t\t$/d'
実行結果。
$ NAMESPACE=openshift-monitoring $ echo -e "NAME\tKIND\tREPLICAS\tCONTAINER\tREQUEST MEMORY\tREQUEST CPU\tLIMIT MEMORY\tLIMIT CPU"; \ > oc get deployment,statefulset,daemonset -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.kind}{"\t"}{.spec.replicas}{"\t"}{range .spec.template.spec.containers[*]}{.name}{"\t"}{.resources.requests.memory}{"\t"}{.resources.requests.cpu}{"\t"}{.resources.limits.memory}{"\t"}{.resources.limits.cpu}{"\n\t\t\t"}{end}{"\n"}{end}' -n ${NAMESPACE} | sed '/^\t\t\t$/d' NAME KIND REPLICAS CONTAINER REQUEST MEMORY REQUEST CPU LIMIT MEMORY LIMIT CPU cluster-monitoring-operator Deployment 1 kube-rbac-proxy 20Mi 1m cluster-monitoring-operator 75Mi 10m grafana Deployment 1 grafana 64Mi 4m grafana-proxy 20Mi 1m kube-state-metrics Deployment 1 kube-state-metrics 80Mi 2m kube-rbac-proxy-main 15Mi 1m kube-rbac-proxy-self 15Mi 1m openshift-state-metrics Deployment 1 kube-rbac-proxy-main 20Mi 1m kube-rbac-proxy-self 20Mi 1m openshift-state-metrics 32Mi 1m prometheus-adapter Deployment 2 prometheus-adapter 40Mi 1m prometheus-operator Deployment 1 prometheus-operator 150Mi 5m kube-rbac-proxy 15Mi 1m telemeter-client Deployment 1 telemeter-client 40Mi 1m reload 10Mi 1m kube-rbac-proxy 20Mi 1m thanos-querier Deployment 2 thanos-query 12Mi 10m oauth-proxy 20Mi 1m kube-rbac-proxy 15Mi 1m prom-label-proxy 15Mi 1m kube-rbac-proxy-rules 15Mi 1m alertmanager-main StatefulSet 3 alertmanager 40Mi 4m config-reloader 10Mi 1m alertmanager-proxy 20Mi 1m kube-rbac-proxy 15Mi 1m prom-label-proxy 20Mi 1m prometheus-k8s StatefulSet 2 prometheus 1Gi 70m config-reloader 10Mi 1m thanos-sidecar 25Mi 1m prometheus-proxy 20Mi 1m kube-rbac-proxy 15Mi 1m prom-label-proxy 15Mi 1m kube-rbac-proxy-thanos 10Mi 1m node-exporter DaemonSet node-exporter 32Mi 8m kube-rbac-proxy 15Mi 1m
結果を Excel に貼り付ける。
罫線は自前で描かないといけない。
くだらないけど意外に使いどころがあるかもしれない。
OpenShift Cluster Monitoring の Prometheus のデータを Export/Import する
これが実現できると一番スマートそうだなと思った。
visibilityspots.org
だが、Cluster Monitoring の Prometheus では admin API が無効化されていた。まぁ想定はしていた。
$ oc exec -it -n openshift-monitoring prometheus-k8s-0 -- sh sh-4.4$ curl -X POST http://localhost:9090/api/v1/admin/tsdb/snapshot {"status":"error","errorType":"unavailable","error":"admin APIs disabled"}
仕方がないので Prometheus のデータを tar.gz で固めて持ってくることにした。固めるのにかなり時間が掛かる。
$ oc exec -it -n openshift-monitoring prometheus-k8s-0 -- sh sh-4.4$ tar -zcvf /tmp/prometheus.tar.gz /prometheus tar: Removing leading `/' from member names /prometheus/ /prometheus/01FK3XJ471YNVXFRT1PV5VHPTP/ /prometheus/01FK3XJ471YNVXFRT1PV5VHPTP/chunks/ ・・・ ・・・ ・・・ sh-4.4$ ls /tmp/ ks-script-rgpe088e ks-script-zgupbl05 prometheus.tar.gz
Prometheus のバージョンも調べておく。
sh-4.4$ /bin/prometheus --version prometheus, version 2.26.1 (branch: rhaos-4.8-rhel-8, revision: 5e146b2e4b9d96a952b9412dc20ce3fabfa2bd5e) build user: root@d43b8d11b98a build date: 20210813-03:01:55 go version: go1.16.6 platform: linux/amd64
oc cp でローカルに tar.gz で固めたものを持ってくる。持ってくるのにかなり時間が掛かる。
$ oc cp prometheus-k8s-0:/tmp/prometheus.tar.gz /my/local/pc/prometheus.tar.gz Defaulting container name to prometheus. tar: Removing leading `/' from member names
ローカルで同一バージョンの Prometheus をデータをコピーした領域をマウントする形で起動する。
$ docker run -d --name prometheus -v /my/local/pc/prometheus:/prometheus -p 9090:9090 prom/prometheus:v2.26.1 002bc4b65116d370f9998455e38c55d88d28d2bb26b1ebddacba38abfbcb10b4
一応ちゃんとデータを見られる。そこそこ使い所ありそう。