帮酷LOGO
  • 显示原文与译文双语对照的内容
:floppy_disk: Kubernetes resource state sync to git inspired by rancid

  • 源代码名称:kube-backup
  • 源代码网址:http://www.github.com/pieterlange/kube-backup
  • kube-backup源代码文档
  • kube-backup源代码下载
  • Git URL:
    git://www.github.com/pieterlange/kube-backup.git
  • Git Clone代码到本地:
    git clone http://www.github.com/pieterlange/kube-backup
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/pieterlange/kube-backup
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • kube备份

    Docker Repository on QuayDocker Repository on Docker Hub

    快速kubernetes状态备份脚本,设计为kubernetes作业。 把它想象成

    为 @gianrubio 提供灵感的道具。

    设置

    在( ssh 或者 AWS CodeCommit身份验证) ( 1.5和向上) 集群中使用部署示例并部署一个 kubernetes CronJob 原语,确保将kubernetes资源定义备份到你的private git repo 。

    定义以下环境参数:

    • GIT_REPO - GIT repo url 。 需要
    • GIT_PREFIX_PATH - 存储库中子目录的路径。 默认值:.
    • NAMESPACES - 要导出的命名空间列表。 默认:全部
    • GLOBALRESOURCES - 要导出的全局资源类型的列表。 默认值:namespace
    • RESOURCETYPES - 要导出的资源类型的列表。 默认值: ingress deployment configmap svc rc ds customresourcedefinition networkpolicy statefulset storageclass cronjob 注意,Secret 对象有意不被默认的( 有关详细信息,请参见 crypt ) 导出。
    • GIT_USERNAME - 显示git用户的名称。 默认值:kube-backup
    • GIT_EMAIL - git用户的电子邮件地址。 默认值:kube-backup@example.com
    • GIT_BRANCH - 使用特定的git branch 。 默认值:master
    • GITCRYPT_ENABLE - 使用 git-crypt进行数据加密。 有关详细信息,请参见 crypt 。 默认值:false
    • GITCRYPT_PRIVATE_KEY crypt的private gpg密钥路径。 有关详细信息,请参见 crypt 。 默认值:/secrets/gpg-private.key
    • GITCRYPT_SYMMETRIC_KEY - git加密的共享对称密钥路径。 请参见 git crypt 。 默认值:/secrets/symmetric.key

    选择两种认证机制之一:

    • 当使用 AWS CodeCommit和基于AWS的策略访问,修改群集配置,为集群中的CodeCommit repo 提供GitPull和GitPush访问。 如果使用 kops,配置将类似于下面这样:
    additionalPolicies:
     node: | [ {"Effect":"Allow","Action": ["codecommit:GitPull","codecommit:GitPush" ],"Resource":"arn:aws:codecommit:<region>:<account name>:<repo-name>" } ]

    注意:在这个部署中,ssh卷和秘密不存在。

    • 使用其他存储库( 。GitHub,BitBucket,等等 ) 时,使用以下文件在 /backup/.ssh 中挂载已经配置的ssh目录:

      • known_hosts - 使用 $GIT_REPO 主机的SSH主机密钥预加载。
      • id_rsa - 允许推送到 $GIT_REPO的用户的SSH private 键。

    最简单的方法是:

    ssh-keygen -f./id_rsa
    ssh-keyscan $YOUR_GIT_HOST> known_hosts
    kubectl create secret generic kube-backup-ssh -n kube-system --from-file=id_rsa --from-file=known_hosts

    注意:如果 id_rsa 目录中没有找到,备份脚本将假定你正在使用 AWS CodeCommit 。

    可选:

    • 使用 cron格式修改 spec.schedule 中的快照频率。
    • 修改成功完成的作业数以保留在 spec.successfulJobsHistoryLimitspec.failedJobsHistoryLimit 中。
    • 如果使用 RBAC ( 1.6 + ),则使用 rbac.yaml. 中的ClusterRole和 ClusterRoleBindings

    git

    出于安全原因,默认情况下不导出 Secret 对象。 但是,有可能使用 git项目安全地存储它们。

    先决条件

    你的存储库必须已经用 git-crypt初始化。 最小配置列出 below 。 有关详细信息和完整信息,请参见使用git的

    cd repo
    git-crypt init
    cat <<EOF>. gitattributes
    *.secret.yaml filter=git-crypt diff=git-crypt
    .gitattributes!filter!diff
    EOF
    git-crypt add-gpg-user <USER_ID>
    git add -A
    git commit -a -m"initialize git-crypt"

    可选:

    • 你可以选择任何子目录来存储。gitattributes文件( 使用 GIT_PREFIX_PATH 时有用) 。
    • 你可以加密除 secret.yaml. 以外的其他文件在 gitattribute 。筛选器之前添加其他行。 你还可以使用通配符 * 来加密目录中的所有文件。
    启用git加密

    要启用加密功能,请执行以下操作:

    • 将pod环境变量 GITCRYPT_ENABLE 设置为 true

      spec:
       containers:
       - env:
       - name: GITCRYPT_ENABLE
       value:"true"
    • 创建额外的Secret 对象包含 gpg private或者对称密钥

      apiVersion: v1
      kind: Secret
      metadata:
       name: kube-backup-gpg
       namespace: kube-system
      data:
       gpg-private.key: <base64_encoded_key>
       symmetric.key: <base64_encoded_key>
    • Secret 中的密钥作为附加卷

      spec:
       containers:
       - volumeMounts:
       - mountPath:/secrets
       name: gpgkey
       volumes:
       - name: gpgkey
       secret:
       defaultMode: 420
       secretName: kube-backup-gpg
    • 将秘密对象名称添加到 RESOURCETYPES 变量

      spec:
       containers:
       - env:
       - name: RESOURCETYPES
       value:"ingress deployment configmap secret svc rc ds thirdpartyresource networkpolicy statefulset storageclass cronjob"
    • 如果使用 RBAC ( 1.6 + ),则将 secrets 添加到 resources

      rules:
      - apiGroups: ["*"]
       resources: [
      "configmaps",
      "secrets",
    • ( 可选): $GITCRYPT_PRIVATE_KEY$GITCRYPT_SYMMETRIC_KEY 变量是安装 Secret 卷的路径和该对象的项目键的名称的组合。 如果从 above 示例中更改了任何值,则可能需要相应地设置这些变量。

    结果

    所有配置的资源将按照 $namespace/$name.$type.yaml 文件结构的格式以YAML格式导出到目录树结构中。

    .
    ├── kube-system
    │ ├── attachdetach-controller.serviceaccounts.yaml
    │ ├── canal-config.configmap.yaml
    │ ├── canal.daemonset.yaml
    │ ├── canal.serviceaccounts.yaml
    │ ├── certificate-controller.serviceaccounts.yaml
    │ ├── cronjob-controller.serviceaccounts.yaml
    │ ├── daemon-set-controller.serviceaccounts.yaml
    │ ├── default.serviceaccounts.yaml
    │ ├── deployment-controller.serviceaccounts.yaml
    │ ├── disruption-controller.serviceaccounts.yaml
    │ ├── dns-controller.deployment.yaml
    │ ├── dns-controller.serviceaccounts.yaml
    │ ├── endpoint-controller.serviceaccounts.yaml
    │ ├── generic-garbage-collector.serviceaccounts.yaml
    │ ├── horizontal-pod-autoscaler.serviceaccounts.yaml
    │ ├── job-controller.serviceaccounts.yaml
    │ ├── kube-backup-gpg.secret.yaml
    │ ├── kube-backup.serviceaccounts.yaml
    │ ├── kube-backup-ssh.secret.yaml
    │ ├── kube-dns-autoscaler.configmap.yaml
    │ ├── kube-dns-autoscaler.deployment.yaml
    │ ├── kube-dns-autoscaler.serviceaccounts.yaml
    │ ├── kube-dns.deployment.yaml
    │ ├── kube-dns.serviceaccounts.yaml
    │ ├── kube-dns.service.yaml
    │ ├── kubelet.service.yaml
    │ ├── kube-prometheus-exporter-kube-controller-manager.service.yaml
    │ ├── kube-prometheus-exporter-kube-dns.service.yaml
    │ ├── kube-prometheus-exporter-kube-etcd.service.yaml
    │ ├── kube-prometheus-exporter-kube-scheduler.service.yaml
    │ ├── kube-proxy.serviceaccounts.yaml
    │ ├── kube-state-backup-new.cronjob.yaml
    │ ├── kube-sysctl.daemonset.yaml
    │ ├── letsencrypt-prod.secret.yaml
    │ ├── namespace-controller.serviceaccounts.yaml
    │ ├── node-controller.serviceaccounts.yaml
    │ ├── openvpn-ccd.configmap.yaml
    │ ├── openvpn-crl.configmap.yaml
    │ ├── openvpn.deployment.yaml
    │ ├── openvpn-ingress.service.yaml
    │ ├── openvpn-pki.secret.yaml
    │ ├── openvpn-portmapping.configmap.yaml
    │ ├── openvpn-settings.configmap.yaml
    │ ├── persistent-volume-binder.serviceaccounts.yaml
    │ ├── pod-garbage-collector.serviceaccounts.yaml
    │ ├── replicaset-controller.serviceaccounts.yaml
    │ ├── replication-controller.serviceaccounts.yaml
    │ ├── resourcequota-controller.serviceaccounts.yaml
    │ ├── route53-config.secret.yaml
    │ ├── service-account-controller.serviceaccounts.yaml
    │ ├── service-controller.serviceaccounts.yaml
    │ ├── statefulset-controller.serviceaccounts.yaml
    │ ├── sysctl-options.configmap.yaml
    │ ├── tiller-deploy.deployment.yaml
    │ ├── tiller-deploy.service.yaml
    │ ├── tiller.serviceaccounts.yaml
    │ └── ttl-controller.serviceaccounts.yaml
    ├── prd
    │ ├── initdb.configmap.yaml
    │ ├── example-app.deployment.yaml
    │ ├── example-app.ingress.yaml
    │ ├── example-app.secret.yaml
    │ ├── example-app.service.yaml
    │ ├── postgres-admin.secret.yaml
    │ ├── postgresql.deployment.yaml
    │ ├── postgresql.service.yaml
    │ ├── postgres.secret.yaml
    │ ├── prd.example.com.secret.yaml
    │ ├── redis.service.yaml
    │ └── redis-standalone.rc.yaml
    └── staging
     ├── initdb.configmap.yaml
     ├── example-app.deployment.yaml
     ├── example-app.ingress.yaml
     ├── example-app.secret.yaml
     ├── example-app.service.yaml
     ├── postgres-admin.secret.yaml
     ├── postgresql.deployment.yaml
     ├── postgresql.service.yaml
     ├── postgres.secret.yaml
     ├── staging.example.com.secret.yaml
     ├── redis.service.yaml
     └── redis-standalone.rc.yaml
    3 directories, 80 files

    这个项目是麻省理工学院授权的。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语