Saya tidak tahu bagaimana AWS mengatur 'kumpulan tipis' Docker mereka di ElasticBeanstalk dan bagaimana pengisiannya. Kumpulan tipis buruh pelabuhan saya sedang mengisi entah bagaimana dan menyebabkan aplikasi saya mogok ketika mereka mencoba menulis ke disk.
Ini dari dalam wadah:
>df -h
> /dev/xvda1 25G 1.4G 24G 6%
EBS, pada kenyataannya, memiliki disk 25GB yang dibagikan; 1,6 gb adalah apa yang du -sh /
dikembalikan.
Di luar di EC2, itu dimulai dengan cukup tidak berbahaya ... (via lvs
)
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool docker twi-aot--- 11.86g 37.50 14.65
Namun, sistem file akan segera dipasang kembali sebagai hanya-baca. via dmesg:
[2077620.433382] Buffer I/O error on device dm-4, logical block 2501385
[2077620.437372] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 0 size 8388608 starting block 2501632)
[2077620.444394] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error [2077620.473581] EXT4-fs warning (device dm-4): ext4_end_bio:329: I/O error -28 writing to inode 4988708 (offset 8388608 size 5840896 starting block 2502912)
[2077623.814437] Aborting journal on device dm-4-8.
[2077649.052965] EXT4-fs error (device dm-4): ext4_journal_check_start:56: Detected aborted journal
[2077649.058116] EXT4-fs (dm-4): Remounting filesystem read-only
Kembali keluar di EC2 instance-land, Docker melaporkan ini: (dari docker info
)
Pool Name: docker-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 107.4 GB
Backing Filesystem: ext4
Data file:
Metadata file:
Data Space Used: 12.73 GB
Data Space Total: 12.73 GB
Data Space Available: 0 B
Metadata Space Used: 3.015 MB
Metadata Space Total: 16.78 MB
Metadata Space Available: 13.76 MB
Thin Pool Minimum Free Space: 1.273 GB
LVS membuang info ini:
--- Logical volume ---
LV Name docker-pool
VG Name docker
LV UUID xxxxxxxxxxxxxxxxxxxxxxxxxxxx
LV Write Access read/write
LV Creation host, time ip-10-0-0-65, 2017-03-25 22:37:38 +0000
LV Pool metadata docker-pool_tmeta
LV Pool data docker-pool_tdata
LV Status available
# open 2
LV Size 11.86 GiB
Allocated pool data 100.00%
Allocated metadata 17.77%
Current LE 3036
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
Apa kumpulan tipis ini, mengapa mengisi, dan bagaimana saya menghentikannya? Juga, jika saya memiliki 20+ GB gratis dari dalam wadah di / volume saya, mengapa itu berhenti menulis baru? Sejauh yang saya tahu itu tidak terhubung ke file yang menulis program saya.
Terima kasih!
sumber
Saya mengikuti saran yang diberikan pada dokumentasi AWS dan semuanya berfungsi sekarang.
Tapi saya harus menggabungkan dua solusi: menambah ruang dan menambahkan cronjob untuk menghapus file lama.
Inilah yang saya lakukan.
Pertama, saya mengubah volume
xvdcz
untuk menggunakan 50GB, bukan 12GB. Itu penyimpanan yang bisa kita lihatdocker system info
. Dalam kasus saya, selalu penuh karena saya mengunggah banyak file setiap hari..ebextensions / blockdevice-xvdcz.config
Setelah saya menambahkan cronjob untuk membersihkan file yang dihapus saya yang tidak digunakan lagi. Itu diperlukan karena Docker masih menyimpannya untuk beberapa alasan. Dalam kasus saya sekali sehari sudah cukup. Jika Anda memiliki lebih banyak unggahan daripada saya, Anda dapat mengonfigurasi cronjob untuk menjalankan berapa kali Anda perlu.
.ebextensions / cronjob.config
Sumber: https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-volumes
sumber
AWS elasticbeanstalk docker bagian Konfigurasi Lingkungan mendokumentasikan cara kerjanya:
sumber
Saya memukuli kepala saya terhadap masalah ini selama lebih dari satu hari dan akhirnya menemukan jawabannya.
AWS menggunakan
devicemapper
backend dan menciptakan volume SSD 12GB yang dipasang dan digunakan untuk gambar buruh pelabuhan. Anda harus mengganti volume yang akan dipasang melalui konsep ekstensi elasticbeanstalk dan menggunakan via CLI (sayangnya, tidak ada cara untuk melakukan ini melalui GUI mereka).Di direktori Anda memiliki
Dockerrun.aws.json
file Anda , buat direktori bernama.ebextensions
dan kemudian buat file yang berakhir di.config
dalamnya. Saya menelepon milik saya01.correctebsvolume.config
. Kemudian letakkan konten berikut di sana:option_settings: - namespace: aws:autoscaling:launchconfiguration option_name: BlockDeviceMappings value: /dev/xvdcz=snap-066cZZZZZZZZ:40:true:gp2
Saya ssh'ed ke salah satu kotak gagal saya langsung dan menemukan itu sedang memuncak
/dev/xvdcz
. Ini mungkin berbeda untuk Anda. Thesnap-066cZZZZZZZZ
kebutuhan untuk menjadi ID snapshot valid. Saya membuat gambar AMI dari instance yang gagal dan menggunakan snapshot yang dibuatnya dalam proses. Jumlah40
GB akan menjadi berapa, jadi gantilah dengan apa yang Anda butuhkan. Saya tidak tahu apatrue
atau apa yanggp2
dilakukan, tetapi mereka berasal dari data perangkat blok gambar AMI, jadi saya menyimpannya.Keajaiban
namespace
danoption_name
datang dari sini dalam dokumentasi.sumber
Hanya meningkatkan ukuran disk tidak akan menyelesaikan masalah, itu hanya akan terjadi kesalahan nanti. AWS merekomendasikan pemetaan disk baru ke wadah Anda sehingga setiap file buat / hapus file tidak mempengaruhi Layer Poller Docker.
Saya sedang mencari di sana, saya belum diuji tetapi soluction yang saya temui adalah memiliki ini di blockdevice.config saya
Hargai komentar apa pun.
sumber