KUBERNETES-BERATUNG: SCHRITT FÜR SCHRITT ZUM HEPTIO ARK (VELERO) BACKUP

KUBERNETES-BERATUNG: SCHRITT FÜR SCHRITT ZUM HEPTIO ARK (VELERO) BACKUP

Ihr Step-by-Step Guide für Heptio Ark (Velero) Set-Ups

Heptio Ark wurde vor kurzem in Velero umbenannt. Velero ist ein Cloud-natives Disaster-Recovery- und Datenmigrationstool für Kubernetes Applikationen.

 

Heptio Ark wird von AWS, GCP und Azure unterstützt. Es existieren zahlreiche Fragen rund um das Heptio Ark Backup. Wir möchten daher unsere Erfahrung mit dem Einsatz von Ark in Verbindung mit Kubernetes auf AWS mit Ihnen teilen. Auf dieser Seite sehen wir uns den Prozess an, den wir mit unseren Kunden im Rahmen der Kubernetes-Beratung oftmals durchlaufen.

 

In der neuesten Veröffentlichung unserer Kubernetes-Beratung Reihe, führen wir Sie durch den Prozess.

Heptio Ark Buckets (S3)

 

Ark benötigt einen S3-Bucket, um das Pod-Status-Archiv des etcd zu speichern.

Erstellen wir daher im ersten Schritt einen Bucket:

aws s3api create-bucket 
    --bucket <YOUR_BUCKET> 
    --region <YOUR_REGION> 
    --create-bucket-configuration LocationConstrain <YOUR_REGION>

Im nächsten Schritt erstellen wir einen IAM User:

aws iam create-user --user-name heptio-ark

Dann wird die Benutzerrichtlinie definiert:

BUCKET=<YOUR_BUCKET>
 cat > heptio-ark-policy.json <<EOF
 {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "ec2:DescribeVolumes",
                 "ec2:DescribeSnapshots",
                 "ec2:CreateTags",
                 "ec2:CreateVolume",
                 "ec2:CreateSnapshot",
                 "ec2:DeleteSnapshot"
             ],
             "Resource": "*"
         },
         {
             "Effect": "Allow",
             "Action": [
                 "s3:GetObject",
                 "s3:DeleteObject",
                 "s3:PutObject",
                 "s3:AbortMultipartUpload",
                 "s3:ListMultipartUploadParts"
             ],
             "Resource": [
                 "arn:aws:s3:::${BUCKET}/*"
             ]
         },
         {
             "Effect": "Allow",
             "Action": [
                 "s3:ListBucket"
             ],
             "Resource": [
                 "arn:aws:s3:::${BUCKET}"
             ]
         }
     ]
 }
 EOF
 
 aws iam put-user-policy 
   --user-name heptio-ark 
   --policy-name heptio-ark 
   --policy-document file://heptio-ark-policy.json

MEHR

Nun müssen wir sowohl einen Access Key als auch einen Secret Key erstellen:

aws iam create-access-key --user-name heptio-ark

Dies ist der Sollzustand:

{
     "AccessKey": {
           "UserName": "heptio-ark",
           "Status": "Active",
           "CreateDate": "2017-07-31T22:24:41.576Z",
           "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>,
           "AccessKeyId": <AWS_ACCESS_KEY_ID>
       }
  }

Nun erstellen wir unsere credentials-ark-Datei:

[default]
 aws_access_key_id=<AWS_ACCESS_KEY_ID>
 aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>

Jetzt lässt sich der Server in Kubernetes erstellen

Heptio Ark Velero
# Copyright 2017 the Heptio Ark contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: backups.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: backups
    kind: Backup
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: schedules.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: schedules
    kind: Schedule
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: restores.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: restores
    kind: Restore
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: configs.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: configs
    kind: Config
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: downloadrequests.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: downloadrequests
    kind: DownloadRequest
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: deletebackuprequests.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: deletebackuprequests
    kind: DeleteBackupRequest
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: podvolumebackups.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: podvolumebackups
    kind: PodVolumeBackup
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: podvolumerestores.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: podvolumerestores
    kind: PodVolumeRestore
 
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: resticrepositories.ark.heptio.com
  labels:
    component: ark
spec:
  group: ark.heptio.com
  version: v1
  scope: Namespaced
  names:
    plural: resticrepositories
    kind: ResticRepository
 
---
apiVersion: v1
kind: Namespace
metadata:
  name: heptio-ark
 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: ark
  namespace: heptio-ark
  labels:
    component: ark
 
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: ark
  labels:
    component: ark
subjects:
  - kind: ServiceAccount
    namespace: heptio-ark
    name: ark
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

Erstellen Sie die Datei prereqs.yaml:

Deployment auf Kubernetes:

kubectl apply -f prereqs.yaml

Nun erstellen wir ein Kubernetes-Secret aus unserer Credentials-Heptio Ark (Velerio)-Datei:

kubectl create secret generic cloud-credentials 
    --namespace <ARK_NAMESPACE> 
    --from-file cloud=credentials-ark

Erstellen der Dateien config.yaml und deployment.yaml:

# Copyright 2017 the Heptio Ark contributors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
---
apiVersion: ark.heptio.com/v1
kind: Config
metadata:
  namespace: heptio-ark
  name: default
persistentVolumeProvider:
  name: aws
  config:
    region: <YOUR_REGION>
backupStorageProvider:
  name: aws
  bucket: <YOUR_BUCKET>
  # Uncomment the below line to enable restic integration.
  # The format for resticLocation is <bucket>[/<prefix>],
  # e.g. "my-restic-bucket" or "my-restic-bucket/repos".
  # This MUST be a different bucket than the main Ark bucket
  # specified just above.
  # resticLocation: <YOUR_RESTIC_LOCATION>
  config:
    region: <YOUR_REGION>
