首页 > 其他分享 >K8s集群备份还原与迁移利器-Velero

K8s集群备份还原与迁移利器-Velero

时间:2024-04-06 23:23:51浏览次数:25  
标签:Velero minio velero -- 备份 nginx deployment K8s backup

一、简介

Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。

1.1 支持的版本列表

alt text

1.2 Velero组件

Velero 组件一共分两部分,分别是服务端和客户端。

  • 服务端:运行在你 Kubernetes 的集群中
  • 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

1.3 velero备份流程

  1. velero客户端调用kubernetes API Server创建backup任务
  2. Backup控制器基于watch机制通过Api Server获取到备份任务
  3. Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据
  4. Backup 控制器将获取到的数据备份到指定的对象存储server端

img

1.4 Velero后端存储

Velero支持两种关于后端存储的CRD,分别是BackupStorageLocationVolumeSnapshotLocation

1.4.1 BackupStorageLocation

主要用来定义 Kubernetes 集群资源的数据存放位置,也就是集群对象数据,不是 PVC 的数据。主要支持的后端存储是 S3 兼容的存储,比如:Mino 和阿里云 OSS 等。

1.4.2 VolumeSnapshotLocation

主要用来给 PV 做快照,需要云提供商提供插件。阿里云已经提供了插件,这个需要使用 CSI 等存储机制。你也可以使用专门的备份工具 Restic,把 PV 数据备份到阿里云 OSS 中去(安装时需要自定义选项)。

Restic 是一款 GO 语言开发的数据加密备份工具,顾名思义,可以将本地数据加密后传输到指定的仓库。支持的仓库有 Local、SFTP、Aws S3、Minio、OpenStack Swift、Backblaze B2、Azure BS、Google Cloud storage、Rest Server。

二、安装velero客户端

Github Release 页面下载指定的 velero 二进制客户端安装包,比如这里我们下载我们k8s集群对应的版本为 v1.11.1

版本列表:https://github.com/vmware-tanzu/velero/releases

2.1 安装velero命令程序

$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.11.1/velero-v1.11.1-linux-amd64.tar.gz
$ tar zxf velero-v1.11.1-linux-amd64.tar.gz
$ mv velero-v1.11.1-linux-amd64/velero /usr/bin/
$ velero -h
# 启用命令补全
$ source <(velero completion bash)
$ velero completion bash > /etc/bash_completion.d/velero

2.2 安装minio

Velero支持很多种存储插件,可查看:Velero Docs - Providers获取插件信息,我们这里使用minio作为S3兼容的对象存储提供程序。您也可以在任意地方部署Minio对象存储,只需要保证K8S集群可以访问到即可。

根据具体的业务场景选择不同的存储方式

# cat velero-v1.11.1-linux-amd64/examples/minio/00-minio-deployment.yaml 

# Copyright 2017 the Velero 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
#
#     http://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: v1
kind: Namespace
metadata:
  name: velero

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: velero
  name: minio
  labels:
    component: minio
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      component: minio
  template:
    metadata:
      labels:
        component: minio
    spec:
      volumes:
      - name: storage
        emptyDir: {}
      - name: config
        emptyDir: {}
      containers:
      - name: minio
        image: minio/minio:latest
        imagePullPolicy: IfNotPresent
        args:
        - server
        - /storage
        - --config-dir=/config
        - --console-address=:9001
        env:
        - name: MINIO_ACCESS_KEY
          value: "minio"
        - name: MINIO_SECRET_KEY
          value: "minio123"
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: storage
          mountPath: "/storage"
        - name: config
          mountPath: "/config"

---
apiVersion: v1
kind: Service
metadata:
  namespace: velero
  name: minio
  labels:
    component: minio
spec:
  # ClusterIP is recommended for production environments.
  # Change to NodePort if needed per documentation,
  # but only if you run Minio in a test/trial environment, for example with Minikube.
  type: NodePort
  ports:
    - name: api
      port: 9000
      targetPort: 9000
      nodePort: 32000
    - name: console
      port: 9001
      targetPort: 9001
      nodePort: 32001
  selector:
    component: minio

---
apiVersion: batch/v1
kind: Job
metadata:
  namespace: velero
  name: minio-setup
  labels:
    component: minio
spec:
  template:
    metadata:
      name: minio-setup
    spec:
      restartPolicy: OnFailure
      volumes:
      - name: config
        emptyDir: {}
      containers:
      - name: mc
        image: minio/mc:latest
        imagePullPolicy: IfNotPresent
        command:
        - /bin/sh
        - -c
        - "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"
        volumeMounts:
        - name: config
          mountPath: "/config"

