Panduan penamaan bucket penyimpanan
Nama bucket harus mematuhi konvensi penamaan berikut:
- Bersifat unik dalam project. Project menambahkan awalan unik ke nama bucket, sehingga tidak ada konflik dalam organisasi. Jika terjadi konflik nama bucket dan awalan di seluruh organisasi, pembuatan bucket akan gagal dengan error
bucket name in use
. - Memiliki minimal satu dan tidak lebih dari 57 karakter.
- Jangan menyertakan informasi identitas pribadi (PII).
- Sesuai dengan DNS.
- Diawali dengan huruf dan hanya berisi huruf, angka, dan tanda hubung.
Instal CLI alat s3cmd
Alat s3cmd
adalah alat command line untuk mengelola penyimpanan objek.
- Untuk mendownload alat, buka direktori tempat paket GDC diekstrak.
Jalankan perintah berikut untuk mengekstrak image s3cmd,
s3cmd.tar.tar.gz
, ke direktori sementara yang kosong:tmpdir=$(mktemp -d) gdcloud artifacts extract oci/ $tmpdir \ --image-name=$(gdcloud artifacts tree oci | grep s3cmd.tar | sed 's/^.* //')
scp
file tar ke mesin klien tempat Anda menggunakans3cmd
untuk operasi objek; unzip dan instal image.
Pilih salah satu metode penginstalan berikut untuk menginstal alat s3cmd
:
Menginstal melalui file tar
Untuk mengekstrak arsip dan menginstal paket
s3cmd
, jalankan perintah berikut. Anda harus memiliki modul Pythondistutils
untuk menginstal paket. Modul ini sering kali merupakan bagian dari paket Python inti atau Anda dapat menginstalnya menggunakan pengelola paket.tar xvf /tmp/gpc-system-tar-files/s3cmd.tar.tar.gz cd /tmp/gpc-system-tar-files/s3cmd sudo python3 setup.py install
Opsional: Hapus file yang didownload:
rm /tmp/gpc-system-tar-files/s3cmd.tar.tar.gz rm -r /tmp/gpc-system-tar-files/s3cmd
Menginstal dengan image Docker
Untuk menginstal image
s3cmd
, jalankan perintah berikut:docker load --input s3cmd-docker.tar export S3CFG=/EMPTY_FOLDER_PATH/ alias s3cmd="docker run -it --net=host --mount=type=bind,source=/$S3CFG/,target=/g/ s3cmd-docker:latest -c /g/s3cfg"
Opsional: Hapus file yang didownload:
rm s3cmd-docker.tar
Tambahkan ekspor dan alias ke file
.bashrc
agar tetap ada setelah klien dimulai ulang.
Mengonfigurasi alat s3cmd
Gunakan alat s3cmd untuk operasi berbasis objek.
Jalankan perintah s3cmd --configure
dan tentukan hal berikut:
- Kunci Akses: Masukkan kunci akses yang diperoleh dari rahasia di mendapatkan kredensial akses.
- Secret Key: Masukkan kunci rahasia yang diperoleh dari secret di mendapatkan kredensial akses.
- Wilayah Default: Tekan
ENTER
. - Endpoint S3: Masukkan endpoint yang disediakan oleh Operator Infrastruktur (IO) Anda.
- Untuk penamaan bucket gaya DNS, masukkan
s3://%(bucket)
. - Opsional: Masukkan sandi enkripsi untuk melindungi file dalam pengiriman.
- Di Path to GPG, masukkan
/usr/bin/gpg
. - Masukkan
Yes
untuk menggunakan protokol HTTPS. - Tekan
Enter
untuk melewati memasukkan nama server proxy.
Membuat bucket penyimpanan
Sebelum memulai
Namespace project mengelola resource bucket di cluster admin root. Anda harus memiliki project untuk membuat bucket. Untuk membuat project baru, lihat Membuat project. Anda harus memiliki izin bucket yang sesuai untuk melakukan operasi berikut. Lihat memberikan akses bucket.
Membuat bucket
Untuk membuat bucket, terapkan spesifikasi bucket ke namespace project Anda:
kubectl apply -f bucket.yaml
Berikut adalah contoh spesifikasi bucket:
apiVersion: object.gdc.goog/v1alpha1
kind: Bucket
metadata:
name: BUCKET_NAME
namespace: NAMESPACE_NAME
spec:
description: DESCRIPTION
storageClass: standard-rwo
bucketPolicy :
lockingPolicy :
defaultObjectRetentionDays: RETENTION_DAY_COUNT
Untuk mengetahui detail selengkapnya, lihat referensi Bucket API.
Mencantumkan bucket penyimpanan
Untuk membuat daftar semua bucket yang dapat Anda akses di tenant penyimpanan objek tertentu, selesaikan langkah-langkah berikut:
Jalankan perintah berikut untuk mencantumkan semua bucket:
kubectl get buckets --all-namespaces kubectl get buckets --namespace NAMESPACE_NAME
Menghapus bucket penyimpanan
Anda dapat menghapus bucket penyimpanan menggunakan CLI. Bucket harus kosong sebelum Anda dapat menghapusnya.
Gunakan perintah
GET
atauDESCRIBE
di bagian Lihat konfigurasi bucket untuk mendapatkan nama bucket yang sepenuhnya memenuhi syarat.Jika bucket tidak kosong, kosongkan bucket:
s3cmd rm --recursive -—force s3://FULLY_QUALIFIED_BUCKET_NAME
Hapus bucket kosong:
kubectl delete buckets/BUCKET_NAME --namespace NAMESPACE_NAME
Melihat konfigurasi bucket
Gunakan salah satu perintah untuk melihat detail konfigurasi bucket:
kubectl describe buckets/BUCKET_NAME --namespace NAMESPACE_NAME
kubectl get buckets/BUCKET_NAME --namespace NAMESPACE_NAME -o yaml
Menetapkan periode retensi objek
Secara default, Anda dapat menghapus objek kapan saja. Aktifkan penguncian objek dengan periode retensi untuk mencegah penghapusan semua objek dalam bucket selama jumlah hari yang ditentukan. Anda tidak dapat menghapus bucket hingga Anda menghapus semua objek setelah periode retensi data.
Anda harus mengaktifkan penguncian objek saat membuat bucket. Anda tidak dapat mengaktifkan atau menonaktifkan penguncian objek setelah membuat bucket. Namun, Anda dapat mengubah periode retensi objek default.
Anda dapat membuat bucket dengan atau tanpa mengaktifkan penguncian objek. Jika Anda telah mengaktifkan penguncian objek, menentukan periode retensi default bersifat opsional.
Untuk mengubah periode retensi, perbarui kolom
Bucket.spec.bucketPolicy.lockingPolicy.defaultObjectRetentionDays
di
resource Bucket.
Berikut adalah contoh pembaruan kolom di resource Bucket:
apiVersion: object.gdc.goog/v1alpha1
kind: Bucket
metadata:
name: BUCKET_NAME
namespace: NAMESPACE_NAME
spec:
description: "This bucket has a default retention period specified."
storageClass: standard-rwo
bucketPolicy :
lockingPolicy :
defaultObjectRetentionDays: RETENTION_DAY_COUNT
---
apiVersion: object.gdc.goog/v1alpha1
kind: Bucket
metadata:
name: BUCKET_NAME
namespace: NAMESPACE_NAME
spec:
description: "This would enable object locking but not specify a default retention period."
storageClass: standard-rwo
bucketPolicy :
lockingPolicy :
---
apiVersion: object.gdc.goog/v1alpha1
kind: Bucket
metadata:
name: BUCKET_NAME
namespace: NAMESPACE_NAME
spec:
description: "This bucket does not have locking or retention enabled."
storageClass: standard-rwo
Setiap perubahan pada periode retensi berlaku untuk objek yang dibuat di bucket setelah perubahan. Untuk objek yang sudah ada, periode retensi tidak berubah.
Jika Anda telah mengaktifkan penguncian objek, jika Anda mencoba menimpa objek, Anda akan menambahkan versi baru objek. Anda dapat mengambil kedua versi objek.
Untuk mengetahui detail cara mencantumkan versi objek, lihat ListObjectVersions
dari
dokumentasi Amazon Web Services:
https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html
Untuk membuat bucket tulis sekali, baca berkali-kali (WORM), lihat bagian Bucket WORM.
Memberikan akses bucket
Anda dapat memberikan akses bucket kepada pengguna atau akun layanan lain dengan membuat
dan menerapkan RoleBindings
dengan peran bawaan.
Peran yang telah ditetapkan
project-bucket-object-viewer: Peran ini memungkinkan pengguna mencantumkan semua bucket dalam project, mencantumkan objek dalam bucket tersebut, serta membaca objek dan metadata objek. Peran ini tidak memungkinkan Anda melakukan operasi tulis pada objek, seperti mengupload, menimpa, atau menghapus
project-bucket-object-admin: Peran ini memungkinkan pengguna mencantumkan semua bucket dalam project, serta melakukan operasi tulis dan baca pada objek, seperti mengupload, mengganti, atau menghapus.
project-bucket-admin: Peran ini memungkinkan pengguna mengelola semua bucket dalam namespace yang diberikan, serta semua objek dalam bucket tersebut.
Untuk melihat daftar lengkap izin yang diberikan untuk peran ini, lihat bagian izin peran preset.
Untuk mendapatkan izin yang diperlukan untuk membuat binding peran project, minta Admin IAM Project Anda untuk memberi Anda peran Admin IAM Project (project-iam-admin
).
Berikut adalah contoh pembuatan RoleBinding
untuk memberikan akses kepada pengguna dan akun layanan:
Buat file YAML di sistem Anda, seperti
rolebinding-object-admin-all-buckets.yaml
.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: NAMESPACE_NAME name: readwrite-all-buckets roleRef: kind: Role name: project-bucket-object-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: NAMESPACE_NAME name: SA_NAME - kind: User namespace: NAMESPACE_NAME name: bob@example.com # Could be bob or bob@example.com based on your organization settings. apiGroup: rbac.authorization.k8s.io ```
Terapkan file YAML:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
Mendapatkan kredensial akses bucket
Saat Anda memberikan akses ke bucket, kredensial akses dibuat di Secret.
Format nama secret adalah object-storage-key-SUBJECT_TYPE-SUBJECT_HASH
.
- Nilai untuk
SUBJECT_TYPE
adalah sebagai berikut:user
: pengguna.sa
:ServiceAccount
.
SUBJECT_HASH
adalah hash SHA256 berenkode base32 dari nama subjek.
Sebagai contoh, pengguna bob@foo.com
memiliki secret bernama:
object-storage-key-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Mengakses secret pengguna
Untuk subjek pengguna, Secret berada di namespace object-storage-access-keys
di cluster admin root.
Temukan nama rahasia:
kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-
Anda akan menerima output yang mirip dengan berikut ini:
secrets [] [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
Dapatkan konten Secret yang sesuai untuk mengakses bucket:
kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-rm-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Anda akan menerima output yang mirip dengan berikut ini:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
Dekode ID kunci akses dan rahasia:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
Anda akan menerima output yang mirip dengan berikut ini:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
Ikuti bagian Mengonfigurasi s3cmd dengan informasi yang dihasilkan.
Mengakses rahasia akun layanan
Untuk subjek akun layanan (SA), Secret berada di namespace yang sama dengan bucket. Untuk menemukan nama, jalankan:
kubectl get --namespace NAMESPACE_NAME secrets -o=jsonpath=
'{.items[?(@.metadata.annotations.object\.gdc\.goog/subject=="SA_NAME")].metadata.name}'
Anda akan menerima output yang mirip dengan berikut ini:
object-storage-key-rm-sa-mng3olp3vsynhswzasowzu3jgzct2ert72pjp6wsbzqhdwckwzbq
Anda dapat mereferensikan Secret di pod sebagai variabel lingkungan (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) atau file (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod).
Izin peran preset
izin project-bucket-object-viewer
Peran ini memberikan izin untuk mendapatkan dan mencantumkan objek serta metadata objek dalam bucket.
Peran project-bucket-object-viewer
memiliki izin berikut:
Izin Bucket API:
- Dapatkan
- Daftar
- Tonton
Izin penyimpanan objek S3:
GetObject
GetObjectAcl
GetObjectVersion
ListBucket
ListBucketVersions
ListBucketMultipartUploads
ListMultipartUploadParts
Izin project-bucket-object-admin
Peran ini memberikan izin untuk menempatkan dan menghapus objek, versi objek, dan
tag di bucket. Selain itu, peran ini juga memberikan semua izin di
project-bucket-object-viewer
.
Peran project-bucket-object-admin
memiliki izin penyimpanan objek berikut:
Izin penyimpanan Objek S3:
AbortMultipartUpload
DeleteObject
DeleteObjectVersion
PutObject
RestoreObject
izin project-bucket-admin
Peran ini memberikan izin untuk membuat, mengupdate, atau menghapus resource Bucket
di
namespace project. Selain itu, peran ini juga memberikan semua izin di
project-bucket-object-admin
.
Peran project-bucket-object-admin
memiliki izin berikut:
Izin Bucket API:
- Buat
- Perbarui
- Hapus
Membuat Bucket WORM
Bucket WORM memastikan bahwa tidak ada yang menimpa objek dan mempertahankan objek tersebut selama jangka waktu minimum. Logging audit adalah contoh kasus penggunaan untuk bucket WORM.
Lakukan langkah-langkah berikut untuk membuat bucket WORM:
Tetapkan periode retensi saat membuat bucket. Misalnya, bucket contoh berikut memiliki periode retensi 365 hari.
apiVersion: object.gdc.goog/v1alpha1 kind: Bucket metadata: name: foo logging-bucket namespace: foo-service spec: description: "Audit logs for foo" storageClass: standard-rwo bucketPolicy : lockingPolicy : defaultObjectRetentionDays: 365
Berikan peran
project-bucket-object-viewer
kepada semua pengguna yang memerlukan akses baca-saja:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: foo-service name: object-readonly-access roleRef: kind: Role name: project-bucket-object-viewer apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: foo-service name: foo-log-processor - kind: User name: bob@example.com apiGroup: rbac.authorization.k8s.io
Berikan peran
project-bucket-object-admin
kepada pengguna yang perlu menulis konten ke bucket:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: foo-service name: object-write-access roleRef: kind: Role name: project-bucket-object-viewer apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: foo-service name: foo-service-account
Memulihkan dari penyimpanan objek ke sistem file di block storage
Mengalokasikan volume persisten
Untuk memulihkan file dari endpoint penyimpanan objek, ikuti langkah-langkah berikut:
Mengalokasikan volume persisten (PV) yang akan ditargetkan dalam pemulihan. Gunakan klaim volume persisten (PVC) untuk mengalokasikan volume, seperti yang ditunjukkan dalam contoh berikut:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-pvc namespace: restore-ns spec: storageClassName: standard-rwo accessModes: ReadWriteOnce resources: requests: storage: 1Gi # Need sufficient capacity for full restoration.
Periksa status PVC:
kubectl get pvc restore-pvc -n restore-ns
Setelah PVC berada dalam status
Bound
, PVC siap digunakan di dalam Pod yang merehidrasinya.Jika set
Stateful
akhirnya menggunakan PV, Anda harus mencocokkan PVC StatefulSet yang dirender. Pod yang dihasilkanStatefulSet
menggunakan volume yang di-hydrasi. Contoh berikut menunjukkan template klaim volume di StatefulSet bernamass
.volumeClaimTemplates: - metadata: name: pvc-name spec: accessModes: [ "ReadWriteOnce" ] storageClassName: standard-rwo resources: requests: storage: 1Gi
Pra-alokasikan PVC dengan nama seperti
ss-pvc-name-0
danss-pvc-name-1
untuk memastikan Pod yang dihasilkan menggunakan volume yang telah dialokasikan sebelumnya.
Mengisi Volume Persisten (PV)
Setelah PVC terikat ke PV, mulai Job
untuk mengisi PV:
apiVersion: batch/v1
kind: Job
metadata:
name: transfer-job
namespace: transfer
spec:
template:
spec:
serviceAccountName: data-transfer-sa
volumes:
- name: data-transfer-restore-volume
persistentVolumeClaim:
claimName: restore-pvc
containers:
- name: storage-transfer-pod
image: gcr.io/private-cloud-staging/storage-transfer:latest
command: /storage-transfer
args:
- --src_endpoint=https://your-src-endpoint.com
- --src_path=/your-src-bucket
- --src_credentials=transfer/src-secret
- --dst_path=/restore-pv-mnt-path
- --src_type=s3
- --dst_type=local
volumeMounts:
- mountPath: /restore-pv-mnt-path
name: data-transfer-restore-volume
Setelah Job
selesai berjalan, data dari bucket penyimpanan objek akan mengisi volume. Pod terpisah dapat menggunakan data dengan menggunakan
mekanisme standar yang sama untuk memasang volume.