backupSyncPeriod: 30m
gcSyncPeriod: 30m
scheduleSyncPeriod: 1m
restoreOnlyMode: false
1 # Copyright 2017 the Heptio Ark contributors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     https://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 ---
16 apiVersion: apps/v1beta1
17 kind: Deployment
18 metadata:
19 namespace: heptio-ark
20  name: ark
21 spec:
22  replicas: 1
23  template:
24    metadata:
25     labels:
26       component: ark
27     annotations:
28        prometheus.io/scrape: "true"
29        prometheus.io/port: "8085"
30        prometheus.io/path: "/metrics"
31    spec:
32      restartPolicy: Always
33      serviceAccountName: ark
34      containers:
35        - name: ark
36          image: gcr.io/heptio-images/ark:latest
37          command:
38            - /ark
39         args:
40            - server
41          volumeMounts:
42            - name: cloud-credentials
43              mountPath: /credentials
44            - name: plugins
45              mountPath: /plugins
46            - name: scratch
47              mountPath: /scratch
48          env:
49            - name: AWS_SHARED_CREDENTIALS_FILE
50              value: /credentials/cloud
51            - name: ARK_SCRATCH_DIR
52              value: /scratch
53      volumes:
54        - name: cloud-credentials
55          secret:
56            secretName: cloud-credentials
57        - name: plugins
58          emptyDir: {}
59        - name: scratch
60          emptyDir: {}

Deployment auf Kubernetes:

kubectl apply -f config.yaml
kubectl apply -f deployment.yaml

Nun werden die Heptio Ark (Velero) Backups konfiguriert

 

Zuerst erstellen wir die tägliche ausführbare Datei daily.yaml:

apiVersion: ark.heptio.com/v1
kind: Schedule
metadata:
  name: daily
  namespace: heptio-ark
spec:
  schedule: 5 0 * * *
  template:
    excludedNamespaces: null
    excludedResources: null
    hooks:
      resources: null
    includeClusterResources: null
    includedNamespaces:
    - '*'
    includedResources: null
    labelSelector: null
    snapshotVolumes: true
    ttl: 168h0m0s

Deployen:

kubectl apply -f daily.yaml

Prüfen:

kubectl -n heptio-ark get schedules.ark.heptio.com
 
NAME      AGE
daily     13h
1 kubectl -n heptio-ark get backups.ark.heptio.com
2
3 NAME                   AGE
4 daily-20180814220346   13h
5 daily-20180815000534   11h

S3-Bucket in AWS prüfen:

aws s3 ls <BUCKET_NAME>
 
    PRE daily-20180814220346/
    PRE daily-20180815000534/

Snapshots prüfen:

aws ec2 describe-snapshots
 
{
            "Description": "",
            "Tags": [
                {
                    "Value": "owned",
                    "Key": "kubernetes.io/cluster/aws.cluster.com"
                },
                {
                    "Value": "internal-services",
                    "Key": "kubernetes.io/created-for/pvc/namespace"
                },
                {
                    "Value": "aws.cluster.com",
                    "Key": "KubernetesCluster"
                },
                {
                    "Value": "daily-20180814220346",
                    "Key": "ark.heptio.com/backup"
                },
                {
                    "Value": "pvc-37895bcc-67ec-11e8-b075-0689fdf74ef8",
                    "Key": "ark.heptio.com/pv"
                },
                {
                    "Value": "pvc-37895bcc-67ec-11e8-b075-0689fdf74ef8",
                    "Key": "kubernetes.io/created-for/pv/name"
                },
                {
                    "Value": "prometheus-claim0",
                    "Key": "kubernetes.io/created-for/pvc/name"
                },
                {
                    "Value": "aws.cluster.com-dynamic-pvc-37895bcc-67ec-11e8-b075-0689fdf74ef8",
                    "Key": "Name"
                }
            ],
            "Encrypted": false,
            "VolumeId": "vol-0733b80fe4057339a",
            "State": "completed",
            "VolumeSize": 489,
            "StartTime": "2018-08-14T22:03:49.000Z",
            "Progress": "100%",
            "OwnerId": "412224592913",
            "SnapshotId": "snap-04173b3945360a237"
        },

Laden Sie den Heptio Ark-Client herunter, um ihn zu nutzen: https://github.com/heptio/ark/releases

 

Wenn Sie die oben beschriebenen Schritte durchlaufen haben, haben Sie die erforderliche Infrastruktur für Ihre Heptio-Ark-Backups realisiert – von der Erstellung des S3-Buckets und -Servers in Kubernetes bis hin zum Konfigurationsprozess. Sie möchten mehr über die Verwaltung von Secrets und Consul erfahren? Dann empfehlen wir Ihnen folgenden Artikel aus unserer Reihe „Kubernetes-Beratung. Mehr zum Thema Kubernetes-Sicherheit lesen Sie.

 

Mit Firmensitz in München, deutschem Management und Nearshore Tech-Expertise, hat Krusche & Company mehr als 20 Jahre Erfahrung im Outsourcing von Software-Entwicklung und bei der IT-Beratung. Zögern Sie nicht uns anzusprechen, falls Ihr Unternehmen kompetente Unterstützung bei Kubernetes und Heptio Ark/Velero, oder anderen Themen wie DevOps, Cloud und Web Development benötigt!

Kommentar hinzufügen

E-Mail-Adresse ist schon registriert. Bitte benutze Das Login-Formular oder nenne eine andere.

Du hast einen falschen Nutzernamen oder Passwort eingegeben

Sorry that something went wrong, repeat again!
Kontaktieren Sie uns