2.3 创建minio应用

# 创建velero命名空间
$ kubectl create namespace velero
# 创建minio资源
$ ]# kubectl apply -f  velero-v1.11.1-linux-amd64/examples/minio/00-minio-deployment.yaml
 
# 查看部署状态
$ kubectl get sts,pod,svc -n velero
NAME                         READY   STATUS      RESTARTS   AGE
pod/minio-78f994f86c-g86bp   1/1     Running     0          9m34s
pod/minio-setup-27jds        0/1     Completed   3          9m34s

NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/minio   NodePort   10.68.151.238   <none>        9000:31657/TCP,9001:30282/TCP   9m34s
 
# 开放NodePort端口
$ kubectl patch svc minio -n velero -p '{"spec": {"type": "NodePort"}}'
$ kubectl patch svc minio -n velero --type='json' -p='[{"op": "replace", "path": "/spec/ports/0/nodePort", "value":9000},{"op": "replace", "path": "/spec/ports/1/nodePort", "value":9001}]'
 
]# kubectl get svc -n velero  
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
minio   NodePort   10.68.151.238   <none>        9000:31657/TCP,9001:30282/TCP   3m12s

通过浏览器访问服务器IP:30282,并使用账号minio密码minio123登入验证。
image-20240406205615216

2.4 物理机安装minio

当然如果需要在不同 Kubernetes 和存储池集群备份与恢复数据,需要将 minio 服务端安装在 Kubernetes 集群外,保证在集群发生灾难性故障时,不会对备份数据产生影响,可以通过二进制的方式进行安装。

在待安装 minio 的服务器上下载二进制包

➜  ~ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
➜  ~ chmod +x minio
➜  ~ sudo mv minio /usr/local/bin/
➜  ~ minio --version

准备对象存储的磁盘,这里我们跳过该步骤,可以使用 systemd 来方便管理 minio 服务,对于使用 systemd init 系统运行系统的人,请创建用于运行 minio 服务的用户和组:

➜  ~ sudo groupadd --system minio
➜  ~ sudo useradd -s /sbin/nologin --system -g minio minio

/data(上述步骤准备好的磁盘挂载位置)目录提供 minio 用户所有权:

➜  ~ sudo chown -R minio:minio /data/

为 minio 创建 systemd 服务单元文件:

