国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于 Kubernetes 部署 Zookeeper(StatefulSet方式)

這篇具有很好參考價(jià)值的文章主要介紹了基于 Kubernetes 部署 Zookeeper(StatefulSet方式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

隨著云原生化流行的大趨勢,我們的基礎(chǔ)組件也需要逐漸上Kubernetes了。Apache Zookeeper作為目前最流行的分布式協(xié)調(diào)組件,在我們的微服務(wù)架構(gòu)中負(fù)責(zé)扮演注冊中心的角色。

在Kubernetes中運(yùn)行Zookeeper集群是很有意義的,可以利用其原生的彈性擴(kuò)縮容、高可用特性。

先說下使用的k8s的版本是1.25.0,對于PodDisruptionBudget的apiVersion會有影響,某些更老的k8s版本,apiVersion是policy/v1bata,1.25.0的k8s對應(yīng)的apiVersion是policy/v1。

使用StatefulSet部署Zookeeper

官方提供了使用statefulSet的方式來部署 Zookeeper 運(yùn)行 Zookeeper,它會創(chuàng)建一個headless service,一個cluster service,一個podDisruptionBudget,一個statefulSet。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: zk-pv
spec:
  capacity:
 ?  storage: 512Mi
  accessModes:
 ?  - ReadWriteOnce
  hostPath:
 ?  path: /data
---
apiVersion: v1
kind: Service
metadata:
  name: zk-hs
  labels:
 ?  app: zk
spec:
  ports:
  - port: 2888
 ?  name: server
  - port: 3888
 ?  name: leader-election
  clusterIP: None
  selector:
 ?  app: zk
---
apiVersion: v1
kind: Service
metadata:
  name: zk-cs
  labels:
 ?  app: zk
spec:
  ports:
  - port: 2181
 ?  name: client
  selector:
 ?  app: zk
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  selector:
 ?  matchLabels:
 ? ?  app: zk
  maxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: zk
spec:
  selector:
 ?  matchLabels:
 ? ?  app: zk
  serviceName: zk-hs
  replicas: 3
  updateStrategy:
 ?  type: RollingUpdate
  podManagementPolicy: OrderedReady
  template:
 ?  metadata:
 ? ?  labels:
 ? ? ?  app: zk
 ?  spec:
 ? ?  affinity:
 ? ? ?  podAntiAffinity:
 ? ? ? ?  requiredDuringSchedulingIgnoredDuringExecution:
 ? ? ? ? ?  - labelSelector:
 ? ? ? ? ? ? ?  matchExpressions:
 ? ? ? ? ? ? ? ?  - key: "app"
 ? ? ? ? ? ? ? ? ?  operator: In
 ? ? ? ? ? ? ? ? ?  values:
 ? ? ? ? ? ? ? ? ?  - zk
 ? ? ? ? ? ?  topologyKey: "kubernetes.io/hostname"
 ? ?  containers:
 ? ?  - name: kubernetes-zookeeper
 ? ? ?  imagePullPolicy: IfNotPresent
 ? ? ?  image: "harbor.martin.cc/google_containers/kubernetes-zookeeper:1.0-3.4.10"
 ? ? ?  resources:
 ? ? ? ?  requests:
 ? ? ? ? ?  memory: "0.5Gi"
 ? ? ? ? ?  cpu: "0.5"
 ? ? ?  ports:
 ? ? ?  - containerPort: 2181
 ? ? ? ?  name: client
 ? ? ?  - containerPort: 2888
 ? ? ? ?  name: server
 ? ? ?  - containerPort: 3888
 ? ? ? ?  name: leader-election
 ? ? ?  command:
 ? ? ?  - sh
 ? ? ?  - -c
 ? ? ?  - "start-zookeeper \
 ? ? ? ?  --servers=3 \
 ? ? ? ?  --data_dir=/var/lib/zookeeper/data \
 ? ? ? ?  --data_log_dir=/var/lib/zookeeper/data/log \
 ? ? ? ?  --conf_dir=/opt/zookeeper/conf \
 ? ? ? ?  --client_port=2181 \
 ? ? ? ?  --election_port=3888 \
 ? ? ? ?  --server_port=2888 \
 ? ? ? ?  --tick_time=2000 \
 ? ? ? ?  --init_limit=10 \
 ? ? ? ?  --sync_limit=5 \
 ? ? ? ?  --heap=512M \
 ? ? ? ?  --max_client_cnxns=60 \
 ? ? ? ?  --snap_retain_count=3 \
 ? ? ? ?  --purge_interval=12 \
 ? ? ? ?  --max_session_timeout=40000 \
 ? ? ? ?  --min_session_timeout=4000 \
 ? ? ? ?  --log_level=INFO"
 ? ? ?  readinessProbe:
 ? ? ? ?  exec:
 ? ? ? ? ?  command:
 ? ? ? ? ?  - sh
 ? ? ? ? ?  - -c
 ? ? ? ? ?  - "zookeeper-ready 2181"
 ? ? ? ?  initialDelaySeconds: 10
 ? ? ? ?  timeoutSeconds: 5
 ? ? ?  livenessProbe:
 ? ? ? ?  exec:
 ? ? ? ? ?  command:
 ? ? ? ? ?  - sh
 ? ? ? ? ?  - -c
 ? ? ? ? ?  - "zookeeper-ready 2181"
 ? ? ? ?  initialDelaySeconds: 10
 ? ? ? ?  timeoutSeconds: 5
 ? ? ?  volumeMounts:
 ? ? ?  - name: datadir
 ? ? ? ?  mountPath: /var/lib/zookeeper
 ? ?  securityContext:
 ? ? ?  runAsUser: 1000
 ? ? ?  fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
 ? ?  name: datadir
 ?  spec:
 ? ?  accessModes: [ "ReadWriteOnce" ]
 ? ?  resources:
 ? ? ?  requests:
 ? ? ? ?  storage: 512Mi

使用 kubectl apply應(yīng)用這個配置文件,等待一會之后,發(fā)現(xiàn)pod和service都已創(chuàng)建成功。

kubectl get pod 查看到 zk-0 pod一直pending.

kubectl describe pod zk-0 看到事件原因是:

0/4 nodes are available: 4 pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.

再使用:

kubectl logs -n kube-system kube-controller-manager-k8s-master01.example.local

查看controller-manager的pod日志:

I0513 08:13:08.710572 ? ? ? 1 event.go:294] "Event occurred" object="default/datadir-zk-0" fieldPath="" kind="PersistentVolumeClaim" apiVersion="v1" type="Normal" reason="FailedBinding" message="no persistent volumes available for this claim and no storage class is set"

