ฉันกำลังพยายามนำคลัสเตอร์ PostgreSQL ของ k8s มาใช้ ตามบทความนี้ ต่อสภาพแวดล้อมในท้องถิ่นในบริษัทของฉัน
แก้ไข
นี่คือคลัสเตอร์ vmware tanzu ซึ่งฉันไม่ได้ตั้งค่าเอง ดังนั้นฉันจึงไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับธรรมชาติของคลัสเตอร์เอง ฉันได้เพิ่ม StorageClass ที่ฉันกำลังอ้างถึง
> รุ่น kubectl
เวอร์ชันไคลเอนต์: version.Info{หลัก:"1", รอง:"20", GitVersion:"v1.20.8", GitCommit:"5575935422cc1cf5169dfc8847cb587aa47bac5a", GitTreeState:"สะอาด", BuildDate:"2021-06-16T13:00: 45Z", GoVersion:"go1.15.13", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}
เวอร์ชันเซิร์ฟเวอร์: version.Info{หลัก:"1", รอง:"20", GitVersion:"v1.20.8+vmware.1", GitCommit:"3e397df2f5dadadfa35958ec45c14b0e81abc25f", GitTreeState:"สะอาด", BuildDate:"2021-06- 21T16:59:40Z", GoVersion:"go1.15.13", คอมไพเลอร์:"gc", แพลตฟอร์ม:"linux/amd64"}
PostgreSQL ทำงานในฐานะผู้ใช้ postgres ไม่ใช่รูท นี่อาจเป็นส่วนหนึ่งของปัญหาของฉัน
สิ้นสุดการแก้ไข
มีอิมเมจ PostgreSQL แบบกำหนดเองซึ่งเมานต์ 3 วอลุ่มเป็น
/opt/db/data/postgres/data
/opt/db/backup/postgres/backups
/opt/db/backup/postgres/ไฟล์เก็บถาวร
เมื่อใช้ไฟล์เหล่านั้น (ตามลำดับตามรายการด้านล่าง) ขึ้นคลัสเตอร์ postgres pod ไม่หมุนและบันทึกรายงานปัญหาเกี่ยวกับสิทธิ์การเข้าถึง
> บันทึก kcl pod/postgres-stateful-0
เริ่มต้นอิมเมจนักเทียบท่า postgres:
postgres -D /opt/db/data/postgres/data
+ echo 'เริ่มสร้างอิมเมจนักเทียบท่า postgres:'
+ echo postgres -D /opt/db/data/postgres/data
+ '[' '!' -d /opt/db/data/postgres/data ']'
+ '[' '!' -O /opt/db/data/postgres/data ']'
+ mkdir -p /opt/db/data/postgres/data
+ chmod 700 /opt/db/data/postgres/data
chmod: การเปลี่ยนสิทธิ์ของ '/opt/db/data/postgres/data': ไม่อนุญาตให้ดำเนินการ
สิ่งนี้เกิดจาก docker-entrypoint.sh
ทำงานบนการสร้างคอนเทนเนอร์
สคริปต์ตรวจสอบว่ามี $PGDATA dir (/opt/db/data/postgres/data) อยู่หรือไม่และเป็นเจ้าของผู้ใช้ postgres ของฉันหรือไม่ ที่จริงแล้ว ไฟล์นักเทียบท่า จากภาพที่กำหนดเองสร้างสิ่งนี้อย่างถูกต้องดังนั้น มคเดียร์
และ chmod
ควรข้ามการดำเนินการและควรเริ่มต้นคอนเทนเนอร์
ใช้งานได้เมื่อคุณเรียกใช้พ็อดเดียวตามภาพนั้น
ดังนั้นฉันเดาว่าการติดตั้ง Volums ภายในคอนเทนเนอร์จะทำให้ความเป็นเจ้าของเสียหายและฉันสงสัยว่าจะแก้ไขสิ่งนี้ได้อย่างไรหรืออีกนัยหนึ่งคือกำหนด เจ้าของ
และสิทธิ์การเข้าถึงสำหรับเส้นทางเมานต์ภายในคอนเทนเนอร์ที่จะสร้าง
ใครสามารถชี้ให้ฉันเห็นทิศทางที่ถูกต้องเกี่ยวกับวิธีแก้ปัญหานี้ได้บ้าง ฉันไม่สามารถบอกได้ว่าเป็น statefulset.yml หรือ storage.yaml ที่ต้องปรับเปลี่ยน
การสร้างภาพ
ARG REGISTRY=นักเทียบท่า-dev-local.intern.net
ARG BASE_IMAGE_REPO=scm
ARG BASE_IMAGE_NAME=เดเบียน-บูลส์อาย
ARG BASE_IMAGE_TAG=ล่าสุด
# ขั้นตอนที่สอง - สร้างอิมเมจรันไทม์
# -----------------------------------
#FROM เดเบียน:11 เป็นฐาน
#FROM docker-dev-local.intern.net/scm/debian-bullseye:build-74 เป็นฐาน
จาก $REGISTRY/$BASE_IMAGE_REPO/$BASE_IMAGE_NAME:$BASE_IMAGE_TAG
#คนดูแล
# ----------
LABEL org.opencontainers.image.authors="<[email protected]>"
# สร้างตัวแปรสภาพแวดล้อมเปลี่ยนแปลงตามต้องการ
# --------------------------------------------- ------------
ARG PG_MAJOR=14
ARG PG_VERSION=14.1
ARG DIST_VERSION=deb11
ARG DVZ_BUILD=dvz1
ENV DVZ_REPO_URL=http://dvzsn-rd1115.dbmon.rz-dvz.cn-mv.de/scb-repo
# ตัวแปรสภาพแวดล้อมที่จำเป็นสำหรับงานสร้างนี้ (ไม่เปลี่ยนแปลง)
# --------------------------------------------- ------------
ENV PG_MAJOR=${PG_MAJOR}
ENV PG_VERSION=${PG_VERSION}
ENV PGUSER=โพสเกรส
ENV PGDATABASE=postgres
ENV PGPORT=5432
ENV DBBASE=/opt/db
ENV PGBASE=$DBBASE/โพสต์เกรส
ENV PGBIN=$PGBASE/ถัง
ENV PGHOME=$PGBASE/postgresql
ENV PGDATA=$DBBASE/data/postgres/data
ENV PGLOG=$PGDATA/บันทึก
ENV PGBACK=$DBBASE/backup/postgres/backups
ENV PGARCH=$DBBASE/backup/postgres/archives
ENV PATH=$PGHOME/bin:$PATH
ENV LANG=de_DE.UTF-8
ENV LC_MESSAGES=th_US.UTF-8
ENV TZ=ยุโรป/เบอร์ลิน
เรียกใช้ env | เรียงลำดับ
# ติดตั้งแพ็คเกจเพิ่มเติมและการพึ่งพา
# --------------------------------------------
ชุด RUN -ex; \
ฉลาดรับการปรับปรุง && \
apt-รับการอัปเกรด && \
apt-get install -y --no-install-recommends \
ใบรับรอง ca \
ขด \
หรี่แสง \
งุบงิบ \
iproute2 \
น้อย \
libnss-wrapper \
libpam0g \
libreadline8 \
libselinux1 \
libsystemd0 \
libxml2 \
สถานที่ \
opensl \
อุปกรณ์ประกอบฉาก \
vim-จิ๋ว \
wget \
xz-ยูทิลิตี้ \
zlib1g \
&& \
apt-รับทำความสะอาด
# สร้างโลแคลสำหรับ en_US และ de_DE
RUN localedef -i en_US -f UTF-8 en_US.UTF-8 && \
localedef -i de_DE -f UTF-8 de_DE.UTF-8 && \
สถานที่เกิดเหตุ -a
# ตั้งค่าผู้ใช้และไดเรกทอรี
# ---------------------------
เรียกใช้ mkdir -p $PGBASE $PGBIN $PGDATA $PGBACK $PGARCH && \
useradd -d /home/postgres -m -s /bin/bash --no-log-init postgres && \
chown -R postgres:postgres $PGBASE $PGDATA $PGBACK $PGARCH $DBBASE/data && \
chmod a+xr $PGBASE
# ตั้งค่า env ผู้ใช้
# ---------------
USER โพสเกรส
COPY --chown=postgres:postgres ["files/.alias", "files/.bashrc", "files/postgresql.conf.${PG_MAJOR}", "files/conf.d/00-ina-default.conf ", "/โฮม
คัดลอก ["files/docker-entrypoint.sh", "/"]
เพิ่ม ["files/pg-docker-env.tar.gz", "$PGBASE/"]
#ติดตั้งโพสเกรส
# --------------------
# คัดลอกแพ็คเกจ postgres จากขั้นตอนการสร้าง
#RUN mkdir -p $PGBASE/postgresql-$PG_VERSION-$DIST_VERSION-$DVZ_BUILD
#COPY --from=build --chown=postgres:postgres ["$PGBASE/postgresql-$PG_VERSION-$DIST_VERSION-$DVZ_BUILD", "$PGBASE/postgresql-$PG_VERSION-$DIST_
# ดาวน์โหลด build ของ postgres
เวิร์คดีอาร์ $PGBASE
RUN curl -sSL $DVZ_REPO_URL/postgres/Linux/$DIST_VERSION/postgresql-$PG_VERSION-$DIST_VERSION-dvz1.tar.gz | tar xzf - -C $PGBASE
RUN ln -s $PGBASE/postgresql-$PG_VERSION-$DIST_VERSION-$DVZ_BUILD postgresql
#ผูกพัน
#--------
ปริมาณ ["$PGDATA", "$PGBACK", "$PGARCH"]
STOPSIGNAL สัญญาณ
เปิดเผย 5432
การตรวจสุขภาพ --interval=1m --start-period=5m \
CMD pg_ctl สถานะ >/dev/null || ทางออก 1
# กำหนดคำสั่งเริ่มต้นเพื่อเริ่มฐานข้อมูล
จุดเข้าใช้งาน ["/docker-entrypoint.sh"]
CMD ["postgres", "-D", "/opt/db/data/postgres/data"]
#!/bin/bash
ตั้งค่า -xeEuo ไปป์ไลน์ล้มเหลว
echo "เริ่มสร้างอิมเมจนักเทียบท่า postgres:"
เสียงสะท้อน "$@"
# ตรวจสอบไดเร็กทอรี PGDATA และสร้างหากจำเป็น
ถ้า [ \! -d $PGDATA ] || [ \! -O $PGDATA ]
แล้ว
mkdir -p $PGDATA
chmod 700 $PGDATA
ไฟ
# ตรวจสอบคลัสเตอร์ฐานข้อมูลในไดเร็กทอรี PGDATA และสร้างคลัสเตอร์ db ใหม่หากจำเป็น
ถ้า [ \! -s $PGDATA/PG_VERSION ] || ! pg_controldata
แล้ว
POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-"Start1234"}
initdb -D $PGDATA --locale=de_DE.UTF-8 --lc-messages=en_US.UTF-8 --auth-local=trust --auth-host=md5 --pwfile=<(echo "$POSTGRES_PASSWORD" )
mv $PGDATA/postgresql.conf $PGDATA/postgresql.conf.orig
cp ~/postgresql.conf.${PG_MAJOR} $PGDATA/postgresql.conf
mkdir -p $PGDATA/conf.d
cp ~/00-ina-default.conf $PGDATA/conf.d/
{
echo "# อนุญาตการเชื่อมต่อผ่าน docker gateway หรือ bridge"
echo "โฮสต์ทั้งหมด 172.16.0.0/14 md5"
} >> "$PGDATA/pg_hba.conf"
ไฟ
# แสดงเวอร์ชัน PGDATA และข้อมูลการควบคุม
echo "PGDATA/PGVERSION=`cat $PGDATA/PG_VERSION`"
# เริ่ม postgres rdbms ทันที
ผู้บริหาร "$@"
การประกาศ kubernetes
ชนิด: PersistentVolume
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: postgres-pgdata33
ป้ายกำกับ:
แอพ: postgres
ประเภท: ท้องถิ่น
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
ความจุ: 1Gi
โหมดการเข้าถึง:
- ReadWriteOnce
เส้นทางโฮสต์:
เส้นทาง: "/var/data"
---
ชนิด: PersistentVolume
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: postgres-pgbackup33
ป้ายกำกับ:
แอพ: postgres
ประเภท: ท้องถิ่น
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
ความจุ: 1Gi
โหมดการเข้าถึง:
- ReadWriteOnce
hostPath: เส้นทาง: "/var/data"
---
ชนิด: PersistentVolume
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: postgres-pgarch33
ป้ายกำกับ:
แอพ: postgres
ประเภท: ท้องถิ่น
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
ความจุ: 1Gi
โหมดการเข้าถึง:
- ReadWriteOnce
เส้นทางโฮสต์:
เส้นทาง: "/var/data"
# ################################################# ####################################
---
ชนิด: PersistentVolumeClaim
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: pgdata33-pvc
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
โหมดการเข้าถึง:
- ReadWriteOnce
ทรัพยากร:
คำขอ:
ความจุ: 1Gi
---
ชนิด: PersistentVolumeClaim
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: pgbackup33-pvc
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
โหมดการเข้าถึง:
- ReadWriteOnce
ทรัพยากร:
คำขอ:
ความจุ: 1Gi
---
ชนิด: PersistentVolumeClaim
api เวอร์ชัน: v1
ข้อมูลเมตา:
ชื่อ: pgarch33-pvc
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
storageClassName: ina01
ความจุ:
โหมดการเข้าถึง:
- ReadWriteOnce
ทรัพยากร:
คำขอ:
ความจุ: 1Gi
api เวอร์ชัน: v1
ประเภท: ConfigMap
ข้อมูลเมตา:
ชื่อ: การกำหนดค่า postgres
ป้ายกำกับ:
แอพ: postgres
ข้อมูล:
POSTGRES_DB: สุดยอด db
POSTGRES_USER: ผู้ใช้ที่น่าทึ่ง
POSTGRES_PASSWORD: รหัสผ่านที่สมบูรณ์แบบ
---
apiVersion: แอป/v1
ประเภท: StatefulSet
ข้อมูลเมตา:
ชื่อ: postgres-stateful
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
ชื่อบริการ: "postgres"
แบบจำลอง: 1
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
แอพ: postgres
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
ตู้คอนเทนเนอร์:
- ชื่อ: โพสเกรส
ภาพ: docker-dev-local.intern.net/ina/postgresql:14.1-scm-debian-bullseye-build-74-4
envจาก:
- configMapRef:
ชื่อ: การกำหนดค่า postgres
พอร์ต:
- พอร์ตคอนเทนเนอร์: 5432
ชื่อ: postgresdb
ปริมาณการติดตั้ง:
- ชื่อ: pv-data
mountPath: /opt/db/data/postgres/data # /var/lib/postgresql/data
- ชื่อ: pv-backup
mountPath: /opt/db/backup/postgres
- ชื่อ: pv-arch
mountPath: /opt/db/backup/postgres/arch
บริบทความปลอดภัย:
เรียกใช้ AsUser: 1,000
เรียกใช้ AsGroup: 1,000
fsGroup: 1,000
ปริมาณ:
- ชื่อ: pv-data
ถาวรVolumeClaim:
ชื่อการอ้างสิทธิ์: pgdata33-pvc
- ชื่อ: pv-backup
ถาวรVolumeClaim:
ชื่อการอ้างสิทธิ์: pgbackup33-pvc
- ชื่อ: pv-arch
ถาวรVolumeClaim:
ชื่อการอ้างสิทธิ์: pgarch33-pvc
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
ชื่อ: postgres-service
ป้ายกำกับ:
แอพ: postgres
ข้อมูลจำเพาะ:
พอร์ต:
- พอร์ต: 5432
ชื่อ: โพสเกรส
ประเภท: NodePort
ตัวเลือก:
แอพ: postgres