<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          會玩,K8s 通過 Cronjob 來定期備份 Etcd

          共 3790字,需瀏覽 8分鐘

           ·

          2022-01-14 22:21


          簡介

          家里有兩個 k8s,樹莓派使用的是 k3s,nuc 上就是正常的 x86 的 k8s,樹莓派 k3s 使用的是 mysql,mysql 也是使用 cronjob 每天跑的備份,但是 nuc 中的 etcd 一直沒有備份過,所以今天就準備備份下。

          要做的事情很簡單,就是 etcd 快照,完了之后就直接扔到 minio 中。

          操作

          本來想的是使用 python 的 etcd 庫做備份的,但是不知道為什么依賴一直沒有安裝好,索性就不裝逼了直接使用 etcd cli 去 snapshot,因為 etcd 的備份需要使用證書,所以就直接拿出證書放到項目的 ssl 目錄下面了。

          導入庫

          import?os
          import?time
          from?minio?import?Minio
          from?minio.error?import?S3Error

          下面是腳本的一些配置參數(shù)

          #?獲取當前時間
          now=time.strftime("%Y%m%d",?time.localtime())
          #?一些配置參數(shù)
          etcd_url=""
          cacert="./ssl/ca.pem"
          cert="./ssl/node-node1.pem"
          key="./ssl/node-node1-key.pem"
          backup_file_name="etcd-"+?now

          沒錯,snapshot 文件就使用時間去命名了。

          之后就是創(chuàng)建快照函數(shù)

          def?create_snapshot():
          ????command="ETCDCTL_API=3?etcdctl?--endpoints="?+?etcd_url?+?"?--cacert="?+?cacert?+?"?--cert="?+?cert?+?"?--key="+?key?+?"?snapshot?save?"?+?backup_file_name
          ????os.system(command=command)

          完了之后就直接上傳到 minio

          def?upload_to_minio():
          ????client=Minio(
          ????????"oss.example.cn:9000",
          ????????access_key="",
          ????????secret_key="",
          ????????secure=False
          ????)
          ????found=client.bucket_exists("etcd-backup")
          ????if?not?found:
          ????????client.make_bucket("etcd-backup")
          ????????print("etcd-backup?bucket?created")
          ????else:
          ????????pass
          ????client.fput_object("etcd-backup",backup_file_name,backup_file_name)

          因為我的 minio 是沒有配置 https 的所以配置了secure=False

          之后就是主函數(shù)

          if?__name__?==?"__main__":
          ????try:
          ????????create_snapshot()
          ????except?Exception?as?e:
          ????????print(e)
          ????try:
          ????????upload_to_minio()
          ????except?S3Error?as?e:
          ????????print("upload?failed:?"+?e)

          接著就是 cronjob 的配置

          apiVersion:?batch/v1beta1
          kind:?CronJob
          metadata:
          ??creationTimestamp:?null
          ??name:?etcd-backup
          ??namespace:?cronjob
          spec:
          ??failedJobsHistoryLimit:?5
          ??jobTemplate:
          ????metadata:
          ??????creationTimestamp:?null
          ????spec:
          ??????template:
          ????????metadata:
          ??????????creationTimestamp:?null
          ????????spec:
          ??????????containers:
          ??????????-?image:?registry.bboysoul.cn/rpi/etcd-backup:87abd366c81cbe4b7d0edb20670a5755e0506d13
          ????????????imagePullPolicy:?IfNotPresent
          ????????????name:?etcd-backup
          ????????????resources:?{}
          ??????????restartPolicy:?Never
          ??schedule:?0?3?*?*?*
          ??successfulJobsHistoryLimit:?5
          status:?{}

          之后就是配置流水線,我使用的是 drone 加 argocd,這里有個問題就是 argocd 是沒有 arm 二進制的,我就網(wǎng)上找了一個 arm 的鏡像復制出來,自己做了一個鏡像,下面是 dockerfile

          FROM?debian:stable-slim
          RUN?apt?update?-y?&&?\
          ????apt?install?git?-y?&&?\
          ????rm?-rf?/var/lib/apt/lists/*

          COPY?./argocd?/bin
          COPY?./kubectl?/bin

          然后是 drone 的流水線


          kind:?pipeline
          type:?kubernetes
          name:?build

          platform:
          ??os:?linux
          ??arch:?arm

          steps:
          -?name:?docker
          ??image:?plugins/docker
          ??settings:
          ????username:?????
          ????password:????
          ????repo:?registry.bboysoul.cn/rpi/etcd-backup
          ????registry:?registry.bboysoul.cn
          ????tags:
          ??????-?latest
          ??????-?${DRONE_COMMIT_SHA}

          -?name:?sync?app
          ??image:?bboysoul/argocd:v2.0.0-1
          ??commands:
          ????-?git?clone???????
          ????-?cd?argocd-yaml/etcd-backup
          ????-?kubectl?set?image?-f?cronjob.yaml?etcd-backup=registry.bboysoul.cn/rpi/etcd-backup:${DRONE_COMMIT_SHA}?--local?--dry-run=client?-o?yaml?>temp
          ????-?mv?temp?cronjob.yaml
          ????-?git?add?.
          ????-?git?commit?-m?"change?image?registry.bboysoul.cn/rpi/etcd-backup:${DRONE_COMMIT_SHA}"
          ????-?git?push?origin?master
          ????-?argocd?login?--insecure?--username???????--password????????10.10.100.76
          ????-?argocd?app?sync?etcd-bakcup
          ????-?argocd?app?wait?etcd-bakcup

          argocd 的 app

          apiVersion:?argoproj.io/v1alpha1
          kind:?Application
          metadata:
          ??name:?'etcd-bakcup'
          spec:
          ??destination:
          ????namespace:?'cronjob'
          ????server:?'?????'
          ??source:
          ????path:?'./etcd-backup'
          ????repoURL:?'????????????'
          ????targetRevision:?HEAD
          ??project:?'default'

          之后看下怎么完善下加個備份完成之后的通知啊什么的。

          原文鏈接:https://www.bboy.app/2022/01/11/k8s%E9%85%8D%E7%BD%AEcronjob%E5%A4%87%E4%BB%BDetcd/


          你可能還喜歡

          點擊下方圖片即可閱讀

          eBPF 和 Wasm:探索服務網(wǎng)格數(shù)據(jù)平面的未來

          云原生是一種信仰???

          關注公眾號

          后臺回復?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點擊?"閱讀原文"?獲取更好的閱讀體驗!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品多人P群无码视频 | 夜夜爽夜夜操 | A片免费网址 | 无码在线专区 | av777777 |