집에서 데이터 영구화
11985 단어 kubernetes
목표
집에서 Kubernetes를 사용하십니까?
VPS를 빌려 Kubernetes를 운용합니다.
그러나 쿠버넷을 활용하는 과정에서 OS를 여러 번 다시 열고 실례를 다시 만들고 싶지만 응용 프로그램의 데이터를 잃고 싶지 않다.그런 일 없어요?
해결 방법
구글 드라이브에 정기적으로 저장하는 것을 고려하다.
Rclone
로컬 파일을 모든 SaaS와 동기화할 수 있는 도구
사이드카에 넣고 정기적으로 데이터를 백업하는 것을 고려하다.
시크릿
Rclone은 동기화 대상 정보를 config 파일로 제공할 수 있습니다.
여기에도 인증 정보 등이 포함되어 있기 때문에 쿠베르네츠의 시크릿 자원으로 준비하는 것이 좋다.rclone config
명령을 사용하여 대화 형식으로 구성 파일을 만들 수 있습니다.
옆에 있는 기계에 rclone을 설치할 수 있는데 이번에는 docker로 해 봤어요.$ mkdir config
$ docker run --rm -v `pwd`/config:/config -t -i tynor88/rclone:latest rclone config --config=/config/.rclone.conf
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...
GID/UID
-------------------------------------
User uid: 911
User gid: 911
-------------------------------------
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 40-config: executing...
crontab => 0 * * * * /app/rclone.sh
chmod: /config/Rclone.sh: No such file or directory
[cont-init.d] 40-config: exited 0.
[cont-init.d] done.
[services.d] starting services
crond[199]: crond (busybox 1.24.2) started, log level 0
crond[199]: user:root entry:*/15 * * * * run-parts /etc/periodic/15min
crond[199]: user:root entry:0 * * * * run-parts /etc/periodic/hourly
crond[199]: user:root entry:0 2 * * * run-parts /etc/periodic/daily
crond[199]: user:root entry:0 3 * * 6 run-parts /etc/periodic/weekly
crond[199]: user:root entry:0 5 1 * * run-parts /etc/periodic/monthly
crond[199]: user:abc entry:0 * * * * /app/rclone.sh
[services.d] done.
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> hoge
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> 7
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> N
config/.rclone.conf가 완성되었기 때문에kubernetes에서 시크릿으로 배치합니다.$ kubectl create secret generic rclone-config --from-file=./config/.rclone.conf
주기 운행
정기적으로 rclone을 실행하는 Docker 이미지가 있습니다.이번엔 이걸로
https://hub.docker.com/r/tynor88/rclone/
배치
이번에 예를 들면, Google 드라이브와 Google 드라이브를 동기화하기 위해 gollum (git를 백엔드로 하는wiki) 을 배치할 것입니다.
처음 시작할 때 이전에 저장한 것을 복구하기 위해 Google Drive->Pod으로 동기화합니다.
이것은pod입니다.spec.initContainers에서 실행됩니다.( https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ )
시작 과정에서 Gollum 이외에 rclone 용기를 실행하고 정기적으로 Pod->Google Drive에서 동기화합니다.
그림으로 보면 이런 느낌이에요.
다음은 manifest가 상술한 manifest를 실현하는 것이다.
gollum-with-rclone.yamlapiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: gollum
name: gollum
namespace: default
spec:
selector:
matchLabels:
run: gollum
template:
metadata:
labels:
run: gollum
spec:
initContainers: # gollumのために、git initを初めにしておく
- name: init
image: golang:latest # gitがあればなんでも良い
command:
- sh
- -c
- cd /root/wikidata && git init
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: first-rclone
image: tynor88/rclone:latest
command: # rclone初回実行 (GoogleDrive -> Pod)
- sh
- -c
- /usr/bin/with-contenv sh /app/rclone.sh
env:
- name: SYNC_COMMAND
value: rclone sync GoogleDrive:/gollum /data
volumeMounts:
- mountPath: /data
name: data
- mountPath: /root
name: config
containers:
- name: gollum
image: suttang/gollum:latest # 本命のgollumイメージ
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: rclone
image: tynor88/rclone:latest # 同期用のrclone (Pod -> GoogleDrive)
imagePullPolicy: Always
env:
- name: SYNC_DESTINATION
value: GoogleDrive
- name: SYNC_DESTINATION_SUBPATH
value: gollum
- name: CRON_SCHEDULE
value: 0 * * * *
volumeMounts:
- mountPath: /data
name: data
- mountPath: /config
name: config
volumes:
- name: data # wikiのデータを入れる
emptyDir: {}
- name: config # secretからConfigを読み出す
secret:
defaultMode: 511 # 雑に0777
secretName: rclone-config
클러스터에 배포하려면 다음을 수행합니다.$ kubectl apply -f gollum-with-rclone.yaml
나온다!
주의사항
구글 드라이브에 정기적으로 저장하는 것을 고려하다.
Rclone
로컬 파일을 모든 SaaS와 동기화할 수 있는 도구
사이드카에 넣고 정기적으로 데이터를 백업하는 것을 고려하다.
시크릿
Rclone은 동기화 대상 정보를 config 파일로 제공할 수 있습니다.
여기에도 인증 정보 등이 포함되어 있기 때문에 쿠베르네츠의 시크릿 자원으로 준비하는 것이 좋다.rclone config
명령을 사용하여 대화 형식으로 구성 파일을 만들 수 있습니다.
옆에 있는 기계에 rclone을 설치할 수 있는데 이번에는 docker로 해 봤어요.$ mkdir config
$ docker run --rm -v `pwd`/config:/config -t -i tynor88/rclone:latest rclone config --config=/config/.rclone.conf
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...
GID/UID
-------------------------------------
User uid: 911
User gid: 911
-------------------------------------
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 40-config: executing...
crontab => 0 * * * * /app/rclone.sh
chmod: /config/Rclone.sh: No such file or directory
[cont-init.d] 40-config: exited 0.
[cont-init.d] done.
[services.d] starting services
crond[199]: crond (busybox 1.24.2) started, log level 0
crond[199]: user:root entry:*/15 * * * * run-parts /etc/periodic/15min
crond[199]: user:root entry:0 * * * * run-parts /etc/periodic/hourly
crond[199]: user:root entry:0 2 * * * run-parts /etc/periodic/daily
crond[199]: user:root entry:0 3 * * 6 run-parts /etc/periodic/weekly
crond[199]: user:root entry:0 5 1 * * run-parts /etc/periodic/monthly
crond[199]: user:abc entry:0 * * * * /app/rclone.sh
[services.d] done.
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> hoge
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> 7
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> N
config/.rclone.conf가 완성되었기 때문에kubernetes에서 시크릿으로 배치합니다.$ kubectl create secret generic rclone-config --from-file=./config/.rclone.conf
주기 운행
정기적으로 rclone을 실행하는 Docker 이미지가 있습니다.이번엔 이걸로
https://hub.docker.com/r/tynor88/rclone/
배치
이번에 예를 들면, Google 드라이브와 Google 드라이브를 동기화하기 위해 gollum (git를 백엔드로 하는wiki) 을 배치할 것입니다.
처음 시작할 때 이전에 저장한 것을 복구하기 위해 Google Drive->Pod으로 동기화합니다.
이것은pod입니다.spec.initContainers에서 실행됩니다.( https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ )
시작 과정에서 Gollum 이외에 rclone 용기를 실행하고 정기적으로 Pod->Google Drive에서 동기화합니다.
그림으로 보면 이런 느낌이에요.
다음은 manifest가 상술한 manifest를 실현하는 것이다.
gollum-with-rclone.yamlapiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: gollum
name: gollum
namespace: default
spec:
selector:
matchLabels:
run: gollum
template:
metadata:
labels:
run: gollum
spec:
initContainers: # gollumのために、git initを初めにしておく
- name: init
image: golang:latest # gitがあればなんでも良い
command:
- sh
- -c
- cd /root/wikidata && git init
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: first-rclone
image: tynor88/rclone:latest
command: # rclone初回実行 (GoogleDrive -> Pod)
- sh
- -c
- /usr/bin/with-contenv sh /app/rclone.sh
env:
- name: SYNC_COMMAND
value: rclone sync GoogleDrive:/gollum /data
volumeMounts:
- mountPath: /data
name: data
- mountPath: /root
name: config
containers:
- name: gollum
image: suttang/gollum:latest # 本命のgollumイメージ
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: rclone
image: tynor88/rclone:latest # 同期用のrclone (Pod -> GoogleDrive)
imagePullPolicy: Always
env:
- name: SYNC_DESTINATION
value: GoogleDrive
- name: SYNC_DESTINATION_SUBPATH
value: gollum
- name: CRON_SCHEDULE
value: 0 * * * *
volumeMounts:
- mountPath: /data
name: data
- mountPath: /config
name: config
volumes:
- name: data # wikiのデータを入れる
emptyDir: {}
- name: config # secretからConfigを読み出す
secret:
defaultMode: 511 # 雑に0777
secretName: rclone-config
클러스터에 배포하려면 다음을 수행합니다.$ kubectl apply -f gollum-with-rclone.yaml
나온다!
주의사항
Rclone은 동기화 대상 정보를 config 파일로 제공할 수 있습니다.
여기에도 인증 정보 등이 포함되어 있기 때문에 쿠베르네츠의 시크릿 자원으로 준비하는 것이 좋다.
rclone config
명령을 사용하여 대화 형식으로 구성 파일을 만들 수 있습니다.옆에 있는 기계에 rclone을 설치할 수 있는데 이번에는 docker로 해 봤어요.
$ mkdir config
$ docker run --rm -v `pwd`/config:/config -t -i tynor88/rclone:latest rclone config --config=/config/.rclone.conf
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...
GID/UID
-------------------------------------
User uid: 911
User gid: 911
-------------------------------------
[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 40-config: executing...
crontab => 0 * * * * /app/rclone.sh
chmod: /config/Rclone.sh: No such file or directory
[cont-init.d] 40-config: exited 0.
[cont-init.d] done.
[services.d] starting services
crond[199]: crond (busybox 1.24.2) started, log level 0
crond[199]: user:root entry:*/15 * * * * run-parts /etc/periodic/15min
crond[199]: user:root entry:0 * * * * run-parts /etc/periodic/hourly
crond[199]: user:root entry:0 2 * * * run-parts /etc/periodic/daily
crond[199]: user:root entry:0 3 * * 6 run-parts /etc/periodic/weekly
crond[199]: user:root entry:0 5 1 * * run-parts /etc/periodic/monthly
crond[199]: user:abc entry:0 * * * * /app/rclone.sh
[services.d] done.
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> hoge
Type of storage to configure.
Choose a number from below, or type in your own value
1 / Amazon Drive
\ "amazon cloud drive"
2 / Amazon S3 (also Dreamhost, Ceph, Minio)
\ "s3"
3 / Backblaze B2
\ "b2"
4 / Dropbox
\ "dropbox"
5 / Encrypt/Decrypt a remote
\ "crypt"
6 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
7 / Google Drive
\ "drive"
8 / Hubic
\ "hubic"
9 / Local Disk
\ "local"
10 / Microsoft OneDrive
\ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
12 / Yandex Disk
\ "yandex"
Storage> 7
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> N
config/.rclone.conf가 완성되었기 때문에kubernetes에서 시크릿으로 배치합니다.$ kubectl create secret generic rclone-config --from-file=./config/.rclone.conf
주기 운행
정기적으로 rclone을 실행하는 Docker 이미지가 있습니다.이번엔 이걸로
https://hub.docker.com/r/tynor88/rclone/
배치
이번에 예를 들면, Google 드라이브와 Google 드라이브를 동기화하기 위해 gollum (git를 백엔드로 하는wiki) 을 배치할 것입니다.
처음 시작할 때 이전에 저장한 것을 복구하기 위해 Google Drive->Pod으로 동기화합니다.
이것은pod입니다.spec.initContainers에서 실행됩니다.( https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ )
시작 과정에서 Gollum 이외에 rclone 용기를 실행하고 정기적으로 Pod->Google Drive에서 동기화합니다.
그림으로 보면 이런 느낌이에요.
다음은 manifest가 상술한 manifest를 실현하는 것이다.
gollum-with-rclone.yamlapiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: gollum
name: gollum
namespace: default
spec:
selector:
matchLabels:
run: gollum
template:
metadata:
labels:
run: gollum
spec:
initContainers: # gollumのために、git initを初めにしておく
- name: init
image: golang:latest # gitがあればなんでも良い
command:
- sh
- -c
- cd /root/wikidata && git init
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: first-rclone
image: tynor88/rclone:latest
command: # rclone初回実行 (GoogleDrive -> Pod)
- sh
- -c
- /usr/bin/with-contenv sh /app/rclone.sh
env:
- name: SYNC_COMMAND
value: rclone sync GoogleDrive:/gollum /data
volumeMounts:
- mountPath: /data
name: data
- mountPath: /root
name: config
containers:
- name: gollum
image: suttang/gollum:latest # 本命のgollumイメージ
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: rclone
image: tynor88/rclone:latest # 同期用のrclone (Pod -> GoogleDrive)
imagePullPolicy: Always
env:
- name: SYNC_DESTINATION
value: GoogleDrive
- name: SYNC_DESTINATION_SUBPATH
value: gollum
- name: CRON_SCHEDULE
value: 0 * * * *
volumeMounts:
- mountPath: /data
name: data
- mountPath: /config
name: config
volumes:
- name: data # wikiのデータを入れる
emptyDir: {}
- name: config # secretからConfigを読み出す
secret:
defaultMode: 511 # 雑に0777
secretName: rclone-config
클러스터에 배포하려면 다음을 수행합니다.$ kubectl apply -f gollum-with-rclone.yaml
나온다!
주의사항
이번에 예를 들면, Google 드라이브와 Google 드라이브를 동기화하기 위해 gollum (git를 백엔드로 하는wiki) 을 배치할 것입니다.
처음 시작할 때 이전에 저장한 것을 복구하기 위해 Google Drive->Pod으로 동기화합니다.
이것은pod입니다.spec.initContainers에서 실행됩니다.( https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ )
시작 과정에서 Gollum 이외에 rclone 용기를 실행하고 정기적으로 Pod->Google Drive에서 동기화합니다.
그림으로 보면 이런 느낌이에요.
다음은 manifest가 상술한 manifest를 실현하는 것이다.
gollum-with-rclone.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
run: gollum
name: gollum
namespace: default
spec:
selector:
matchLabels:
run: gollum
template:
metadata:
labels:
run: gollum
spec:
initContainers: # gollumのために、git initを初めにしておく
- name: init
image: golang:latest # gitがあればなんでも良い
command:
- sh
- -c
- cd /root/wikidata && git init
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: first-rclone
image: tynor88/rclone:latest
command: # rclone初回実行 (GoogleDrive -> Pod)
- sh
- -c
- /usr/bin/with-contenv sh /app/rclone.sh
env:
- name: SYNC_COMMAND
value: rclone sync GoogleDrive:/gollum /data
volumeMounts:
- mountPath: /data
name: data
- mountPath: /root
name: config
containers:
- name: gollum
image: suttang/gollum:latest # 本命のgollumイメージ
volumeMounts:
- mountPath: /root/wikidata
name: data
- name: rclone
image: tynor88/rclone:latest # 同期用のrclone (Pod -> GoogleDrive)
imagePullPolicy: Always
env:
- name: SYNC_DESTINATION
value: GoogleDrive
- name: SYNC_DESTINATION_SUBPATH
value: gollum
- name: CRON_SCHEDULE
value: 0 * * * *
volumeMounts:
- mountPath: /data
name: data
- mountPath: /config
name: config
volumes:
- name: data # wikiのデータを入れる
emptyDir: {}
- name: config # secretからConfigを読み出す
secret:
defaultMode: 511 # 雑に0777
secretName: rclone-config
클러스터에 배포하려면 다음을 수행합니다.$ kubectl apply -f gollum-with-rclone.yaml
나온다!주의사항
총결산
집에서 Kubernetes 클러스터를 구축할 때 문제가 되는 데이터의 영속화에 대해 Rclone을 사용한 Google Drive에 대한 정기적인 백업 스크립트를 소개합니다.
파일이면 무엇이든 동기화할 수 있기 때문에 모든 데이터가 오래 지속되는 것이 특징이다.
Kubernetes의 변화가 매우 빠르기 때문에 최신 Kubernetes 환경이 자주 있는 것은 매우 좋은 학습이기 때문에 우리는 Kubernetes 집단을 추천합니다.
(Raspberry pi를 사용하여 Kubernetes를 구축하는 방법도 소개되었으니 참고하세요https://qiita.com/hatotaka/items/48a88ecb190e1f5e03c3
이 항목은 작업 시간에 ZLab 멤버Z Lab Advent Calendar 2017로 작성되었습니다.
Reference
이 문제에 관하여(집에서 데이터 영구화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/inajob/items/7b61904586d0816dfe5f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(집에서 데이터 영구화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/inajob/items/7b61904586d0816dfe5f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)