컨테이너 환경에서 백업을 하기 위한 방법으로 Veeam에서 제공하는 Kasten 설치
설치 환경은 Tanzu 1.4 버전으로 진행
1. Requirements helm 설치, Helm .
2. 환경 vSphere : 7.0
vSAN
NSX : 3.2
AVI : 21.1.1
Tanzu: 1.4
Ingress: Contour
3. 설치 Kasten은 백업으로 유명한 Veeam에서 인수를 하여 컨테이너 환경에서 백업을 도와준다.
3.1. Helm 설치
1
2
3
4
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
3.2. Kasten Repo Update
1
2
3
helm repo add kasten https://charts.kasten.io/
helm repo update
helm search repo kasten
Kasten Repo Check
3.3. Kasten Install
SSL 구성
Namespace를 생성 해준다.
1
kubectl create ns kasten-io
Kasten을 SSL을 구성 하려면 아래와 같이 인증서를 생성 후 Secret을 생성 해준다. 만약 SSL이 필요 없다면 아래는 패스해도 무관 하다.
1
kubectl create secret tls kasten-tls --cert= /data/cert/yourodmain.com.crt --key= /data/cert/yourdomain.com.key -n kasten-io
helm을 통해 Kasten을 설치 하기 위해 아래와 같이 실행을 한다.
Ingress를 사용하는 방식중 Token으로 접속 할 수 있게 구성 한다.
1
2
3
4
5
6
7
8
helm install k10 kasten/k10 \
--set ingress.create= true \
--set ingress.class= contour \
--set auth.tokenAuth.enabled= true \
--set ingress.tls.enabled= true \
--set ingress.tls.secretName= kasten-tls \
--set ingress.host= kasten.tkg.io \
-n kasten-io
만약 HTTPS로 구성 하면 자동으로 SSL Redirect를 해주기 위해서 ingress를 확인 후 Annotation을 설정 해준다.
1
2
kubectl get ing
kubectl annotate ing k10-ingress -n kasten-io ingress.kubernetes.io/force-ssl-redirect=true
3.4. 배포 완료 Kasten Complate
3.5. Annotation 설정 완료 Kasten ingress Annotation
3.6. 접속 방법
접속을 하기 위해 유저 생성
TOKEN으로 접속하기 위해 유저를 생성 한다.
1
kubectl create serviceaccount my-kasten-sa --namespace kasten-io
TOKEN 확인 방법
1
2
sa_secret = $( kubectl get serviceaccount my-kasten-sa -o jsonpath = "{.secrets[0].name}" --namespace kasten-io)
kubectl get secret $sa_secret --namespace kasten-io -ojsonpath= "{.data.token}{'\n'}" | base64 --decode
우선 Ingress로 구성을 했지만 여기선 포트 포워딩으로 설명 하겠다.
1
kubectl --namespace kasten-io port-forward service/gateway 8080:8000
포트 포워딩을 위해 다른 SSH를 오픈 한다.
1
ssh root@{ 포트포워딩 한 OS} -L 8080:localhost:8080
접속시 성공을 한 것을 확인 할 수 있다.
1
2
kubectl get ing
kubectl annotate ing k10-ingress -n kasten-io ingress.kubernetes.io/force-ssl-redirect=true
4. K10 Auth LDAP 설정
K10 Auth 설정
values 파일을 다운로드 받는다.
1
helm show values kasten/k10 > k10.yaml
Auth라는 부분을 찾은 후 아래 부분을 수정 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ldap:
enabled: true
restartPod: false # Enable this value to force a restart of the authentication service pod
dashboardURL: "http://kasten.tkg.io/k10" #The URL for accessing K10's dashboard
host: "tanzu-dns.tkg.io:389" ##ldap 접속 정보
insecureNoSSL: true
insecureSkipVerifySSL: true
startTLS: false
bindDN: "cn=administrator,cn=users,dc=tkg,dc=io"
bindPW: "Passw0rd"
bindPWSecretName: ""
userSearch:
baseDN: "ou=tanzu,dc=tkg,dc=io"
filter: ( objectClass = person)
username: sAMAccountName
idAttr: DN
emailAttr: mail
nameAttr: sAMAccountName
preferredUsernameAttr: ""
groupSearch:
baseDN: "ou=tanzu,dc=tkg,dc=io"
filter: ( objectClass = group)
userMatchers:
- userAttr: DN
groupAttr: member
nameAttr: name
secretName: "" # The Kubernetes Secret that contains OIDC settings
usernameClaim: "email"
usernamePrefix: ""
groupnameClaim: "groups"
groupnamePrefix: ""
아래와 같이 실행을 해준다.
1
2
3
4
5
6
7
8
9
10
helm install k10 kasten/k10 \
--set ingress.create= true \
--set ingress.class= contour \
--set ingress.tls.enabled= true \
--set ingress.tls.secretName= kasten-tls \
--set ingress.host= "kasten.tkg.io" \
--set auth.k10AdminUsers[ 0]= 'my1208@openbase.co.kr' \
--set auth.k10AdminGroups[ 0]= "tkg" \
-f k10.yaml \
-n kasten-io
또는 아래와 같이 업그레이드를 해준다. 만약 실패 하면 삭제 후 다시 Install 해주면 된다.
1
2
3
4
5
6
7
8
9
10
helm upgrade k10 kasten/k10 \
--set ingress.create= true \
--set ingress.class= contour \
--set ingress.tls.enabled= true \
--set ingress.tls.secretName= kasten-tls \
--set ingress.host= "kasten.tkg.io" \
--set auth.k10AdminUsers[ 0]= 'my1208@openbase.co.kr' \
--set auth.k10AdminGroups[ 0]= "tkg" \
-f k10.yaml \
-n kasten-io
4.1. 완료 화면 Kasten Auth Integration
Kasten Auth Integration
5. NFS 연동
카스텐에서 스토리지를 저정하기 위해 여러가지 방법이 있지만 우선 NFS 연동을 하여 백업을 하는 방법에 대해서 기술
5.1. PVC 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
kubectl apply -f kasten-io -f - << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
mountOptions:
- hard
- nfsvers=3.0
nfs:
path: /volume1/Cloud-Home/08.VEEAM
server: 10.253.1.254
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
namespace: kasten-io
spec:
storageClassName: nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
EOF
PVC 생성 완료 확인
5.2. 카스텐 설정
카스텐 Locations 설정
카스텐 NFS 설정
카스텐 프로파일 설정 완료 확인
6. MINIO 연동 MINIO를 구성 하려면 먼저 Erasure Code와 Immutability가 되어야 한다.
참고 링크 MINIO 참조
MINIO를 컨테이너 형태로 배포를 하게 되면 우선 Immutability를 지원 하지 않는 것으로 보인다. 그래서 별도로 VM을 생성 해서 진행
6.1. VM 설정 VM을 생성 할때 스토리지를 OS가 저장되는 HDD를 제외한 4개를 구성 후 배포를 완료 한다.
VM 생성
6.2 FDISK 생성
VOLUME 생성
모든 HDD를 FDISK구성 해준다. 순서는 (n > p > t > 8e > w) 로 입력 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
fdisk /dev/sdb1
fdisk /dev/sdc1
fdisk /dev/sdd1
fdisk /dev/sde1
Welcome to fdisk ( util-linux 2.31.1) .
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xab657906.
Command ( m for help ) : n
Partition type
p primary ( 0 primary, 0 extended, 4 free)
e extended ( container for logical partitions)
Select ( default p) : p
Partition number ( 1-4, default 1) :
First sector ( 2048-209715199, default 2048) :
Last sector, +sectors or +size{ K,M,G,T,P} ( 2048-209715199, default 209715199) :
Created a new partition 1 of type 'Linux' and of size 100 GiB.
Command ( m for help ) : t
Selected partition 1
Hex code ( type L to list all codes) : 8e
Changed type of partition 'Linux' to 'Linux LVM' .
Command ( m for help ) : w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
VOLUME을 생성해 준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
pvcreate /dev/sdb1
vgcreate vg_xfs_minio_1 /dev/sdb1
lvcreate -L +99G -n xfs_minio_1 vg_xfs_minio_1
mkfs.xfs /dev/vg_xfs_minio_1/xfs_minio_1
mkdir /root/xfs_minio_1
mount /dev/vg_xfs_minio_1/xfs_minio_1 /root/xfs_minio_1/
df -hT /root/xfs_minio_1/
pvcreate /dev/sdc1
vgcreate vg_xfs_minio_2 /dev/sdc1
lvcreate -L +99G -n xfs_minio_2 vg_xfs_minio_2
mkfs.xfs /dev/vg_xfs_minio_2/xfs_minio_2
mkdir /root/xfs_minio_2
mount /dev/vg_xfs_minio_2/xfs_minio_2 /root/xfs_minio_2/
df -hT /root/xfs_minio_2/
pvcreate /dev/sdd1
vgcreate vg_xfs_minio_3 /dev/sdd1
lvcreate -L +99G -n xfs_minio_3 vg_xfs_minio_3
mkfs.xfs /dev/vg_xfs_minio_3/xfs_minio_3
mkdir /root/xfs_minio_3
mount /dev/vg_xfs_minio_3/xfs_minio_3 /root/xfs_minio_3/
df -hT /root/xfs_minio_3/
pvcreate /dev/sde1
vgcreate vg_xfs_minio_4 /dev/sde1
lvcreate -L +99G -n xfs_minio_4 vg_xfs_minio_4
mkfs.xfs /dev/vg_xfs_minio_4/xfs_minio_4
mkdir /root/xfs_minio_4
mount /dev/vg_xfs_minio_4/xfs_minio_4 /root/xfs_minio_4/
df -hT /root/xfs_minio_4/
부팅 후에도 마운투가 될 수 있게 fstab에 저장해준다.
blkid로 UUID를 확인
1
2
3
4
5
6
7
blkid
echo 'UUID=b6d3f331-deaf-428b-bcb0-c9b48bab2253 /root/xfs_minio_1 xfs defaults 1 1' >> /etc/fstab
echo 'UUID=213694c7-bbaf-45c4-96c8-4e912dc70f3f /root/xfs_minio_2 xfs defaults 1 1' >> /etc/fstab
echo 'UUID=e7aa0e12-3c0c-4e12-a00d-9ebeaab76669 /root/xfs_minio_3 xfs defaults 1 1' >> /etc/fstab
echo 'UUID=ac211fab-162e-4f8a-854b-1960aa43e252 /root/xfs_minio_4 xfs defaults 1 1' >> /etc/fstab
UUID 확인
UUID 확인
MINIO & MC 설치
1
2
3
4
5
6
7
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/local/bin/
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
cp mc /usr/local/bin/
설치가 완료 되면 SSL을 생성한다. SSL 생성은 간단 하므로 여기서 표시 하지는 않겠다.
생성된 SSL 인증서와 Key를 minio 폴더로 카피 한다.
1
2
cp yourdomain.com.crt /root/.minio/certs/public.crt
cp yourdomain.com.key /root/.minio/certs/private.key
MINIO를 생성 한다.
1
2
3
4
5
6
7
mc config host add minio-veeam https://minio.tkg.io minioadmin minioadmin --api S3v4
minio server --address ":443" /root/xfs_minio_1/ /root/xfs_minio_2/ /root/xfs_minio_3/ /root/xfs_minio_4/
mc mb --debug -l minio-veeam/veeam-immutable
mc retention set --default compliance 30d minio-veeam/veeam-immutable
프로파일 설정
카스텐 프로파일 설정
카스텐 프로파일 등록 완료 1
카스텐 프로파일 등록 완료 2
7. 백업 완료
카스텐에서 백업 실행후 완료 확인
MINIO에서 백업 확인