➜  ~ vi /etc/systemd/system/minio.service
[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/data
User=minio
Group=minio
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

创建 minio 环境文件 /etc/default/minio

# Volume to be used for Minio server.
MINIO_VOLUMES="/data"

# Use if you want to run Minio on a custom port.
MINIO_OPTS="--address :9000"

# Access Key of the server.
MINIO_ACCESS_KEY=minio

# Secret key of the server.
MINIO_SECRET_KEY=minio123

其中 MINIO_ACCESS_KEY 为长度至少为3个字符的访问密钥,MINIO_SECRET_KEY 为最少8个字符的密钥。重新加载 systemd 并启动 minio 服务:

➜  ~ sudo systemctl daemon-reload
➜  ~ sudo systemctl start minio

关于 minio 的更多使用方法可以参考官方文档 https://docs.min.io/ 了解更多。

三 、安装 velero 服务端

我们可以使用 velero 客户端来安装服务端,也可以使用 Helm Chart 来进行安装,比如这里我们用客户端来安装,velero 命令默认读取 kubectl 配置的集群上下文,所以前提是 velero 客户端所在的节点有可访问集群的 kubeconfig 配置。

3.1 创建密钥

首先准备密钥文件,在当前目录建立一个空白文本文件,内容如下所示:

$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF

3.2 安装velero到k8s集群

替换为之前步骤中 minio 的对应 access key id 和 secret access key如果 minio 安装在 kubernetes 集群内时按照如下命令安装 velero 服务端:

$ velero install \
  --provider aws \
  --image velero/velero:v1.11.1 \
  --plugins velero/velero-plugin-for-aws:v1.7.1 \
  --bucket velero \
  --secret-file ./credentials-velero \
  --use-node-agent \
  --use-volume-snapshots=false \
  --namespace velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio:9000 \
  --wait
# 执行install命令后会创建一系列清单,包括CustomResourceDefinition、Namespace、Deployment等。
# velero install .... --dry-run -o yaml > velero_deploy.yaml 如果为私仓,可以通过--dry-run 导出 YAML 文件调整在应用。

# 可使用如下命令查看运行日志
$ kubectl logs deployment/velero -n velero
 
# 查看velero创建的api对象
$ kubectl api-versions | grep velero
velero.io/v1
 
# 查看备份位置
$ velero backup-location get
NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
default   aws        velero          Available   2023-03-28 15:45:30 +0800 CST   ReadWrite     true

#卸载命令
# velero uninstall --namespace velero
You are about to uninstall Velero.
Are you sure you want to continue (Y/N)? y
Waiting for velero namespace "velero" to be deleted
............................................................................................................................................................................................
Velero namespace "velero" deleted
Velero uninstalled ⛵

选项说明:

  • --kubeconfig(可选):指定kubeconfig认证文件,默认使用.kube/config
  • --provider:定义插件提供方;
  • --image:定义运行velero的镜像,默认与velero客户端一致;
  • --plugins:指定使用aws s3兼容的插件镜像;
  • --bucket:指定对象存储Bucket桶名称;
  • --secret-file:指定对象存储认证文件;
  • --use-node-agent:创建Velero Node Agent守护进程,托管FSB模块;
  • --use-volume-snapshots:是否启使用快照;
  • --namespace:指定部署的namespace名称,默认为velero;
  • --backup-location-config:指定对象存储地址信息;

aws插件与velero版本对应关系
image-20240406180846706

3.3 卸载velero

如果您想从集群中完全卸载Velero,则以下命令将删除由velero install创建的所有资源:

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

四、备份与恢复

备份命令:velero create backup NAME [flags]
backup选项:

  • --exclude-namespaces stringArray : 要从备份中排除的名称空间
  • --exclude-resources stringArray: 要从备份中排除的资源,如storageclasses.storage.k8s.io
  • --include-cluster-resources optionalBool[=true]: 包含集群资源类型
  • --include-namespaces stringArray: 要包含在备份中的名称空间(默认'*')
  • --include-resources stringArray: 备份中要包括的资源
  • --labels mapStringString: 给这个备份加上标签
  • -o, --output string: 指定输出格式,支持'table'、'json'和'yaml';
  • -l, --selector labelSelector: 对指定标签的资源进行备份
  • --snapshot-volumes optionalBool[=true]: 对 PV 创建快照
  • --storage-location string: 指定备份的位置
  • --ttl duration: 备份数据多久删掉
  • --volume-snapshot-locations strings: 指定快照的位置,也就是哪一个公有云驱动

4.1 备份

4.1.1 使用官方案例创建测试应用
$ kubectl apply -f examples/nginx-app/base.yaml 
namespace/nginx-example created
deployment.apps/nginx-deployment created
service/my-nginx created
 
# 查看资源清单
$ kubectl get all -n nginx-example
NAME                                    READY   STATUS              RESTARTS   AGE
pod/nginx-deployment-5c844b66c8-7fsb9   0/1     ContainerCreating   0          32s
pod/nginx-deployment-5c844b66c8-dh4bn   1/1     Running             0          4m53s
pod/nginx-deployment-5c844b66c8-q2dc5   0/1     Terminating         0          4m53s

NAME               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/my-nginx   LoadBalancer   10.68.79.207   <pending>     80:32435/TCP   4m53s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/2     2            1           4m53s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5c844b66c8   2         2         1       4m53s
4.1.2 备份测试应用
$ velero backup create nginx-backup --include-namespaces nginx-example
Backup request "nginx-backup" submitted successfully.
Run `velero backup describe nginx-backup` or `velero backup logs nginx-backup` for more details.

选项:

  • --include-namespaces:指定命名空间
  • --selector:标签选择器,如app=nginx
4.1.3 查看备份列表
$ velero backup get
NAME           STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
nginx-backup   Completed   0        0          2024-04-06 21:47:16 +0800 CST   29d       default            <none>
 
# 查看备份详细信息
$ velero backup describe nginx-backup
 
# 查看备份日志
$ velero backup logs nginx-backup

登入minio控制台查看备份内容
image-20240406215419990

4.1.4 定时备份指南
# 使用cron表达式备份
$ velero schedule create nginx-daily --schedule="0 1 * * *" --include-namespaces nginx-example
 
# 使用一些非标准的速记 cron 表达式
$ velero schedule create nginx-daily --schedule="@daily" --include-namespaces nginx-example
 
# 手动触发定时任务
$ velero backup create --from-schedule nginx-daily

更多cron示例请参考:cron package’s documentation

4.2 恢复

4.2.1 模拟灾难
# 删除nginx-example命名空间和资源
$ kubectl delete namespace nginx-example
# 检查是否删除
$ kubectl get all -n nginx-example
No resources found in nginx-example namespace.
4.2.2 恢复资源
$ velero backup get
NAME           STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
nginx-backup   Completed   0        0          2024-04-06 21:47:16 +0800 CST   29d       default            <none>

$ velero restore create --from-backup nginx-backup
Restore request "nginx-backup-20240406215611" submitted successfully.
Run `velero restore describe nginx-backup-20240406215611` or `velero restore logs nginx-backup-20240406215611` for more details.
4.2.3 检查恢复的资源
$ velero restore get
NAME                          BACKUP         STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
nginx-backup-20240406215611   nginx-backup   Completed   2024-04-06 21:56:11 +0800 CST   2024-04-06 21:56:12 +0800 CST   0        2          2024-04-06 21:56:11 +0800 CST   <none>
 
# 查看详细信息
$ velero restore describe nginx-backup-20240406215611
 
# 检查资源状态
$ kubectl get all -n nginx-example
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-5c844b66c8-7fsb9   1/1     Running   0          67s
pod/nginx-deployment-5c844b66c8-dh4bn   1/1     Running   0          67s

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/my-nginx   LoadBalancer   10.68.171.131   <pending>     80:30635/TCP   67s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   2/2     2            2           67s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5c844b66c8   2         2         2       67s

五、项目迁移实战

5.1、项目介绍

我们将使用Velero快速完成云原生应用PV数据的迁移实践过程,在本文示例中,我们将A集群中的一个MOS应用迁移到集群B中,其中数据备份采用自建Minio对象存储服务。
img

5.1.1 环境要求
  1. 迁移项目最好保证两个Kubernetes集群版本一致。
  2. 为了保证PV数据成功迁移,两边需要安装好相同名字的StorageClass
  3. 可以自己部署Minio,也可以使用公有云的对象存储服务,如华为的OBS、阿里的OSS等。
  4. 本案例将集群A中app-system命名空间中的服务及PV数据迁移到集群B中。
5.1.2 项目环境
角色 集群IP 集群版本 部署软件
K8S 集群A 192.168.19.128
192.168.19.129
192.168.19.130
192.168.19.131
v1.23.1 velero、istio-system
K8S 集群B 192.168.19.140
192.168.19.141
192.168.19.142
v1.23.17 velero、minio
5.1.3 项目说明

我们需要将集群A中 istio-system 空间的所有资源和数据全部迁移到集群B中,该项目包括了deploymentstatefulsetserviceingressjobcronjobsecretconfigmappvpvc

# 项目清单信息
$ kubectl get deployment,sts,pvc -n istio-system
NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana                1/1     1            1           62d
deployment.apps/istio-egressgateway    1/1     1            1           62d
deployment.apps/istio-ingressgateway   1/1     1            1           62d
deployment.apps/istiod                 1/1     1            1           62d
deployment.apps/jaeger                 1/1     1            1           62d
deployment.apps/kiali                  1/1     1            1           62d
deployment.apps/prometheus             1/1     1            1           62d

5.2 准备对象存储

按照2.22.3的方法在集群B(192.168.19.140)中创建minio应用,用来存放备份数据。

$ kubectl get deployment,svc -n velero
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/minio   1/1     1            1           5m27s

NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)                         AGE
service/minio   NodePort   10.96.3.195   <none>        9000:32000/TCP,9001:32001/TCP   4m44s

