<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

          共 6685字,需瀏覽 14分鐘

           ·

          2023-10-17 14:41

          簡介

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

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

          操作

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

          導(dǎo)入庫

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

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

          # 獲取當(dāng)前時間
          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 二進(jìn)制的,我就網(wǎng)上找了一個 arm 的鏡像復(fù)制出來,自己做了一個鏡像,下面是 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/



          10T 技術(shù)資源大放送!包括但不限于:Linux、虛擬化、容器、云計算、網(wǎng)絡(luò)、Python、Go 等。在 開源Linux 公眾號內(nèi)回復(fù) 10T,即可免費獲??!

          有收獲,點個在看 

          瀏覽 383
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  在线精品播放 | 狠狠躁夜夜躁人爽 | av在线www | 91在线18 | 欧美人精品人妻在线 |