作者: Mars Zhang
本文重要章节
- 行业趋势: 云原生的数据保护情况概览
- 企业需要K8S云原生保护的7个重要原因
- Kasten K10 产品介绍
- Kasten K10 产品特点
- Kasten K10 实践
4.1 Kasten K10 安装部署
4.2 访问 K10 Dashboard
4.3 备份 K8S 应用
4.4 还原 K8S 应用 - 安装前的准备工作
- Kasten K10 的安装
- 结论
作者观察
近日 Veeam 收购 Kasten 已经成为大家所热议的话题。在作者看来这次的收购来的并不突然。其实从早些时候开始,Veeam 就宣布了与 Kasten 的战略合作伙伴关系。而 Kasten 与 Veeam的后台投资公司均为 Insight Partners。从 Veeam 与 Kasten 的宣传材料上您不难发现,Kasten 与 Veeam 有着非常相同的价值取向与利基市场。这就让此次的收购行为显得顺利成章且水到渠成。
从市场需求角度来分析,此次收购的重点是整合并利用两种数据保护技术,提供给客户统一的方式实现多平台数据管理策略,Veeam目前现在可以覆盖物理,虚拟、云以及容器化的工作负载。Kasten 是德语箱子的意思,在 Kubernetes 生态系统中,Kasten 的领域是 Kubernetes 基础架构和工作负载的保护和数据管理,Kasten 迅速确立了自己作为顶级数据管理技术平台的地位, 相信 Kasten 加入 Veeam 之后,会使 Veeam 在云原生领域的数据保护之路走的更加稳健
1. 行业趋势: 云原生的数据保护情况概览
据权威数据分析公司Gartner预测,到2023年70%的组织将会在他们的生产平台里面运行三种或三种以上的容器化应用程序,容器化应用和微服务应用程序将是领导企业进行it创新以及数字化转型的重要因素。以下借助来自于 StackRox 的分析报告,让我们发现和理解容器化应用未来的趋势与特点。
- 应用的容器化进程加剧 这项调查的数据显示,应用的容器化出现大幅增长。对比六个月前的报告,将半数以上的应用程序容器化的组织比例从23%上升到29%,增长率为22%。与此同时,将不足10%的应用程序容器化的组织数量从32%下降到21%。各组织在生产环境的容器化应用比六个月前要多得多。
- 多个K8S平台同时运行将为常态 据 Gartner预测,到2023年70%的组织将会在他们的生产平台里面运行三种或三种以上的容器化应用程序,在报告中显示,AWS的市场占有率最高,Azure 与 Google 竞争激烈,就连老牌的IBM和Oracle也在扩大云原生的市场份额。在多个K8S平台之间迁移应用将是企业的必然需求。
- DevOps 被认为是最应负责管理容器安全的环节 从报告中我们可以看到,81%的受访者选择该角色,其次是安全部门,为51%。但是,目前容器的安全责任是重合的,如下图所示。因此,我们都理解容器的安全必须要各个部门之间的通力合作。如何使用一个有效的工具进行容器的安全运维,将是企业用户要必须了解的内容。
6 Container Adoption Trends of 2020
https://www.stackrox.com/post/2020/03/6-container-adoption-trends-of-2020/
2. 企业需要K8S云原生保护的7个重要原因
那么企业为什么需要用K8S云原生的方式来保护驻留在K8S上的应用程序呢,以下是7个重要的原因。
1.部署模式不同Kubernetes平台从根本上不同于早期的计算基础设施,没有应用程序到服务器或VM的映射,备份解决方案需要理解Kubernetes本地架构模式,并能够处理持续的变化
2.DevOps and "ShiftLeft"高速应用程序的开发和部署周期是Kubernetes环境中的标准。因此,这要求备份解决方案以应用程序为中心而不是基础架构为中心。
3.解决运营的挑战Kubernetes 运营需要简单易用,以加快IT团队的生产部署过程。因此可以使用 CLI 访问权限和原生的 K8S API来进行操作,并将操作的状态实时显示在仪表板上的数据管理解决方案至关重要。
4.以应用为中心基于Kubernetes的微服务包含数百个离散的组件,这些组件具有仅Kubernetes可见的独立生命周期。企业急需Kubernetes原生备份方法,将应用程序视为操作对象,以实现多种一致性的操作要求。
5.保护方式的差距传统的通过HA或是底层数据复制的方式,可能会导致数据损坏或灾难性的数据丢失。企业需要可与各种 Kubernetes 应用程序堆栈结合的部署方法,从而透明地进行应用的备份。
6.基于安全的考虑Kubernetes的安全功能不仅拒绝从群集外部访问内部应用程序组件及其关联的数据服务,还拒绝其他不受信任的应用程序访问。企业需要结构良好的Kubernetes原生备份解决方案,方便地嵌入Kubernetes控制平面,以确保安全一致的操作。
7.多态的数据服务多态的持久层,在K8Sk中,企业会在同一个应用程序中使用多个数据服务,解决方案应具备与多态的19层相结合的方式,以快速有效的得到数据,实现数据的备份和长期保留。
3. Kasten K10 产品介绍
Kasten K10 是专为 Kubernetes 所构建的数据管理平台,为企业运营团队提供了易于使用、可扩展、安全的解决方案,用于 Kubernetes 应用程序的备份还原,灾难恢复和迁移。
K10 的核心概念是以应用为中心的方法进行数据管理,它与多种数据库、Kubernetes 发行版本与各大云平台进行了深度的集成,这为企业提供了自由选择基础架构手段,同时带来了极大的操作的简便性。
K10 通过基于策略驱动和可扩展数据管理方法论,为企业提供了原生的 Kubernetes API,用户通过其强大而简捷的 Web 界面就可以轻松操作。在数据保护的领域,K10 实现了自动化地感知并发现应用,与数据库原生工具的集成,对数据一致性场景进行了全面的覆盖,使K8S应用可以在多云环境下轻松地按需迁移,备份和容灾。
Kasten K10 产品特点
原生的架构适配自动发现集群上运行的所有应用程序组件与相关配置,保证应用一致性与完整性
出色的恢复能力还原应用程序及其相关组件到所需位置,可自由定义还原的粒度与时间点。
一切为运营服务为运营团队提供所需的工作流,满足合规性和监视要求,操作自服务与Restful API。
完美的安全管控支持以RBAC的方式进行权限管理,无论在传输还是存储过程中将数据端到端加密。
灵活的可移动性在多个云原生云平台之间,自由的进行,应用程序备份,容灾与迁移。
4. Kasten K10 实践
4.1 Kasten K10 安装部署
Kasten K10 有两个主要版本,即 K10 Starter 和 Enterprise。Kasten 产品页面包含两个K10版本的比较,读者可以参考以下链接进行查看,但是两个版本使用相同的容器映像并遵循相同的部署过程。
K10 产品介绍及版本
https://www.kasten.io/product/
如上面所提到的,K10有支持多种主流的发行版本,以云平台为例,像 AWS EKS, Azure AKS, Google GKE 都有很好的支持。考虑到读者感受,我们可以 Azure 做为这次快速上手的平台。
首先,您需要在 AKS 上部署一个 Kubernate Cluster,由于这不是我们本次的重点。请您关注 Mars Blog 中的 在 AKE 部署您的 K8S Cluster 文档。
K10 产品介绍及版本
https://www.kasten.io/product/
4.1.1 安装前的准备工作
K10 安装前我们需要进行 Service principal 的创建,和 K8S Clster的环境进行调研,所需的准备工作如下
- 创建服务主体 (Service principal) 进行安装之前,我们可以为 K10 创建服务主体,如下图在 AD -> App registrations -> Service principal 进行创建,以用于 K10的安装。
您将需要记录下以信息 Your subscription ID Your tenant ID An app ID (also called a client ID) Client secret A resource group
2.收集 K8S 信息,确认 Helm版本 及 Repo库
- 查看及使用 subscription 信息
- 查看 K8s Nodes与Deployments的状态
- 查看 K8s Nodes与Deployments的状态
- 查看 HELM 版本并添加 Repo
'# 查看 subscription 信息
zhang@Azure:~$ az account list |grep id
"id": "9a35XXXX-85XX-4dXX-b4XX-578d8cdXXXX"
zhang@Azure:~$ az account set --subscription 9a35XXXX-85XX-4dXX-b4XX-578d8cdXXXX
zhang@Azure:~$ az aks get-credentials --resource-group aksdemo --name aksdemocls
Merged "aksdemocls" as current context in /home/zhang/.kube/config
'# 查看 K8s Nodes与Deployments的状态
zhang@Azure:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-agentpool-37951253-vmss000000 Ready agent 6m47s v1.16.13
aks-agentpool-37951253-vmss000001 Ready agent 6m46s v1.16.13
aks-agentpool-37951253-vmss000002 Ready agent 6m43s v1.16.13
virtual-node-aci-linux Ready agent 6m22s v1.14.3-vk-azure-aci-v1.2.1.1
zhang@Azure:~$ kubectl get deployments --all-namespaces=true
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system aci-connector-linux 1/1 1 1 8m9s
kube-system coredns 5/5 5 5 8m9s
kube-system coredns-autoscaler 1/1 1 1 8m9s
kube-system dashboard-metrics-scraper 1/1 1 1 8m4s
kube-system kubernetes-dashboard 1/1 1 1 8m4s
kube-system metrics-server 1/1 1 1 8m9s
kube-system omsagent-rs 1/1 1 1 8m9s
kube-system tunnelfront 1/1 1 1 8m9s
'# 查看 Helm 版本
zhang@Azure:~$ helm version
version.BuildInfo{Version:"v3.3.0-rc.1", GitCommit:"5c2dfaad847df2ac8f289d278186d048f446c70c", GitTreeState:"dirty", GoVersion:"go1.14.4"}
'# 加上 Kasten 的 Repo
zhang@Azure:~$ helm repo add kasten https://charts.kasten.io/
"kasten" has been added to your repositories
'# 创建 kasten-io 的 namespace
$ kubectl create namespace kasten-io
‘# 创建 ServiceAccount for k10 k10-sa
$ kubectl --namespace kasten-io create sa k10-sa
’# 创建cluster role binding for k10-sa
$ kubectl create clusterrolebinding k10-sa-rb \
--clusterrole cluster-admin \
--serviceaccount=kasten-io:k10-sa
3.1.2 Kasten K10 的安装
运行 Kasten K10 安装环境检查的脚本 zhang@Azure:~$ curl https://docs.kasten.io/tools/k10_primer.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6015 100 6015 0 0 7187 0 --:--:-- --:--:-- --:--:-- 7194
Namespace option not provided, using default namespace
Checking for tools
--> Found kubectl
--> Found helm
Checking if the Kasten Helm repo is present
--> The Kasten Helm repo was found
Checking for required Helm Tiller version (>= v2.16.0)
--> No Tiller needed with Helm v3.3.0-rc.1
K10Primer image
--> Using Image (gcr.io/kasten-images/k10primer:2.5.19) to run test
Checking access to the Kubernetes context aksdemocls
--> Able to access the default Kubernetes namespace
Running K10Primer Job in cluster with command-
./k10primer
serviceaccount/k10-primer created
clusterrolebinding.rbac.authorization.k8s.io/k10-primer created
job.batch/k10primer created
Waiting for pod k10primer-gh42n to be ready - ContainerCreating
Waiting for pod k10primer-gh42n to be ready -
……
Pod Ready!
2. 利用Helm 进行 K10 的安装与部署
zhang@Azure:~$ helm install k10 kasten/k10 --namespace=kasten-io \
> --set secrets.azureTenantId=2707XXXX-49XX-44XX-8cXX-438cef11XXXX \
> --set secrets.azureClientId=ef85XXXX-15XX-49XX-a9XX-c34889eeXXXX \
> --set secrets.azureClientSecret=XXXX_.fdFKAXXXX_wGEA1oy0XXXX~XXX.
NAME: k10
LAST DEPLOYED: Sun Sep 6 11:50:21 2020
NAMESPACE: kasten-io
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing Kasten’s K10 Data Management Platform!
Documentation can be found at https://docs.kasten.io/.
How to access the K10 Dashboard:
The K10 dashboard is not exposed externally. To establish a connection to it use the following `kubectl` command:
`kubectl --namespace kasten-io port-forward service/gateway 8080:8000`
The Kasten dashboard will be available at: `http://127.0.0.1:8080/k10/#/`
3. 查看 Kasten 的 Pod 是否均已运行无误
zhang@Azure:~$ kubectl get pods -n kasten-io
NAME READY STATUS RESTARTS AGE
aggregatedapis-svc-7fd85dcb57-bjzth 1/1 Running 0 16h
auth-svc-575cbc99fb-c4dwx 1/1 Running 0 16h
catalog-svc-56d5fdc64c-m5bv5 2/2 Running 0 16h
config-svc-986c95dfd-llznm 1/1 Running 0 16h
crypto-svc-78d657d458-9rnk7 1/1 Running 0 16h
dashboardbff-svc-755df9cb8-wwf8w 1/1 Running 0 16h
executor-svc-59f86bb78-2t5bk 2/2 Running 0 16h
executor-svc-59f86bb78-grwtq 2/2 Running 0 16h
executor-svc-59f86bb78-sp28p 2/2 Running 0 16h
frontend-svc-698d979898-m7dzt 1/1 Running 0 16h
gateway-c59d595f7-fhr2t 1/1 Running 0 16h
jobs-svc-9685b7b84-gkgzx 1/1 Running 0 16h
kanister-svc-c76fdf658-vmv6z 1/1 Running 0 16h
logging-svc-6569bd4479-s46s8 1/1 Running 0 16h
metering-svc-6697d74b88-ptjqm 1/1 Running 0 16h
prometheus-server-78f5cb586c-m2rmq 2/2 Running 0 16h
state-svc-7557444fdd-zdhlp 1/1 Running 0 16h
3.2 访问 K10 Dashboard
一般来说,K10 的控制台不是直接对外的,我们可以利用如下命令进行映射。有些时候我们如果访问内部地址可能不是很方便,这时我们也可以通过外部 LoadBalancer 来公开 K10的 Dashboard,这涉及到如下操作
- 映射控制台
- 设置外部网关给 K10 仪表盘
- 直接通过外部的 IP 地址, 访问 K10 仪表盘
- 映射控制台
# 映射控制台
kubectl --namespace kasten-io port-forward service/gateway 8080:8000
The Kasten dashboard will be available at: `http://127.0.0.1:8080/k10/#/
要将K10仪表板配置为通过默认的 LoadBalancer 和 DNS 公开,可以使用以下 helm 选项。如果尚未安装 K10,也可以将选项添加到您的环境的 install 命令中。或者使用以下方式升级安装:
设置外部网关给 K10 仪表盘 # 设置外部网关给 K10 仪表盘
$ helm upgrade k10 kasten/k10 --namespace=kasten-io --reuse-values --set externalGateway.create=true --set auth.tokenAuth.enabled=true
# 查看 K10 仪表盘的 IP 地址
zhang@Azure:~$ kubectl get svc gateway-ext --namespace kasten-io -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
gateway-ext LoadBalancer 10.0.209.187 20.195.37.160 80:31421/TCP 58s service=gateway
- 直接通过外部网关的 IP 地址, 访问 K10 仪表盘,可以看到欢迎信息
- 通过 Token 的方式登录 Kasten 仪表板
如果要通过外部 LoadBalancer 公开K10仪表板,则需要配置身份验证方法。当前支持的选项为
- 基本身份验证
- 令牌身份验证
- OpenID Connect 身份验证。
获取 Token 之后,粘贴到 web 页面就可以登录控制台
#查看 Service Account 信息, 注意 k10-admin 应提前做好 clusterrolebinding
zhang@Azure:~$ kubectl get serviceaccount |grep k10-admin
NAME SECRETS AGE
k10-admin 1 33m
#获得Token
zhang@Azure:~$ sa_secret=$(kubectl get serviceaccount k10-admin -o jsonpath="{.secretsa0].name}" --namespace kasten-io)
# decode 获得编码
zhang@Azure:~$ kubectl get secret $sa_secret --namespace kasten-io -ojsonpath="{.data.token}{'\n'}" | base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6IllYa1FLWmtmbjJoZDFNQV9qZlZNbWRCS3lwUzd4MGxNTkJIOWV6MURMenMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrYXN0ZW4taW8iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZGVmYXVsdC10b2tlbi1kZndwciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZWJlOWI1MTMtOTliYS00MTA4LTliYjgtOTY1ZDg5ZWM1MDkyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omthc3Rlbi1pbzpkZWZhdWx0In0.K23mqqJT1XaQlImKAFEy8oOu9XI8IyhmUES7iD1GkGmuS4DZvAT--IAfbXL26Iki6AbagueLJCDyMoLErYbLGyWBjLaPW3yIUFmN_pjkK6revrA1AXSJPXQPxiaGmULj8lY2FH_ciql-NtL6sdDYxBRyl90n5r9PrvIwS_KILpbt2Dos_XfTHixY8h8akgz1lVy6uXbiyOqSZM78HrSjFI7IhaZpaxAJ5t-p92kXYgYMw9islmw2Czk2Fsm2iZFsg2l1_iv9CJBk4snpSR9J_LLobsayucoNxv6_kwWZKp79D1-CpxBptbWnuOgkfUR35hOAj5nw2ZU8IexYaH4O8v5m5n0GyHijrZs1WhSQBi4zMWmQSpfcRe2P7fnv1bnll3TQMIhtf2GPkJpyCTemWPLDCPTKqmO-TPO3FcB_rAk45RbctSeFKiHkz8Hca_ZKmYiL8GQ0QisnIb49Uxl6lxybnwfDstLVqMYP8ZlygTAmdxV21_5QnhXODTcjMgEB_6Ftzz7GkIweOPLdgKzvURqg_lcwJUCYT_fMz1kUJzhrq7Zfj7gAD5S9WMDQMLzdM0RilVqmrDoCJyetdjqLN1GRxF_CSbuz7v31Pzs51kXFABg8aBeXcYI9prn5Pfu9YlMkGNVvOkdo
zhang@Azure:~$
5.登录控制台如下图所示
3.3 备份 K8S 应用
如下图找到一个 未被保护的应用,这里我们选择 mysqltest, 点击 “New Policy”
是不是有似曾相识的感觉,我相信熟悉备份的人在这里马上就可以理解。在这里我们可以按照规则您定义的策略,创建snapshot,与控制数据保护周期
由于 Kasten K10 是 K8S 原生的应用,备份任务设置的Policy就是一个YAML文件,您可以清松的对其进行编辑与定义。
这个时候在 Dashboard 的 Activity 中已经可以看到新的备份任务,正在运行了。
3.4 还原 K8S 应用
在 Application 中我们已经可以看到,已经运行过的数据保护策略 MySQLTest,已经有一个还原点了,让我们点击 “restore” 进行还原。
进行入到应用还原的界面,让我们找到合适的还原点进行应用的还原
在还原过程中我们可以细粒度的选择要还原的对象
4. 结论
可以这样说,Kasten 的 K10是一个出色的K8S原生数据管理平台,企业在使用 K10 后所获得的是对应用程序的无缝保护与恢复。通过利用它强大的界面,初学者也可以非常轻松的进行数据管理,企业在使用 K10 后所获得的是对应用程序的无缝保护与恢复。可以这样说,Kasten 的迭代速度是惊人的,我在 今年 6月份是使用的版本还是2.5.11,目前的最新版本已经是2.5.23了。
这就是今天要分享的内容,很简单也很高效,就像Veeam 常常提到的“IT Just works!” 对希望想更深层次了解Kasten的朋友,我们衷心的希望您点击如下链接去进行下载,如果您在使用中有任何问题,也可以找到Kasten的技术支持或是与Mars联系,我们下次再见。
最后,还是希望与您多多讨论,详细内容也可以参考Kasten的官方手册查看详细内容,今后还会计划推出更多精彩内容。