5.3 安装velero

请确保在集群A集群B中已经安装好velero客户端,请参考2.1 安装velero命令程序

5.3.1 在集群A中安装velero服务
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
 
$ velero install \
  --provider aws \
  --image velero/velero:v1.11.1 \
  --plugins velero/velero-plugin-for-aws:v1.7.1 \
  --bucket velero \
  --secret-file ./credentials-velero \
  --use-node-agent \
  --use-volume-snapshots=false \
  --namespace velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.19.140:32000 \
  --wait

注意:其中S3的地址指向集群B(192.168.19.140)的minio对象存储。

5.3.2 在集群B种安装velero服务
$ cat > credentials-velero <<EOF
[default]
aws_access_key_id = minio
aws_secret_access_key = minio123
EOF
 
$ velero install \
  --provider aws \
  --image velero/velero:v1.11.1 \
  --plugins velero/velero-plugin-for-aws:v1.7.1 \
  --bucket velero \
  --secret-file ./credentials-velero \
  --use-node-agent \
  --use-volume-snapshots=false \
  --namespace velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio:9000 \
  --wait

注意:其中S3的地址指向本集群minio对象存储的svc地址。

5.4 备份MOS项目

$ velero backup create istio-backup \
  --default-volumes-to-fs-backup \
  --include-namespaces istio-system
