mirror of
https://github.com/marcel-dempers/docker-development-youtube-series.git
synced 2025-06-06 17:01:30 +00:00
wip
This commit is contained in:
parent
08fa3baaae
commit
0c8be9ddbd
156
kubernetes/velero/README.md
Normal file
156
kubernetes/velero/README.md
Normal file
@ -0,0 +1,156 @@
|
||||
# Introduction to Velero
|
||||
|
||||
## We need a Kubernetes cluster
|
||||
|
||||
Lets create a Kubernetes cluster to play with using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/)
|
||||
|
||||
```
|
||||
kind create cluster --name velero --image kindest/node:v1.19.1
|
||||
```
|
||||
|
||||
## Get a container to work in
|
||||
<br/>
|
||||
Run a small `alpine linux` container where we can install and play with `velero`: <br/>
|
||||
|
||||
```
|
||||
docker run -it --rm -v ${HOME}:/root/ -v ${PWD}:/work -w /work --net host alpine sh
|
||||
|
||||
# install curl & kubectl
|
||||
apk add --no-cache curl nano
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
|
||||
chmod +x ./kubectl
|
||||
mv ./kubectl /usr/local/bin/kubectl
|
||||
export KUBE_EDITOR="nano"
|
||||
|
||||
#test cluster access:
|
||||
/work # kubectl get nodes
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
velero-control-plane Ready master 26m v1.18.4
|
||||
|
||||
```
|
||||
|
||||
## Velero CLI
|
||||
|
||||
Lets download the `velero` command line tool <br/>
|
||||
I grabbed the `v1.5.1` release using `curl`
|
||||
|
||||
You can go to the [releases](https://github.com/vmware-tanzu/velero/releases/tag/v1.5.1) page to get it
|
||||
|
||||
```
|
||||
curl -L -o /tmp/velero.tar.gz https://github.com/vmware-tanzu/velero/releases/download/v1.5.1/velero-v1.5.1-linux-amd64.tar.gz
|
||||
tar -C /tmp -xvf /tmp/velero.tar.gz
|
||||
mv /tmp/velero-v1.5.1-linux-amd64/velero /usr/local/bin/velero
|
||||
chmod +x /usr/local/bin/velero
|
||||
|
||||
velero --help
|
||||
```
|
||||
|
||||
|
||||
## Deploy some stuff
|
||||
|
||||
```
|
||||
kubectl apply -f kubernetes/configmaps/configmap.yaml
|
||||
kubectl apply -f kubernetes/secrets/secret.yaml
|
||||
kubectl apply -f kubernetes/deployments/deployment.yaml
|
||||
kubectl apply -f kubernetes/services/service.yaml
|
||||
|
||||
kubectl get all
|
||||
```
|
||||
|
||||
## Create storage in Azure and AWS
|
||||
|
||||
In this example, we'll create a storage in AWS and Azure to try both scenarios.</br>
|
||||
You can follow along in the video </br>
|
||||
|
||||
Create a storage account and secret for: [Azure](./azure.md) </br>
|
||||
Create a storage account and secret for: [AWS](./aws.md) </br>
|
||||
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
## Deploy Velero for Azure
|
||||
|
||||
Start [here](./azure.md) </br>
|
||||
|
||||
```
|
||||
|
||||
# Azure credential file
|
||||
cat << EOF > /tmp/credentials-velero
|
||||
AZURE_STORAGE_ACCOUNT_ACCESS_KEY=${AZURE_STORAGE_ACCOUNT_ACCESS_KEY}
|
||||
AZURE_CLOUD_NAME=AzurePublicCloud
|
||||
EOF
|
||||
|
||||
velero install \
|
||||
--provider azure \
|
||||
--plugins velero/velero-plugin-for-microsoft-azure:v1.1.0 \
|
||||
--bucket $BLOB_CONTAINER \
|
||||
--secret-file /tmp/credentials-velero \
|
||||
--backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_NAME,storageAccountKeyEnvVar=AZURE_STORAGE_ACCOUNT_ACCESS_KEY,subscriptionId=$AZURE_BACKUP_SUBSCRIPTION_ID \
|
||||
--use-volume-snapshots=false
|
||||
|
||||
|
||||
kubectl -n velero get pods
|
||||
kubectl logs deployment/velero -n velero
|
||||
|
||||
```
|
||||
|
||||
## Deploy Velero for AWS
|
||||
|
||||
Start [here](./aws.md)
|
||||
|
||||
```
|
||||
|
||||
cat > /tmp/credentials-velero <<EOF
|
||||
[default]
|
||||
aws_access_key_id=$AWS_ACCESS_ID
|
||||
aws_secret_access_key=$AWS_ACCESS_KEY
|
||||
EOF
|
||||
|
||||
velero install \
|
||||
--provider aws \
|
||||
--plugins velero/velero-plugin-for-aws:v1.1.0 \
|
||||
--bucket $BUCKET \
|
||||
--backup-location-config region=$REGION \
|
||||
--snapshot-location-config region=$REGION \
|
||||
--secret-file /tmp/credentials-velero
|
||||
|
||||
kubectl -n velero get pods
|
||||
kubectl logs deployment/velero -n velero
|
||||
|
||||
```
|
||||
|
||||
## Create a Backup
|
||||
|
||||
```
|
||||
velero backup create default-namespace-backup --include-namespaces default
|
||||
|
||||
# describe
|
||||
velero backup describe default-namespace-backup
|
||||
|
||||
# logs
|
||||
velero backup logs default-namespace-backup
|
||||
```
|
||||
|
||||
## Do a Restore
|
||||
|
||||
```
|
||||
# delete all resources
|
||||
|
||||
kubectl delete -f kubernetes/configmaps/configmap.yaml
|
||||
kubectl delete -f kubernetes/secrets/secret.yaml
|
||||
kubectl delete -f kubernetes/deployments/deployment.yaml
|
||||
kubectl delete -f kubernetes/services/service.yaml
|
||||
|
||||
velero restore create default-namespace-backup --from-backup default-namespace-backup
|
||||
|
||||
# describe
|
||||
velero restore describe default-namespace-backup
|
||||
|
||||
#logs
|
||||
velero restore logs default-namespace-backup
|
||||
|
||||
# see items restored
|
||||
|
||||
kubectl get all
|
||||
```
|
108
kubernetes/velero/aws.md
Normal file
108
kubernetes/velero/aws.md
Normal file
@ -0,0 +1,108 @@
|
||||
# Run AWS CLI
|
||||
|
||||
```
|
||||
docker run -it --rm --entrypoint /bin/sh amazon/aws-cli:2.0.55
|
||||
|
||||
# install JSON tool
|
||||
yum install -y jq
|
||||
```
|
||||
|
||||
# Login to AWS
|
||||
|
||||
https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html
|
||||
|
||||
```
|
||||
# Access your "My Security Credentials" section in your profile.
|
||||
# Create an access key
|
||||
|
||||
aws configure
|
||||
|
||||
Default region name: ap-southeast-2
|
||||
Default output format: json
|
||||
|
||||
|
||||
```
|
||||
|
||||
# Create a Storage Bucket
|
||||
|
||||
```
|
||||
aws s3api create-bucket --bucket veleromarcel --region ap-southeast-2 --create-bucket-configuration LocationConstraint=ap-southeast-2
|
||||
```
|
||||
|
||||
# Create IAM User
|
||||
|
||||
```
|
||||
aws iam create-user --user-name velero
|
||||
```
|
||||
|
||||
# Setup Policy for the User
|
||||
|
||||
```
|
||||
cat > velero-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 velero \
|
||||
--policy-name velero \
|
||||
--policy-document file://velero-policy.json
|
||||
|
||||
```
|
||||
|
||||
# Create Access Key for that user
|
||||
|
||||
```
|
||||
aws iam create-access-key --user-name velero > /tmp/key.json
|
||||
|
||||
AWS_ACCESS_ID=`cat /tmp/key.json | jq .AccessKey.AccessKeyId | sed s/\"//g`
|
||||
AWS_ACCESS_KEY=`cat /tmp/key.json | jq .AccessKey.SecretAccessKey | sed s/\"//g`
|
||||
|
||||
```
|
||||
|
||||
# Export variables
|
||||
|
||||
Let's export these variables into our Velero container <br/>
|
||||
<br/>
|
||||
Copy and paste this to the velero container:
|
||||
```
|
||||
|
||||
printf "export AWS_ACCESS_ID=$AWS_ACCESS_ID \nexport AWS_ACCESS_KEY=$AWS_ACCESS_KEY\nexport BUCKET=$BUCKET \nexport REGION=$REGION\n"
|
||||
```
|
51
kubernetes/velero/azure.md
Normal file
51
kubernetes/velero/azure.md
Normal file
@ -0,0 +1,51 @@
|
||||
# Run Azure CLI
|
||||
|
||||
```
|
||||
docker run -it --rm --entrypoint /bin/sh mcr.microsoft.com/azure-cli:2.9.1
|
||||
```
|
||||
|
||||
# Login to Azure
|
||||
|
||||
```
|
||||
az login
|
||||
```
|
||||
|
||||
# Create Storage
|
||||
|
||||
```
|
||||
AZURE_BACKUP_RESOURCE_GROUP=velero
|
||||
AZURE_STORAGE_ACCOUNT_NAME=veleromarcel
|
||||
BLOB_CONTAINER=mycluster
|
||||
AZURE_BACKUP_SUBSCRIPTION_ID=
|
||||
|
||||
# set subscription
|
||||
az account set --subscription $AZURE_BACKUP_SUBSCRIPTION_ID
|
||||
# resource group
|
||||
az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
|
||||
|
||||
# storage account
|
||||
az storage account create \
|
||||
--name $AZURE_STORAGE_ACCOUNT_NAME \
|
||||
--resource-group $AZURE_BACKUP_RESOURCE_GROUP \
|
||||
--sku Standard_GRS
|
||||
|
||||
# get key
|
||||
AZURE_STORAGE_ACCOUNT_ACCESS_KEY=`az storage account keys list --account-name $AZURE_STORAGE_ACCOUNT_NAME --query "[?keyName == 'key1'].value" -o tsv`
|
||||
|
||||
# blob container
|
||||
az storage container create -n $BLOB_CONTAINER \
|
||||
--public-access off \
|
||||
--account-name $AZURE_STORAGE_ACCOUNT_NAME \
|
||||
--account-key $AZURE_STORAGE_ACCOUNT_ACCESS_KEY
|
||||
|
||||
```
|
||||
|
||||
# Export variables
|
||||
|
||||
Let's export these variables into our Velero container <br/>
|
||||
<br/>
|
||||
Copy and paste this to the velero container:
|
||||
```
|
||||
|
||||
printf "export BLOB_CONTAINER=$BLOB_CONTAINER \nexport AZURE_BACKUP_RESOURCE_GROUP=$AZURE_BACKUP_RESOURCE_GROUP \nexport AZURE_STORAGE_ACCOUNT_NAME=$AZURE_STORAGE_ACCOUNT_NAME \nexport AZURE_STORAGE_ACCOUNT_ACCESS_KEY=$AZURE_STORAGE_ACCOUNT_ACCESS_KEY \nexport AZURE_BACKUP_SUBSCRIPTION_ID=$AZURE_BACKUP_SUBSCRIPTION_ID\n"
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user