這么看,原來PV和 storage class 都沒搞。這個網(wǎng)上的參考還是需要自己補(bǔ)充一下的,PV的API定義已經(jīng)加到上面的資源清單了。

PV弄了個HostPath的。但是也不知道存在哪個節(jié)點(diǎn)上。

然后再執(zhí)行kubectl apply -f zookeeper.yml創(chuàng)建,POD zk-0未啟動成功,出來錯誤CrashLoopBackOff。通過kubectl logs zk-0查看POD日志:

#This file was autogenerated DO NOT EDIT
clientPort=2181
dataDir=/var/lib/zookeeper/data
dataLogDir=/var/lib/zookeeper/data/log
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
autopurge.snapRetainCount=3
autopurge.purgeInteval=12
server.1=zk-0.zk-hs.default.svc.cluster.local:2888:3888
server.2=zk-1.zk-hs.default.svc.cluster.local:2888:3888
server.3=zk-2.zk-hs.default.svc.cluster.local:2888:3888
Creating ZooKeeper log4j configuration
mkdir: cannot create directory '/var/lib/zookeeper/data': Permission denied
chown: cannot access '/var/lib/zookeeper/data': No such file or directory
mkdir: cannot create directory '/var/lib/zookeeper/data': Permission denied
chown: invalid group: 'zookeeper:USER'
/usr/bin/start-zookeeper: line 176: /var/lib/zookeeper/data/myid: No such file or directory