Backup request "istio-backup" submitted successfully.
Run `velero backup describe istio-backup` or `velero backup logs istio-backup` for more details.
 
# 查看备份状态;可以看到状态正在进行中
$ velero backup get
NAME           STATUS       ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
istio-backup   InProgress   0        0          2024-04-06 22:33:36 +0800 CST   29d       default            <none>

# 等待状态为Completed
$ velero backup get
NAME           STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
istio-backup   Completed   0        0          2024-04-06 22:33:36 +0800 CST   29d       default            <none>
  • --default-volumes-to-fs-backup:默认将所有PV卷进行备份,详情查看官方文档
  • --include-namespaces:指定要备份的命名空间

登入minio控制台上可以看到备份的文件:
image-20240406223849900

5.5 恢复到集群B

# 到集群B中查看备份资源
$ velero backup get
NAME           STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
istio-backup   Completed   0        0          2024-04-06 22:33:36 +0800 CST   29d       default            <none>

# 执行恢复命令
$ velero restore create --from-backup istio-backup
Restore request "istio-backup-20240406224033" submitted successfully.
Run `velero restore describe istio-backup-20240406224033` or `velero restore logs istio-backup-20240406224033` for more details.
 
# 查看恢复任务; 可以看到任务正在进行中,等待为Completed表示恢复完成
$ velero restore get
NAME                          BACKUP         STATUS       STARTED                         COMPLETED   ERRORS   WARNINGS   CREATED                         SELECTOR
istio-backup-20240406224033   istio-backup   InProgress   2024-04-06 22:40:33 +0800 CST   <nil>       0        0          2024-04-06 22:40:33 +0800 CST   <none>

5.6 验证服务和数据

$ kubectl get all -n istio-system
NAME                                       READY   STATUS              RESTARTS   AGE
pod/grafana-b854c6c8-cn244                 1/1     Running             0          7m50s
pod/istio-egressgateway-85df6b84b7-ccqmg   1/1     Running             0          7m50s
pod/istio-ingressgateway-58ffd5967-9kqf7   1/1     Running             0          7m49s
pod/istiod-8d74787f-7skg6                  1/1     Running             0          7m49s
pod/jaeger-5556cd8fcf-5f75s                1/1     Running             0          7m49s
pod/kiali-648847c8c4-rztws                 1/1     Running             0          7m49s
pod/prometheus-7b8b9dd44c-nzff4            2/2     Running             0          7m49s

NAME                           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                                                                                      AGE
service/grafana                ClusterIP      10.96.3.122   <none>        3000/TCP                                                                                     7m47s
service/istio-egressgateway    ClusterIP      10.96.0.74    <none>        80/TCP,443/TCP                                                                               7m47s
service/istio-ingressgateway   LoadBalancer   10.96.2.36    <pending>     15021:30083/TCP,80:32311/TCP,443:32260/TCP,31400:30872/TCP,15443:32641/TCP,31401:31020/TCP   7m47s
service/istiod                 ClusterIP      10.96.2.246   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                                        7m47s
service/jaeger-collector       ClusterIP      10.96.1.101   <none>        14268/TCP,14250/TCP,9411/TCP                                                                 7m47s
service/kiali                  ClusterIP      10.96.3.3     <none>        20001/TCP,9090/TCP                                                                           7m47s
service/prometheus             ClusterIP      10.96.1.113   <none>        9090/TCP                                                                                     7m47s
service/tracing                NodePort       10.96.1.187   <none>        80:31721/TCP,16685:30582/TCP                                                                 7m47s
service/zipkin                 ClusterIP      10.96.1.44    <none>        9411/TCP                                                                                     7m46s

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana                1/1     1            1           7m45s
deployment.apps/istio-egressgateway    1/1     1            1           7m45s
deployment.apps/istio-ingressgateway   1/1     1            1           7m45s
deployment.apps/istiod                 1/1     1            1           7m45s
deployment.apps/jaeger                 1/1     1            1           7m45s
deployment.apps/kiali                  0/1     1            0           7m45s
deployment.apps/prometheus             1/1     1            1           7m44s

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/grafana-b854c6c8                  1         1         1       7m49s
replicaset.apps/istio-egressgateway-85df6b84b7    1         1         1       7m49s
replicaset.apps/istio-ingressgateway-58ffd5967    1         1         1       7m49s
replicaset.apps/istio-ingressgateway-6bb8fb6549   0         0         0       7m49s
replicaset.apps/istiod-8d74787f                   1         1         1       7m49s
replicaset.apps/jaeger-5556cd8fcf                 1         1         1       7m48s
replicaset.apps/kiali-648847c8c4                  1         1         0       7m48s
replicaset.apps/prometheus-7b8b9dd44c             1         1         1       7m48s

