Điểm:0

PostgreSQL là ứng dụng k8s có trạng thái - sự cố với khối lượng được gắn (liên quan đến quyền sở hữu)

lá cờ de

Tôi đang cố gắng áp dụng cụm PostgreSQL k8s có trạng thái dựa trên bài viết này đến môi trường địa phương trong công ty của tôi.

CHỈNH SỬA
đây là một cụm vmware tanzu, mà tôi không tự thiết lập, vì vậy tôi không có thêm bất kỳ chi tiết nào về bản chất của chính cụm đó. Tôi đã thêm một StorageClass mà tôi đang tham khảo

> phiên bản kubectl
Phiên bản máy khách: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.8", GitCommit:"5575935422cc1cf5169dfc8847cb587aa47bac5a", GitTreeState:"clean", BuildDate:"2021-06-16T13:00: 45Z", GoVersion:"go1.15.13", Trình biên dịch:"gc", Nền tảng:"linux/amd64"}
Phiên bản máy chủ: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.8+vmware.1", GitCommit:"3e397df2f5dadadfa35958ec45c14b0e81abc25f", GitTreeState:"clean", BuildDate:"2021-06- 21T16:59:40Z", GoVersion:"go1.15.13", Trình biên dịch:"gc", Nền tảng:"linux/amd64"}

PostgreSQL đang chạy với tư cách là người dùng postgres, không phải root. Đây có thể là một phần của vấn đề của tôi.

kết thúc CHỈNH SỬA

Có một hình ảnh PostgreSQL tùy chỉnh gắn 3 tập dưới dạng

  • /opt/db/data/postgres/data
  • /opt/db/sao lưu/postgres/sao lưu
  • /opt/db/backup/postgres/archives

Khi áp dụng các tệp đó (theo thứ tự như chúng được liệt kê bên dưới) lên cụm, nhóm postgres không quay lên và nhật ký báo cáo sự cố với quyền truy cập.

> nhật ký kcl pod/postgres-stateful-0
bắt đầu hình ảnh docker postgres:
postgres -D /opt/db/data/postgres/data
+ echo 'khởi động hình ảnh docker 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: thay đổi quyền của '/opt/db/data/postgres/data': Thao tác không được phép

điều này bắt nguồn từ docker-entrypoint.sh chạy trên việc tạo vùng chứa.

tập lệnh kiểm tra xem thư mục $PGDATA (/opt/db/data/postgres/data) có tồn tại hay không và liệu nó có thuộc sở hữu của người dùng postgres của tôi hay không. Trên thực tế Dockerfile từ hình ảnh tùy chỉnh tạo ra điều này một cách chính xác để mkdirchmod hành động nên được bỏ qua và vùng chứa nên được bắt đầu.

Điều này hoạt động khi bạn chỉ chạy một nhóm duy nhất dựa trên hình ảnh đó.

Vì vậy, tôi đoán rằng việc gắn các Volum bên trong vùng chứa bằng cách nào đó đã tăng quyền sở hữu và tôi đang tự hỏi làm thế nào để giải quyết vấn đề này hay nói cách khác là xác định chủ nhân và cấp quyền cho các đường dẫn gắn kết bên trong vùng chứa sẽ được tạo.

Ai có thể chỉ cho tôi đi đúng hướng về cách giải quyết vấn đề này không? Tôi thậm chí không thể nói đó là statefulset.yml hay storage.yaml cần được điều chỉnh


Tạo hình ảnh

ĐĂNG KÝ ARG=docker-dev-local.intern.net
ARG BASE_IMAGE_REPO=scm
ARG BASE_IMAGE_NAME=debian-bullseye
ARG BASE_IMAGE_TAG=mới nhất

# Giai đoạn thứ hai - tạo hình ảnh thời gian chạy
# -----------------------------------
#TỪ debian:11 làm cơ sở
#FROM docker-dev-local.intern.net/scm/debian-bullseye:build-74 làm cơ sở
TỪ $REGISTRY/$BASE_IMAGE_REPO/$BASE_IMAGE_NAME:$BASE_IMAGE_TAG

# bảo trì
# ----------
LABEL org.opencontainers.image.authors="<[email protected]>"

# Xây dựng các biến Môi trường, thay đổi khi cần
# --------------------------------------------- ------------
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

# Các biến môi trường cần thiết cho bản dựng này (KHÔNG thay đổi)
# --------------------------------------------- ------------
ENV PG_MAJOR=${PG_MAJOR}
ENV PG_VERSION=${PG_VERSION}
ENV PGUSER=postgres
ENV PGDATABASE=postgres
ENV PGPORT=5432
ENV DBBASE=/opt/db
ENV PGBASE=$DBBASE/postgres
ENV PGBIN=$PGBASE/thùng
ENV PGHOME=$PGBASE/postgresql
ENV PGDATA=$DBBASE/data/postgres/data
ENV PGLOG=$PGDATA/log
ENV PGBACK=$DBBASE/sao lưu/postgres/sao lưu
ENV PGARCH=$DBBASE/sao lưu/postgres/lưu trữ