有個疑問,這個日志是一直存著嗎,還是POD沒啟動成功,我用kubectl delete -f zookeeper刪除掉POD,再看下,還有沒有這個日志??隙]了:

kubectl logs zk-0
Error from server (NotFound): pods "zk-0" not found

原來是POD及容器對于卷的目錄主機(jī)目錄沒有寫與創(chuàng)建子目錄的權(quán)限。把對應(yīng)的目錄POD部署節(jié)點(diǎn)的目錄 /data/,權(quán)限修改成全部可以讀寫創(chuàng)建:

chmod 777 /data/

重啟后,還是有問題:

發(fā)現(xiàn)pod zk-0啟動成功了,但是到了zk-1啟動失敗,原來是每個pod要創(chuàng)建一個hostPath的PV。接下來創(chuàng)建兩個zk-pv1,zk-pv2,在node2和node3上創(chuàng)建好對應(yīng)的host文件夾/data/,并設(shè)置權(quán)限777。然后重啟,三個pod都啟動成功了。

恭喜自己,部署看起來是成功了,那么就真正測試一下部署好的zk集群吧。

要測試在 Kubernetes 上部署的 ZooKeeper 集群,可以執(zhí)行以下步驟:

  1. 獲取 ZooKeeper 的客戶端工具,例如 ZooKeeper 命令行客戶端 zkCli.sh??梢栽?ZooKeeper 的官方網(wǎng)站下載安裝包,并解壓獲取相關(guān)工具。

  2. 進(jìn)入 Kubernetes 集群中的任意一個 Pod,可以使用 kubectl exec 命令進(jìn)入 Pod 的容器內(nèi)部。

    kubectl exec -it <pod-name> -- /bin/bash
  3. 在容器內(nèi)部,使用 ZooKeeper 客戶端工具連接到 ZooKeeper 集群。根據(jù)您的部署方式和服務(wù)發(fā)現(xiàn)配置,可以使用 Service 名稱或 Pod IP 連接到 ZooKeeper。

    ./zkCli.sh -server <zk-service-name>:<zk-service-port>

    或者

    ./zkCli.sh -server <zk-pod-ip>:<zk-service-port>

    這里的 <zk-service-name> 是您 ZooKeeper 服務(wù)的名稱,<zk-service-port> 是服務(wù)的端口號。如果您使用的是 StatefulSet 部署方式,可以使用 zk-{index}.<statefulset-name> 的方式連接到每個 ZooKeeper Pod。

  4. 連接成功后,您可以執(zhí)行各種 ZooKeeper 的命令和操作,例如創(chuàng)建節(jié)點(diǎn)、設(shè)置數(shù)據(jù)、監(jiān)聽事件等??梢酝ㄟ^命令 help? 獲取更多可用的命令列表和用法。

    [zk: <zk-service-name>:<zk-service-port>] help
    [zk: <zk-service-name>:<zk-service-port>] ?

    例如,可以使用以下命令創(chuàng)建一個節(jié)點(diǎn)并設(shè)置數(shù)據(jù):

    [zk: <zk-service-name>:<zk-service-port>] create /test mydata

    然后使用以下命令獲取節(jié)點(diǎn)的數(shù)據(jù):

    [zk: <zk-service-name>:<zk-service-port>] get /test

    通過執(zhí)行各種命令和操作,可以驗(yàn)證 ZooKeeper 集群的功能和可用性。

請注意,上述命令中的 <zk-service-name><zk-service-port> 需要替換為實(shí)際的 ZooKeeper 服務(wù)名稱和端口。具體的連接信息取決于您的部署方式和配置。

都是驗(yàn)證通過的,說明安裝成功了,Oh Yeah!