标签:Velero,minio,velero,--,备份,nginx,deployment,K8s,backup
From: https://www.cnblogs.com/nf01/p/18118159

相关文章

  • 基于k8s的高性能综合web服务器搭建
    目录基于k8s的高性能综合web服务器搭建项目描述:项目规划图:项目环境: k8s, docker centos7.9 nginx prometheus grafana flask ansible Jenkins等        1.规划设计整个集群的架构,k8s单master的集群环境(单master,双worker),部署dashboard监视集群资......
  • K8s 守护进程之 DaemonSet:深入解析
    ......
  • 【云原生篇】k8s之Deployment详解
    Kubernetes的Deployment是一种管理声明式更新的资源对象,它允许你描述应用的期望状态,并由Deployment控制器自动将当前状态改变为期望状态。Deployment主要用于无状态应用的部署和扩展,但也可以用于有状态应用。核心功能自动化部署与回滚:Deployment可以自动更新应用的......
  • 【云原生篇】K8S之StatefulSet 详解
    在Kubernetes(K8s)中,StatefulSet是一种用于管理有状态应用的工作负载API对象。与Deployment管理无状态应用不同,StatefulSet为每个Pod副本提供了持久性标识符(如名称和网络标识),并且可以保证部署和扩展顺序、以及网络标识和存储的稳定性。核心特性稳定、唯一的网......
  • k8s informer resync机制
    informerFactory创建informerinformer一般由informerFactory创建(支持直接创建informer,一般不这么做),informerFactory支持创建多种资源类型的informer,同一个informerFactory中同一种资源类型只创建一个informer。DeltaFIFOqueue里面保存了KeyOf函数计算得到的存储资源对象的key......
  • k8s PV和PVC以及StorageClass
    本地盘和云磁盘区别本地盘不支持跨物理机迁移,云磁盘支持跨物理机迁移。本地目录生命周期emptyDir、downwardAPI、configMap、secret:kubelet创建本地目录,该目录会随着Pod的消亡而删除。hostPath:本地目录一直存在。PVC、PV和StorageClass关系PVC是持久卷定义,PV是持久卷即磁盘,St......
  • 备忘记录-20240404.构建服务的k8s资源清单
    导读记录一次搭建服务的成果框架graphTBC(Client)-->ig(ingress)ig-->np((nginx-php\nservice))ig-->tc((tomcat\nservice))np-->ng1(nginx)np-->ng2(nginx)ng2-..->ps((php\nservice))ng1-..->psps-->p1(PHP)ps-->p2(PHP)ps......
  • 十七、k8s-helm-初探
    一、为什么要用helm1.1 常规的部署时通过多个yaml实现的由于k8s缺少对发布的应用版本管理和控制,使得部署的应用维护和更新等面临诸多挑战,主要体现在以下几方面:1、如何将这些服务作为一个整体管理2、这些资源文件如何高效复用3、不支持应用级别的版本管理二、helm介绍......
  • git 下拉代码时,如何提前备份本地代码(通俗易懂,仅需要4步)
        在Git中,可以使用stash命令来将未完成的工作保存到一个临时区域。这样就能避免因为切换分支而导致本地代码被修改或者丢失。    要进行代码备份并切换到其他分支,可按照以下步骤操作:1、首先确认当前所处的分支     可通过运行gitbranch查看当前所在的......
  • openGauss 逻辑备份
    逻辑备份可获得性本特性自openGauss1.0.0版本开始引入。特性简介支持将数据库内用户表的数据以通用格式备份到指定的存储介质中。客户价值通过逻辑备份特性,可以达成以下目的:将用户数据备份到可靠性更高的存储介质中,提升用户表数据的可靠性。通过采用通用的数据格式,支持......