ENV PATH=$PGHOME/bin:$PATH

ENV LANG=de_DE.UTF-8
ENV LC_MESSAGES=en_US.UTF-8
ENV TZ=Châu Âu/Berlin

CHẠY env | loại

# Cài đặt các gói và phụ thuộc bổ sung
# ---------------------------------------------
CHẠY bộ -ex; \
    cập nhật apt-get && \
    nâng cấp apt-get && \
    cài đặt apt-get -y --no-install-recommends \
        chứng chỉ ca \
        Xoăn \
        dirmngr \
        gnupg \
        iproute2 \
        ít hơn \
        libnss-wrapper \
        libpam0g \
        libreadline8 \
        libselinux1 \
        libsystemd0 \
        libxml2 \
        ngôn ngữ \
        openssl \
        procps \
        vim-tiny \
        quên \
        xz-utils \
        zlib1g \
    && \
    apt-làm sạch

# tạo ngôn ngữ cho en_US và 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 && \
    ngôn ngữ -a

# Thiết lập người dùng và thư mục
# ---------------------------
CHẠY 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

# thiết lập người dùng env
# ---------------
USER postgres
SAO CHÉP --chown=postgres:postgres ["files/.alias", "files/.bashrc", "files/postgresql.conf.${PG_MAJOR}", "files/conf.d/00-ina-default.conf ", "/hôm
SAO CHÉP ["tệp/docker-entrypoint.sh", "/"]
THÊM ["tệp/pg-docker-env.tar.gz", "$PGBASE/"]

# cài đặt postgres
# --------------------
# sao chép gói postgres từ giai đoạn trình tạo
#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_
# tải xuống bản dựng của postgres
WORKDIR $PGBASE
CHẠY curl -sSL $DVZ_REPO_URL/postgres/Linux/$DIST_VERSION/postgresql-$PG_VERSION-$DIST_VERSION-dvz1.tar.gz | tar xzf - -C $PGBASE
CHẠY ln -s $PGBASE/postgresql-$PG_VERSION-$DIST_VERSION-$DVZ_BUILD postgresql

# ràng buộc
# --------
KHỐI LƯỢNG ["$PGDATA", "$PGBACK", "$PGARCH"]
TÍN HIỆU DỪNG LẠI
TIẾP XÚC 5432
KIỂM TRA SỨC KHỎE --interval=1m --start-period=5m \
   Trạng thái pg_ctl của CMD >/dev/null || thoát 1

# Xác định lệnh mặc định để khởi động Cơ sở dữ liệu.
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["postgres", "-D", "/opt/db/data/postgres/data"]
#!/bin/bash
đặt lỗi đường ống -xeEuo

echo "khởi động hình ảnh docker postgres:"
tiếng vang "$@"

# kiểm tra thư mục PGDATA và tạo nếu cần
nếu [ \! -d $PGDATA ] || [ \! -O $PGDATA ]
sau đó
    mkdir -p $PGDATA
    chmod 700 $ PGDATA
fi

# kiểm tra cụm cơ sở dữ liệu trong thư mục PGDATA và tạo cụm db mới nếu cần
nếu [ \! -s $PGDATA/PG_VERSION ] || ! pg_controldata
sau đó
    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 "# cho phép kết nối qua docker gateway hoặc bridge"
        echo "lưu trữ tất cả 172.16.0.0/14 md5"
    } >> "$PGDATA/pg_hba.conf"
fi

# hiển thị phiên bản PGDATA và dữ liệu kiểm soát
echo "PGDATA/PGVERSION=`cat $PGDATA/PG_VERSION`"

# bắt đầu postgres rdbms ngay bây giờ
thực thi "$@"

khai báo kubernetes

loại: PersistentVolume
phiên bản api: v1
metadata:
  tên: postgres-pgdata33
  nhãn:
    ứng dụng: postgres
    loại: địa phương
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
    lưu trữ: 1Gi
  chế độ truy cập:
    - ReadWriteOnce
  đường dẫn máy chủ:
    đường dẫn: "/var/dữ liệu"
---
loại: PersistentVolume
phiên bản api: v1
metadata:
  tên: postgres-pgbackup33
  nhãn:
    ứng dụng: postgres
    loại: địa phương
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
    lưu trữ: 1Gi
  chế độ truy cập:
    - ReadWriteOnce
  hostPath: đường dẫn: "/var/data"
---
loại: PersistentVolume
phiên bản api: v1
metadata:
  tên: postgres-pgarch33
  nhãn:
    ứng dụng: postgres
    loại: địa phương
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
    lưu trữ: 1Gi
  chế độ truy cập:
    - ReadWriteOnce
  đường dẫn máy chủ:
    đường dẫn: "/var/dữ liệu"
