chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么使用Kubernetes檢查點API快速進行容器的備份和恢復(fù)呢?

dyquk4xk2p3d ? 來源:k8s技術(shù)圈 ? 2023-10-30 15:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Kubernetes v1.25 引入了容器檢查點 API 作為 alpha 特性。這提供了一種在不停止容器的情況下備份和恢復(fù)運行在 Pod 中的容器的方式。此功能主要用于調(diào)試分析,但任何 Kubernetes 用戶都可以利用常規(guī)備份和恢復(fù)功能。

接下來,讓我們來看看這個特性,并了解如何在我們的集群中啟用它,并利用它進行備份和恢復(fù)或調(diào)試分析。

安裝

在我們開始對任何容器進行檢查點處理之前,我們需要一個 playgroud,在這個 playgroud 上我們可以操作 kubelet 和它的工作負(fù)載。為此,我們將需要一個支持容器檢查點處理的 v1.25+ 版本的 Kubernetes集 群和容器運行時環(huán)境。

這里我們將使用在 Vagrant 中構(gòu)建的虛擬機內(nèi)使用 kubeadm 創(chuàng)建一個集群,只需執(zhí)行vagrant up即可快速啟動該集群。

如果你想搭建自己的集群,請確保集群必須啟用ContainerCheckpoint功能標(biāo)志。對于 kubeadm 使用以下配置:

#kubeadm-config.yaml
apiVersion:kubelet.config.k8s.io/v1beta1
kind:KubeletConfiguration
featureGates:
ContainerCheckpoint:true
---
apiVersion:kubeadm.k8s.io/v1beta3
kind:ClusterConfiguration
kubernetesVersion:v1.25.0
apiServer:
extraArgs:
feature-gates:"ContainerCheckpoint=true"
controllerManager:
extraArgs:
feature-gates:"ContainerCheckpoint=true"
scheduler:
extraArgs:
feature-gates:"ContainerCheckpoint=true"
networking:
podSubnet:10.244.0.0/16