附:安裝的容器鏡像描述信息:

The ZooKeeper package is installed into the /opt/zookeeper directory, all configuration is sym linked into the /usr/etc/zookeeper/, and all executables are sym linked into /usr/bin. The ZooKeeper data directories are contained in /var/lib/zookeeper. This is identical to the RPM distribution that users should be familiar with.

所以 /var/lib/zookeeper這個文件夾是放數(shù)據(jù)的,所以我們就明白為什么要把這個文件夾放到PV了。文章來源地址http://www.zghlxwxcb.cn/news/detail-478455.html

到了這里,關(guān)于基于 Kubernetes 部署 Zookeeper(StatefulSet方式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何調(diào)整 Kubernetes StatefulSet 卷的大小

    如何調(diào)整 Kubernetes StatefulSet 卷的大小

    Kubernetes StatefulSet用于在集群內(nèi)部署有狀態(tài)應(yīng)用程序。StatefulSet 中的每個 Pod 都可以訪問即使在重新調(diào)度后仍堅(jiān)持使用的本地持久卷。這使得 Pod 能夠維護(hù)與其集合中的鄰居不同的單獨(dú)狀態(tài)。 不幸的是,這些卷有一個很大的限制:Kubernetes 沒有提供從 StatefulSet 對象調(diào)整它們大小

    2024年02月07日
    瀏覽(15)
  • 【云原生 | 從零開始學(xué)Kubernetes】二十三、Kubernetes控制器Statefulset

    【云原生 | 從零開始學(xué)Kubernetes】二十三、Kubernetes控制器Statefulset

    該篇文章已經(jīng)被專欄《從零開始學(xué)k8s》收錄 上一篇文章:kubernetes持久化存儲下 點(diǎn)擊跳轉(zhuǎn) StatefulSet 是為了管理有狀態(tài)服務(wù)的問題而設(shè)計(jì)的 對于StatefulSet中的Pod,每個Pod掛載自己獨(dú)立的存儲,如果一個Pod出現(xiàn)故障,從其他節(jié)點(diǎn)啟動一個同樣名字的Pod,要掛載上原來Pod的存儲繼續(xù)

    2024年02月03日
    瀏覽(35)
  • 【探索 Kubernetes|作業(yè)管理篇 系列 13】StatefulSet 拓?fù)錉顟B(tài)

    【探索 Kubernetes|作業(yè)管理篇 系列 13】StatefulSet 拓?fù)錉顟B(tài)

    大家好,我是秋意零。 在上一篇中,我們講解了 Deployment 這種無狀態(tài)的控制器;而如果要部署有狀態(tài)的應(yīng)用,那么 Deployment 顯然是達(dá)不到我們的需求的。 今天講解的是 StatefulSet 有狀態(tài)控制器。 最近搞了一個扣扣群,旨在技術(shù)交流、博客互助,希望各位大佬多多支持! 獲取

    2024年02月11日
    瀏覽(35)
  • 【探索 Kubernetes|作業(yè)管理篇 系列 14】StatefulSet 存儲狀態(tài)

    【探索 Kubernetes|作業(yè)管理篇 系列 14】StatefulSet 存儲狀態(tài)

    大家好,我是秋意零。 在上一篇中,我們講解了 StatefulSet 的拓?fù)錉顟B(tài);我們發(fā)現(xiàn),它的拓?fù)錉顟B(tài),就是順序啟動/刪除、Pod 名稱+編號命名、將 Pod 名稱設(shè)為 Hostname 名稱、通過 Service 無頭服務(wù)的 DNS 記錄訪問。 今天,就來看看 StatefulSet 的存儲狀態(tài)。 最近搞了一個扣扣群,旨在

    2024年02月11日
    瀏覽(21)
  • 【Kubernetes資源篇】StatefulSet無狀態(tài)服務(wù)管理入門實(shí)戰(zhàn)詳解

    【Kubernetes資源篇】StatefulSet無狀態(tài)服務(wù)管理入門實(shí)戰(zhàn)詳解

    官方中文參考文檔 1、StatefulSet Pod控制器特性 StatefulSet(簡寫sts)也是K8S集群中的一種Pod資源管理器,與deployment Pod控制器不同的是,StatefulSet用于管理無狀態(tài)程序,特性如下: 穩(wěn)定的網(wǎng)絡(luò)標(biāo)識符:管理的Pod都擁有一個穩(wěn)定的網(wǎng)絡(luò)標(biāo)識符??梢酝ㄟ^網(wǎng)絡(luò)標(biāo)識符進(jìn)行訪問。 有序部署

    2024年02月13日
    瀏覽(23)
  • 【K8S】Kubernetes 中有狀態(tài)的資源對象——StatefulSet

    現(xiàn)在基本上很多服務(wù)中的應(yīng)用都是有狀態(tài)的,比如MySQL數(shù)據(jù)庫、Redis等,因?yàn)槠渲械臄?shù)據(jù)在不斷地變化,所以這些應(yīng)用每個時(shí)刻都處于一個不同的狀態(tài)?;蛘咭粋€系統(tǒng)中存在多個不同的應(yīng)用,這些應(yīng)用存在一定的依賴關(guān)系。例如一個博客服務(wù),該服務(wù)中包含了Redis緩存和MySQL數(shù)

    2024年02月04日
    瀏覽(26)
  • Helm方式部署 zookeeper+kafka 集群 ——2023.05

    Helm方式部署 zookeeper+kafka 集群 ——2023.05

    服務(wù) 版本 centos 7.9 kubernetes v1.20.15 helm v3.10.1 zookeeper 3.8.1 kafka 3.4.0 安裝方式有兩種,在線安裝和離線安裝,在線安裝方便快捷,但是無法修改參數(shù)。由于需要修改配置,故本文采用離線安裝方式。 2.1 在線安裝zookeeper+kafka集群 1. 部署zookeeper集群 提示: 由于這個ApacheZookeeper集群

    2024年02月09日
    瀏覽(16)
  • kubernetes 二進(jìn)制方式部署 1.27.1

    序號 名稱 IP地址 CPU/顆 內(nèi)存/GB 硬盤/GB 描述 1 k8s-master01 192.168.1.11 4 4 100 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx 2 k8s-master02 192.168.1.12 4 4 100 kube-apiserver、kube-controller-manager、kube-scheduler、etcd、 kubelet、kube-proxy、nfs-cl

    2024年02月10日
    瀏覽(37)
  • (六)Kubernetes - 手動部署(二進(jìn)制方式安裝)

    (六)Kubernetes - 手動部署(二進(jìn)制方式安裝)

    可參考以下鏈接,了解nginx和keepalived,不看也不影響部署 CHAPTER 3 Web HA集群部署 - Keepalived CHAPTER 1 Web Server - nginx 安裝配置 Nginx是一個主流Web服務(wù)和反向代理服務(wù)器,這里用四層實(shí)現(xiàn)對apiserver實(shí)現(xiàn)負(fù)載均衡。 Keepalived是一個主流高可用軟件,基于VIP綁定實(shí)現(xiàn)服務(wù)器雙機(jī)熱備,在

    2024年02月04日
    瀏覽(21)
  • 飛天使-k8s知識點(diǎn)20-kubernetes實(shí)操5-pod更新與暫停-statefulset

    飛天使-k8s知識點(diǎn)20-kubernetes實(shí)操5-pod更新與暫停-statefulset

    資源調(diào)度 Deployment:擴(kuò)縮容 資源調(diào)度 Deployment:更新的暫停與恢復(fù) 資源調(diào)度 StatefulSet:定義一個有狀態(tài)服務(wù) headless service 金絲雀發(fā)布 參考文檔:https://support.huaweicloud.com/basics-cce/kubernetes_0015.html

    2024年02月20日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包