久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Kubernetes的etcd狀態數據及其備份是怎樣的

168次閱讀
沒有評論

共計 7016 個字符,預計需要花費 18 分鐘才能閱讀完成。

本篇內容介紹了“Kubernetes 的 etcd 狀態數據及其備份是怎樣的”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Kubernetes 使用 etcd 來存儲集群的實時運行數據(如節點狀態信息),而其它 pod 都是無狀態的、可以根據負載調度,在多個節點(node)間進行漂移。etcd 本身是可以部署為無中心的多節點互備集群,從而消除整個集群的單一故障點。在 kubeadm 的缺省部署下,只在 master 上運行一個 etcd 實例(etcd-xxx),可以使用 kubectl get pod -n kube-system 查看運行狀態。

1、查看 etcd 服務容器信息

下面我們來探索一下 kubernetes 的 etcd 實例到底是如何實現和管理的。在 kubernetes 的 master 節點上輸入:

kubectl describe pod/etcd-podc01 -n kube-system   etcd.txt

輸出如下:

Name: etcd-podc01
Namespace: kube-system
Priority: 2000000000
PriorityClassName: system-cluster-critical
Node: podc01/10.1.1.181
Start Time: Mon, 03 Dec 2018 10:42:05 +0800
Labels: component=etcd
 tier=control-plane
Annotations: kubernetes.io/config.hash: bcc0eea4c53f3b70d13b771ad88e31b7
 kubernetes.io/config.mirror: bcc0eea4c53f3b70d13b771ad88e31b7
 kubernetes.io/config.seen: 2018-12-05T11:05:31.8690622+08:00
 kubernetes.io/config.source: file
 scheduler.alpha.kubernetes.io/critical-pod: 
Status: Running
IP: 10.1.1.181
Containers:
 etcd:
 Container ID: docker://8f301c91902a9399f144943013166a09dd0766a9b96c26fe2d8e335418a55cab
 Image: k8s.gcr.io/etcd:3.2.24
 Image ID: docker-pullable://registry.cn-hangzhou.aliyuncs.com/openthings/k8s-gcr-io-etcd@sha256:7b073bdab8c52dc23dfb3e2101597d30304437869ad8c0b425301e96a066c408
 Port:  none 
 Host Port:  none 
 Command:
 etcd
 --advertise-client-urls=https://127.0.0.1:2379
 --cert-file=/etc/kubernetes/pki/etcd/server.crt
 --client-cert-auth=true
 --data-dir=/var/lib/etcd
 --initial-advertise-peer-urls=https://127.0.0.1:2380
 --initial-cluster=podc01=https://127.0.0.1:2380
 --key-file=/etc/kubernetes/pki/etcd/server.key
 --listen-client-urls=https://127.0.0.1:2379
 --listen-peer-urls=https://127.0.0.1:2380
 --name=podc01
 --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
 --peer-client-cert-auth=true
 --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
 --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
 --snapshot-count=10000
 --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
 State: Running
 Started: Wed, 05 Dec 2018 11:05:35 +0800
 Ready: True
 Restart Count: 0
 Liveness: exec [/bin/sh -ec ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key get foo] delay=15s timeout=15s period=10s #success=1 #failure=8
 Environment:  none 
 Mounts:
 /etc/kubernetes/pki/etcd from etcd-certs (rw)
 /var/lib/etcd from etcd-data (rw)
Conditions:
 Type Status
 Initialized True 
 Ready True 
 ContainersReady True 
 PodScheduled True 
Volumes:
 etcd-data:
 Type: HostPath (bare host directory volume)
 Path: /var/lib/etcd
 HostPathType: DirectoryOrCreate
 etcd-certs:
 Type: HostPath (bare host directory volume)
 Path: /etc/kubernetes/pki/etcd
 HostPathType: DirectoryOrCreate
QoS Class: BestEffort
Node-Selectors:  none 
Tolerations: :NoExecute
Events:  none

可以看到,etcd 是使用的 host-network 網絡,然后把系統參數和數據等都映射到了宿主機的目錄(配置參數位于宿主機的 /var/lib/etcd,證書文件位于 /etc/kubernetes/pki/etcd)。

2、查看 etcd 配置參數文件

在宿主機下輸入   sudo ls -l /var/lib/etcd/member/snap 可以看到 etcd 服務所產生的快照文件,如下所示:

supermap@podc01:~/openthings/kubernetes-tools/jupyter$ sudo ls -l /var/lib/etcd/member/snap
總用量  8924
-rw-r--r-- 1 root root 8160 12 月  5 09:19 0000000000000005-00000000001fbdd0.snap
-rw-r--r-- 1 root root 8160 12 月  5 10:37 0000000000000005-00000000001fe4e1.snap
-rw-r--r-- 1 root root 8508 12 月  5 11:42 0000000000000006-0000000000200bf2.snap
-rw-r--r-- 1 root root 8509 12 月  5 12:49 0000000000000006-0000000000203303.snap
-rw-r--r-- 1 root root 8509 12 月  5 13:56 0000000000000006-0000000000205a14.snap
-rw------- 1 root root 24977408 12 月  5 14:13 db

查看 etcd 的證書文件:

supermap@podc01:~/openthings/kubernetes-tools/jupyter$ ls -l /etc/kubernetes/pki/etcd
總用量  32
-rw-r--r-- 1 root root 1017 11 月  23 10:08 ca.crt
-rw------- 1 root root 1679 11 月  23 10:08 ca.key
-rw-r--r-- 1 root root 1094 11 月  23 10:08 healthcheck-client.crt
-rw------- 1 root root 1679 11 月  23 10:08 healthcheck-client.key
-rw-r--r-- 1 root root 1127 11 月  23 10:08 peer.crt
-rw------- 1 root root 1679 11 月  23 10:08 peer.key
-rw-r--r-- 1 root root 1119 11 月  23 10:08 server.crt
-rw------- 1 root root 1675 11 月  23 10:08 server.key