# ################################################ ###################################
---
loại: PersistentVolumeClaim
phiên bản api: v1
metadata:
  tên: pgdata33-pvc
  nhãn:
    ứng dụng: postgres
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
  chế độ truy cập:
    - ReadWriteOnce
  tài nguyên:
    yêu cầu:
      lưu trữ: 1Gi
---
loại: PersistentVolumeClaim
phiên bản api: v1
metadata:
  tên: pgbackup33-pvc
  nhãn:
    ứng dụng: postgres
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
  chế độ truy cập:
    - ReadWriteOnce
  tài nguyên:
    yêu cầu:
      lưu trữ: 1Gi
---
loại: PersistentVolumeClaim
phiên bản api: v1
metadata:
  tên: pgarch33-pvc
  nhãn:
    ứng dụng: postgres
thông số kỹ thuật:
  lưu trữClassName: ina01
  dung tích:
  chế độ truy cập:
    - ReadWriteOnce
  tài nguyên:
    yêu cầu:
      lưu trữ: 1Gi
phiên bản api: v1
loại: Bản đồ cấu hình
metadata:
  tên: postgres-configuration
  nhãn:
    ứng dụng: postgres
dữ liệu:
  POSTGRES_DB: awesomedb
  POSTGRES_USER: người dùng tuyệt vời
  POSTGRES_PASSWORD: mật khẩu hoàn hảo
---
apiVersion: ứng dụng/v1
loại: StatefulSet
metadata:
  tên: postgres-trạng thái
  nhãn:
    ứng dụng: postgres
thông số kỹ thuật:
  tên dịch vụ: "postgres"
  bản sao: 1
  bộ chọn:
    trận đấuNhãn:
      ứng dụng: postgres
  mẫu:
    metadata:
      nhãn:
        ứng dụng: postgres
    thông số kỹ thuật:
      hộp đựng:
      - tên: postgres
        hình ảnh: docker-dev-local.intern.net/ina/postgresql:14.1-scm-debian-bullseye-build-74-4
        envTừ:
        - cấu hìnhMapRef:
            tên: postgres-configuration
        cổng:
        - Cảng container: 5432
          tên: postgresdb
        khối lượngMount:
        - tên: dữ liệu pv
          mountPath: /opt/db/data/postgres/data # /var/lib/postgresql/data
        - tên: pv-sao lưu
          mountPath: /opt/db/backup/postgres
        - tên: pv-arch
          mountPath: /opt/db/backup/postgres/arch
      bối cảnh bảo mật:
        runAsUser: 1000
        runAsGroup: 1000
        nhóm fs: 1000
      khối lượng:
      - tên: dữ liệu pv
        liên tụcVolumeClaim:
          Tên yêu cầu: pgdata33-pvc
      - tên: pv-sao lưu
        liên tụcVolumeClaim:
          tên xác nhận: pgbackup33-pvc
      - tên: pv-arch
        liên tụcVolumeClaim:
          Tên yêu cầu: pgarch33-pvc

phiên bản api: v1
loại: Dịch vụ
metadata:
  tên: dịch vụ postgres
  nhãn:
    ứng dụng: postgres
thông số kỹ thuật:
  cổng:
  - cổng: 5432
    tên: postgres
  loại: NútPort
  bộ chọn:
    ứng dụng: postgres
Mikołaj Głodziak avatar
lá cờ id
Bạn đã sử dụng phiên bản Kubernetes nào và bạn đã thiết lập cụm chính xác như thế nào? Điều quan trọng là tái tạo vấn đề của bạn. Ngoài ra, vui lòng tránh sử dụng Pastebin hoặc bất kỳ công cụ nào khác và đính kèm tệp cấu hình của bạn dưới dạng văn bản được định dạng trực tiếp vào câu hỏi.
vrms avatar
lá cờ de
vui lòng lưu ý những bổ sung ở trên @MikoÅajGÅodziak
Mikołaj Głodziak avatar
lá cờ id
Bạn đang sử dụng [phiên bản Kubernetes không được hỗ trợ](https://endoflife.date/kubernetes). Bạn có thể cập nhật nó?
vrms avatar
lá cờ de
Tôi không sở hữu những siêu năng lực như vậy trong môi trường công ty của mình (thậm chí tệ hơn: quản lý nhà nước), tôi sợ .-). Nhưng nếu bạn cho tôi biết vấn đề hiện tại thì đây có thể không còn là vấn đề nữa với k8s gần đây hơn, tôi có thể đang sử dụng vấn đề này như một góc độ cho yêu cầu cập nhật
Mikołaj Głodziak avatar
lá cờ id
Sẽ thật tốt nếu cụm có thể được cập nhật. Không có nó, sẽ rất khó để giúp đỡ. Ngoài ra, bạn có thể thay đổi các quyền liên quan có vấn đề ở giai đoạn tạo hình ảnh không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.