這將向集群組件傳遞--feature-gates標(biāo)志。此外,我們還需要使用支持檢查點的容器運行時。撰寫本文時,僅CRI-O支持它,而 Containerd 可能很快也會支持(https://github.com/containerd/containerd/pull/6965),最新版本的crictl已經(jīng)支持通過crictl checkpoint創(chuàng)建檢查點。

要使用 CRI-O 配置集群,請按照文檔中的說明安裝它,或者使用上述存儲庫中的腳本(你應(yīng)該在虛擬機而不是本地運行此腳本)。

另外,我們還需要為 CRI-O 啟用CRIU,這是在后臺執(zhí)行實際檢查點的工具。要啟用它,我們需要設(shè)置--enable-criu-support=true標(biāo)志。上面的腳本可以為你做到這一點。

另外,如果你打算將其恢復(fù)到 Pod 中,還需要將--drop-infra-ctr設(shè)置為 false,否則您將收到CreateContainerError并顯示如下消息:

kubeletError:podlevelPIDnamespacerequestedforthecontainer,...
...butpodsandboxwasnotsimilarlyconfigured,anddoesnothaveaninfracontainer

在安裝了 CRI-O 之后,我們還需要告訴 kubeadm 使用它的 sock 文件,下面的配置將會處理這個問題:

apiVersion:kubeadm.k8s.io/v1beta3
kind:InitConfiguration
localAPIEndpoint:
advertiseAddress:192.168.56.2
bindPort:6443
nodeRegistration:
criSocket:"unix:///var/run/crio/crio.sock"
---

然后我們就可以使用以下命令快速啟動集群:

kubeadminit--config=.../kubeadm-config.yaml--upload-certs|teekubeadm-init.out

這將給我們提供一個單節(jié)點集群,如下(注意容器運行時版本):

$kubectlgetnodes-owide
NAMESTATUSROLESAGEVERSION...OS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME
kubemasterReadycontrol-plane82sv1.25.4...Ubuntu20.04.5LTS5.4.0-125-genericcri-o://1.25.0

Checkpointing

集群安裝完成后,我們可以嘗試創(chuàng)建一個檢查點。在 Kubernetes 上通??梢允褂?kubectl 或者運行 curl 命令來執(zhí)行常規(guī)操作,訪問集群 APIServer。然而,在這里這樣做是行不通的,因為檢查點 API 只暴露在每個集群節(jié)點上的 kubelet 上。因此,我們必須前往節(jié)點上并直接與 kubelet 交互:

$vagrantsshkubemaster
$sudosu-

#Checkifit'srunning...
$systemctlstatuskubelet

kubelet.service-kubelet:TheKubernetesNodeAgent
Loaded:loaded(/lib/systemd/system/kubelet.service;enabled;vendorpreset:enabled)
Drop-In:/etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active:active(running)sinceSat2022-11-121029UTC;30sago
Docs:https://kubernetes.io/docs/home/
MainPID:29501(kubelet)
Tasks:14(limit:2339)
Memory:34.7M
CGroup:/system.slice/kubelet.service
└─29501/usr/bin/kubelet--bootstrap-kubeconfig=...--kubeconfig=...

為了創(chuàng)建檢查點,我們還需要一個正在運行的 Pod。讓我們在 default 命名空間中創(chuàng)建一個 Nginx Pod:

$kubectltaintnodes--allnode-role.kubernetes.io/control-plane-
$kubectlrunwebserver--image=nginx-ndefault
$kubectlgetpods-owide
NAMEREADYSTATUSRESTARTSAGEIPNODE
webserver1/1Running027s10.85.0.4kubemaster

這里我們從節(jié)點中刪除了污點,這樣即使它是控制平面,我們也可以在節(jié)點上調(diào)度工作負(fù)載。

接下來,讓我們向 kubelet 發(fā)出一個示例 API 請求,來查看是否正常:

$curl-skv-XGET"https://localhost:10250/pods"
--key/etc/kubernetes/pki/apiserver-kubelet-client.key
--cacert/etc/kubernetes/pki/ca.crt
--cert/etc/kubernetes/pki/apiserver-kubelet-client.crt

{
"kind":"PodList",
"apiVersion":"v1",
"metadata":{},
"items":[
{
"metadata":{
"name":"webserver",
"namespace":"default",
...
}
}
...
}

kubelet 默認(rèn)運行在端口 10250 上,因此我們使用 curl 命令并請求其所有的 Pod。我們還需要指定 CA 證書、客戶端證書和密鑰進行身份驗證。

接下來就可以創(chuàng)建一個檢查點了:

$curl-sk-XPOST"https://localhost:10250/checkpoint/default/webserver/webserver"
--key/etc/kubernetes/pki/apiserver-kubelet-client.key
--cacert/etc/kubernetes/pki/ca.crt
--cert/etc/kubernetes/pki/apiserver-kubelet-client.crt

#Response:
#{"items":["/var/lib/kubelet/checkpoints/checkpoint-webserver_default-webserver-2022-11-12T1013Z.tar"]}

#Checkthedirectory:
$ls-l/var/lib/kubelet/checkpoints/

total3840
-rw-------1rootroot3931136Nov1210:28checkpoint-webserver_default-webserver-2022-11-12T1013Z.tar

#Verifythatoriginalcontainerisstillrunning:
$crictlps--namewebserver
CONTAINERIMAGECREATEDSTATENAMEATTEMPTPODIDPOD
880ee7ddff7f3docker.io/library/nginx@sha256:...48secondsagoRunningwebserver0d584446dd8d5ewebserver

檢查點 API 位于.../checkpoint/${NAMESPACE}/${POD}/${CONTAINER},這里我們使用之前創(chuàng)建的 Pod,此請求在/var/lib/kubelet/checkpoints/checkpoint-_--.tar中創(chuàng)建了一個存檔。

運行上述 curl 后,您可能會收到如下錯誤:

checkpointingofdefault/webserver/webserverfailed(CheckpointContainerisonlysupportedintheCRIv1runtimeAPI)
#or
checkpointingofdefault/webserver/webserverfailed(rpcerror:code=Unknowndesc=checkpoint/restoresupportnotavailable)

這意味著您的容器運行時尚不支持檢查點功能,或者未正確啟用。

分析

我們現(xiàn)在有了一個檢查點容器存檔,所以讓我們看看里面有什么:

$cd/var/lib/kubelet/checkpoints/
#Renamebecause"tar"doesn'tlike":"innames
$mv"checkpoint-webserver_default-webserver-2022-11-12T1013Z.tar"webserver.tar
#Viewcontents:
$tar--exclude="*/*"-tfwebserver.tar

dump.log
checkpoint/
config.dump
spec.dump
rootfs-diff.tar
io.kubernetes.cri-o.LogPath

#Extract:
$tar-xfcheckpoint-webserver_default-webserver-2022-09-04T1037Z.tar
$lscheckpoint/
cgroup.imgfdinfo-4.imgids-31.imgmountpoints-13.imgpages-2.imgtmpfs-dev-139.tar.gz.img
core-1.imgfiles.imginventory.imgnetns-10.imgpages-3.imgtmpfs-dev-140.tar.gz.img
core-30.imgfs-1.imgipcns-var-11.imgpagemap-1.imgpages-4.imgtmpfs-dev-141.tar.gz.img
core-31.imgfs-30.imgmemfd.imgpagemap-30.imgpstree.imgtmpfs-dev-142.tar.gz.img
descriptors.jsonfs-31.imgmm-1.imgpagemap-31.imgseccomp.imgutsns-12.img
fdinfo-2.imgids-1.imgmm-30.imgpagemap-shmem-94060.imgtimens-0.img
fdinfo-3.imgids-30.imgmm-31.imgpages-1.imgtmpfs-dev-136.tar.gz.img


$catconfig.dump
{
"id":"880ee7ddff7f3ce11ee891bd89f8a7356c97b23eb44e0f4fbb51cb7b94ead540",
"name":"k8s_webserver_webserver_default_91ad1757-424e-4195-9f73-349b332cbb7a_0",
"rootfsImageName":"docker.io/library/nginx:latest",
"runtime":"runc",
"createdTime":"2022-11-12T1056.460946241Z"
}

$tar-tfrootfs-diff.tar
var/cache/nginx/proxy_temp/
var/cache/nginx/scgi_temp/
var/cache/nginx/uwsgi_temp/
var/cache/nginx/client_temp/
var/cache/nginx/fastcgi_temp/
etc/mtab
run/nginx.pid
run/secrets/kubernetes.io/
run/secrets/kubernetes.io/serviceaccount/

如果您不需要一個正在運行的 Pod/容器進行分析,那么提取并閱讀上面顯示的一些文件可能會為您提供必要的信息。

恢復(fù)

雖然 Checkpointing API 目前更加注重于調(diào)試分析,但它仍然可以用于從存檔中恢復(fù) Pod/容器。最簡單的方法是從檢查點存檔創(chuàng)建一個鏡像:

FROMscratch
#NeedtouseADDbecauseitextractsarchives
ADDwebserver.tar.

這里我們使用一個空(scratch)鏡像,然后向其添加歸檔文件。這里需要使用 ADD 命令,因為它會自動解壓縮歸檔文件。接下來,我們使用 docker 或 buildah 構(gòu)建它。

$cd/var/lib/kubelet/checkpoints/
#Ordockerbuild...
$buildahbud
--annotation=io.kubernetes.cri-o.annotations.checkpoint.name=webserver
-trestore-webserver:latest
Dockerfile.

$buildahpushlocalhost/restore-webserver:latestdocker.io/martinheinz/restore-webserver:latest

在上面,我們還添加了一個注解,描述了容器的原始可讀名稱,然后我們將其推送到一些倉庫,以便 Kubernetes 可以拉取它。最后,我們創(chuàng)建一個Pod,指定之前推送的鏡像。

#pod.yaml
apiVersion:v1
kind:Pod
metadata:
name:restore-webserver
labels:
app:nginx
spec:
containers:
-name:webserver
image:docker.io/martinheinz/restore-webserver:latest
nodeName:kubemaster

為了測試是否成功,我們可以通過 Service 將 Pod 暴露出來,并使用 curl 命令訪問其IP地址。

$kubectlexposepodrestore-webserver--port=80--target-port=80
$kubectlgetsvc

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
kubernetesClusterIP10.96.0.1443/TCP14m
restore-webserverClusterIP10.104.30.9080/TCP17s

$curlhttp://10.104.30.90




Welcometonginx!
...


可以看到生效了,我們成功地在不停止它的情況下備份了并恢復(fù)一個正在運行的 Pod。

總結(jié)

Kubernetes 的檢查點功能是增強容器化應(yīng)用程序容錯性和彈性的強大工具。通過實施良好規(guī)劃的檢查點策略,你可以將停機時間降至最低,改善資源利用情況,并簡化應(yīng)用程序遷移。

優(yōu)點

增強的容錯性——檢查點功能使應(yīng)用程序能夠在故障發(fā)生時從最后一個已知檢查點恢復(fù),減少停機時間,并確保應(yīng)用程序保持高可用性。

簡化遷移——檢查點功能使將正在運行的應(yīng)用程序移動到不同主機變得更加容易。通過保存應(yīng)用程序的狀態(tài),您可以將其遷移到不同的節(jié)點,而不會丟失進度或造成中斷。如果您的應(yīng)用程序需要很長時間的預(yù)熱,您可以利用這個功能。這將大大減少應(yīng)用程序的啟動時間。

改進的擴展性——通過檢查點功能,您可以輕松地擴展應(yīng)用程序以滿足波動的需求。如果一個節(jié)點過載了,您可以將應(yīng)用程序遷移到擁有更多資源的另一個節(jié)點,確保最佳性能。

高效的資源使用——檢查點功能允許您暫停長時間運行的應(yīng)用程序,釋放資源給其他任務(wù)使用。當(dāng)再次需要應(yīng)用程序時,可以從檢查點恢復(fù)。

Kubernetes 檢查點的最佳實踐

定期創(chuàng)建檢查點——根據(jù)應(yīng)用程序的要求,定期創(chuàng)建檢查點,以最小化在故障發(fā)生時的數(shù)據(jù)丟失。

監(jiān)控和管理資源——檢查點功能可能消耗大量系統(tǒng)資源,尤其是內(nèi)存。監(jiān)控集群的資源使用情況,并根據(jù)需要調(diào)整檢查點策略,以避免性能問題。

測試您的檢查點策略——定期測試您的檢查點過程,確保其按預(yù)期工作,并能在故障發(fā)生時恢復(fù)應(yīng)用程序。

自動化檢查點管理——使用像 cron 作業(yè)或 Kubernetes Operator 這樣的自動化工具,在預(yù)定的時間表上創(chuàng)建和管理檢查點,確保您的應(yīng)用程序始終受到保護。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    972

    瀏覽量

    30458
  • CRI
    CRI
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    12484
  • POD
    POD
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    6286

原文標(biāo)題:如何使用 Kubernetes 檢查點 API 快速進行容器的備份和恢復(fù)

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    MySQL數(shù)據(jù)庫備份恢復(fù)方式對比

    備份是數(shù)據(jù)庫運維中最重要也最容易被忽視的環(huán)節(jié)。"重要"體現(xiàn)在數(shù)據(jù)丟失時備份是唯一的救命稻草,"忽視"體現(xiàn)在很多團隊有備份腳本但從未做過恢復(fù)演練,等到真正需要
    的頭像 發(fā)表于 03-04 15:39 ?29次閱讀

    Kubernetes存儲管理功能的落地實踐

    容器本身是無狀態(tài)的,Pod重啟后容器內(nèi)的數(shù)據(jù)全部丟失。數(shù)據(jù)庫、消息隊列、文件存儲這類有狀態(tài)服務(wù)跑在K8s上,必須解決持久化存儲問題。Kubernetes通過PersistentVolume(PV)、PersistentVolum
    的頭像 發(fā)表于 02-26 14:45 ?167次閱讀

    Kubernetes容器運行時containerd與CRI-O如何選擇

    Kubernetes 1.24版本正式移除了dockershim,Docker不再是K8s的默認(rèn)容器運行時。這個變化直接影響了所有K8s集群的運維方式——升級到1.24+必須切換到containerd或CRI-O。
    的頭像 發(fā)表于 02-26 09:54 ?167次閱讀

    KubePi:開源Kubernetes可視化管理面板,讓集群管理如此簡單

    在界面上進行故障診斷和排查。 五、企業(yè)實戰(zhàn)案例:KubePi在不同場景的應(yīng)用 5.1 中小企業(yè)統(tǒng)一管理平臺 挑戰(zhàn) :中小型企業(yè)可能缺乏專業(yè)的Kubernetes運維人員,但需要高效管理其容器
    發(fā)表于 02-11 12:53

    Kubernetes kubectl命令行工具詳解

    kubectl是Kubernetes官方提供的命令行工具,作為與Kubernetes集群交互的主要接口,它通過調(diào)用Kubernetes API Server實現(xiàn)對集群資源的全面管理。在
    的頭像 發(fā)表于 02-02 16:40 ?403次閱讀

    淘寶API SDK快速開發(fā)指南

    ? 本文將指導(dǎo)開發(fā)者快速接入淘寶開放平臺API,通過官方SDK實現(xiàn)高效調(diào)用。以下為關(guān)鍵步驟: 1. 環(huán)境準(zhǔn)備 安裝Python SDK包: ? pip install
    的頭像 發(fā)表于 01-19 15:02 ?255次閱讀
    淘寶<b class='flag-5'>API</b> SDK<b class='flag-5'>快速</b>開發(fā)指南

    LS0502SCD33超級電容器保護IC:備份電源應(yīng)用的理想之選

    LS0502SCD33超級電容器保護IC:備份電源應(yīng)用的理想之選 作為電子工程師,在設(shè)計需要備份電源的系統(tǒng)時,我們常常面臨著諸多挑戰(zhàn),比如惡劣環(huán)境下的電源穩(wěn)定性、長待機時間的需求以及對系統(tǒng)的全面保護
    的頭像 發(fā)表于 12-16 10:10 ?401次閱讀

    對于設(shè)備上的舊固件如何進行備份恢復(fù)

    對于設(shè)備上的舊固件,如何進行備份恢復(fù)?
    發(fā)表于 12-12 08:23

    構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的一般化建議

    的尺寸不宜過大,3*3或者1*1等小尺寸的卷積核(濾波器)對于實現(xiàn)輕量級模型是十分必要的。 3)添加歸一化層和驗證檢查點:歸一化層可以調(diào)整模型的概率分布得到標(biāo)準(zhǔn)化分布,從而提升迭代和梯度流效果
    發(fā)表于 10-28 08:02

    如何確保電能質(zhì)量在線監(jiān)測裝置的安全防護檢查覆蓋所有關(guān)鍵環(huán)節(jié)

    要確保電能質(zhì)量在線監(jiān)測裝置(以下簡稱 “裝置”)的安全防護檢查覆蓋所有關(guān)鍵環(huán)節(jié),需遵循 “ 先定義關(guān)鍵環(huán)節(jié)→再分場景拆解檢查點→最后通過流程、工具、人員形成閉環(huán)管控 ” 的邏輯,從 “硬件安全、數(shù)據(jù)
    的頭像 發(fā)表于 09-23 14:42 ?578次閱讀
    如何確保電能質(zhì)量在線監(jiān)測裝置的安全防護<b class='flag-5'>檢查</b>覆蓋所有關(guān)鍵環(huán)節(jié)

    MySQL數(shù)據(jù)備份恢復(fù)策略

    數(shù)據(jù)是企業(yè)的核心資產(chǎn),MySQL作為主流的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其數(shù)據(jù)的安全性和可靠性至關(guān)重要。本文將深入探討MySQL的數(shù)據(jù)備份策略、常用備份工具以及數(shù)據(jù)恢復(fù)的最佳實踐,幫助運維工程師構(gòu)建完善的數(shù)據(jù)保護體系。
    的頭像 發(fā)表于 07-14 11:11 ?723次閱讀

    生產(chǎn)環(huán)境中Kubernetes容器安全的最佳實踐

    隨著容器化技術(shù)的快速發(fā)展,Kubernetes已成為企業(yè)級容器編排的首選平臺。然而,在享受Kubernetes帶來的便利性和可擴展性的同時,
    的頭像 發(fā)表于 07-14 11:09 ?730次閱讀

    西門子840D數(shù)控系統(tǒng)備份恢復(fù)方法

    西門子840D數(shù)控系統(tǒng)的備份恢復(fù)是確保數(shù)據(jù)安全與系統(tǒng)穩(wěn)定運行的重要環(huán)節(jié)。以下提供了幾種備份恢復(fù)方法: 一、利用系統(tǒng)自身進行數(shù)據(jù)
    的頭像 發(fā)表于 06-22 23:13 ?2387次閱讀
    西門子840D數(shù)控系統(tǒng)<b class='flag-5'>備份</b>及<b class='flag-5'>恢復(fù)</b>方法

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過定義、打包和部署應(yīng)用程序來簡化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決在 Kubernetes
    的頭像 發(fā)表于 04-30 13:42 ?3078次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    恢復(fù)橋如何進行全面檢查?

    恢復(fù)橋憑借其快速恢復(fù)特性,在高頻電力轉(zhuǎn)換領(lǐng)域發(fā)揮著不可替代的作用。通過視覺檢測、電氣參數(shù)測量、熱成像監(jiān)測與頻譜分析等系統(tǒng)化檢測手段,可實現(xiàn)對快恢復(fù)橋的全方位性能評估,及時消除潛在隱患
    的頭像 發(fā)表于 04-22 11:49 ?615次閱讀
    快<b class='flag-5'>恢復(fù)</b>橋如何<b class='flag-5'>進行</b>全面<b class='flag-5'>檢查</b>?