這些文件和從 Kubernetes 的 pod 命令行進去看到的是完全一樣的(本來就是同一個目錄)。

3、直接訪問 etcd 的服務

下一步,我們來連接到這個實例,查看具體的運行信息。

首先,安裝 etcd-client,這是 etcd 的獨立客戶端。

sudo apt install etcd-client

然后,連接到 etcd 實例(endpoints 為上面所顯示的地址參數:advertise-client-urls):

sudo etcdctl --endpoints https://127.0.0.1:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --key-file=/etc/kubernetes/pki/etcd/server.key --ca-file=/etc/kubernetes/pki/etcd/ca.crt member list

注意:因為 kubernetes 集群使用 https,因此需要指定 –cert-file、–key-file 和 –ca-file 三個參數,參數文件都位于 /etc/kubernetes/pki/etcd 目錄下。

我這里的輸出為:

a874c87fd42044f: name=podc01 peerURLs=https://127.0.0.1:2380 clientURLs=https://127.0.0.1:2379 isLeader=true

可以照此輸入其他命令,來訪問由 kubernetes 所啟動的實例(實際運行時由 kubelet 服務控制)。

4、備份與恢復

知道了上面的秘密,備份 etcd 就不難了。有三個辦法:

可以直接備份 /etc/kubernetes/pki/etcd 和 /var/lib/etcd 下的文件內容。

如果只備份 /var/lib/etcd/member/snap 下的文件,不需要停止服務。

如果停止 etcd 服務,備份過程中服務會中斷。

對于多節點的 etcd 服務,不能使用直接備份和恢復目錄文件的方法。

備份之前先使用 docker stop 停止相應的服務,然后再啟動即可。

缺省配置情況下,每隔 10000 次改變,etcd 將會產生一個 snap。

通過 etcd-client 客戶端備份。如下 (注意,snapshot 是在 API3 里支持的,cert/key/cacert 三個參數名稱與 API2 的命令不同):

sudo ETCDCTL_API=3 etcdctl snapshot save  /home/supermap/k8s-backup/data/etcd-snapshot/$(date +%Y%m%d_%H%M%S)_snapshot.db  --endpoints=127.0.0.1:2379 --cert= /etc/kubernetes/pki/etcd/server.crt  --key= /etc/kubernetes/pki/etcd/server.key  --cacert= /etc/kubernetes/pki/etcd/ca.crt

使用 kubernetes 的 cronjob 實現定期自動化備份。

使用 kubernetes 的 cronjob 實現定期自動化備份需要對 images 和啟動參數有一些調整,我修改后的 yaml 文件如下:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
 name: etcd-disaster-recovery
 namespace: cronjob
spec:
 schedule:  0 22 * * * 
 jobTemplate:
 spec:
 template:
 metadata:
 labels:
 app: etcd-disaster-recovery
 spec:
 affinity:
 nodeAffinity:
 requiredDuringSchedulingIgnoredDuringExecution:
 nodeSelectorTerms:
 - matchExpressions:
 - key: kubernetes.io/hostname
 operator: In
 values:
 - podc01
 containers:
 - name: etcd
 image: k8s.gcr.io/etcd:3.2.24
 imagePullPolicy:  IfNotPresent 
 command:
 - sh
 - -c
 -  export ETCDCTL_API=3; \
 etcdctl --endpoints=$ENDPOINT \
 --cert=/etc/kubernetes/pki/etcd/server.crt \
 --key=/etc/kubernetes/pki/etcd/server.key \
 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
 snapshot save /snapshot/$(date +%Y%m%d_%H%M%S)_snapshot.db; \
 echo etcd backup success 
 env:
 - name: ENDPOINT
 value:  https://127.0.0.1:2379 
 volumeMounts:
 - mountPath:  /etc/kubernetes/pki/etcd 
 name: etcd-certs
 - mountPath:  /var/lib/etcd 
 name: etcd-data
 - mountPath:  /snapshot 
 name: snapshot
 subPath: data/etcd-snapshot
 - mountPath: /etc/localtime
 name: lt-config
 - mountPath: /etc/timezone
 name: tz-config
 restartPolicy: OnFailure
 volumes:
 - name: etcd-certs
 hostPath:
 path: /etc/kubernetes/pki/etcd
 - name: etcd-data
 hostPath:
 path: /var/lib/etcd
 - name: snapshot
 hostPath:
 path: /home/supermap/k8s-backup
 - name: lt-config
 hostPath:
 path: /etc/localtime
 - name: tz-config
 hostPath:
 path: /etc/timezone
 hostNetwork: true

除此之外,這樣 Kubernetes 的 etcd 主數據庫就備份完成了。

不過,完整地備份和恢復 kubernetes 集群還需要一些其它的操作,對于每一個運行的應用都還需要執行單獨的備份操作。

“Kubernetes 的 etcd 狀態數據及其備份是怎樣的”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計7016字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 密云县| 邮箱| 弋阳县| 雷山县| 黎城县| 娄底市| 柞水县| 木兰县| 台中县| 新宾| 团风县| 肇东市| 类乌齐县| 蓬溪县| 禹州市| 应用必备| 济南市| 银川市| 吉水县| 遵义市| 苗栗市| 吉林市| 龙川县| 西宁市| 方山县| 桂阳县| 洪雅县| 夹江县| 阿瓦提县| 行唐县| 清水河县| 垦利县| 宜阳县| 东乡县| 宁晋县| 临猗县| 弥渡县| 江门市| 宝山区| 互助| 团风县|