溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes中怎么實(shí)現(xiàn)一個ESaaS架構(gòu)

發(fā)布時(shí)間:2021-08-09 13:58:45 來源:億速云 閱讀:105 作者:Leah 欄目:云計(jì)算

Kubernetes中怎么實(shí)現(xiàn)一個ESaaS架構(gòu),很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

  1. ES集群中,某個data/master/client節(jié)點(diǎn)掛了之后,分別該怎么辦?
    PS:我的環(huán)境中,所有data節(jié)點(diǎn)都是client,不會獨(dú)立部署client。

    • 如果獨(dú)立部署client,那么client掛了recreate一個新的即可,注意要清理舊的/data數(shù)據(jù)。

    • master /data保存集群元數(shù)據(jù),某個master down了recreate一個新的即可,新的master node 其實(shí)可以利用舊的master node的/data數(shù)據(jù),也可以不用。調(diào)度上不需要干預(yù)。但是建議要清理/data數(shù)據(jù)。

    • data節(jié)點(diǎn)掛了后,不允許利用原來的數(shù)據(jù)進(jìn)行重啟,需要recreate一個新的空白的data node。調(diào)度上需要干預(yù),確保新的這個data node沒有用之前的老的data node的/data數(shù)據(jù)。其實(shí)刪除舊data Node掛了之后,需要清理/data目錄的,新的data node也利用不了老的數(shù)據(jù)。但是為了防止刪除數(shù)據(jù)失敗,還是建議調(diào)度到不同的服務(wù)器

  2. client和master的/data目錄都有持久化的數(shù)據(jù)嗎?

    • client /data也有元數(shù)據(jù)信息,作為“smart router”來接受集群請求并轉(zhuǎn)發(fā)。

    • master的/data目錄也有集群元數(shù)據(jù),不能和data node共享/data目錄。

  3. 如何保證data node的HA?跨服務(wù)器,跨機(jī)架。

    • 首先給服務(wù)器打上機(jī)柜機(jī)架的Lable(esaas.hosts.rack=${rack_id})

    • 通過Pod Anti-affinity做Pod調(diào)度的反親和性;

      	podAntiAffinity:
      	  requiredDuringSchedulingIgnoredDuringExecution:
      	  - weight: 100
      	    podAffinityTerm:
      	      labelSelector:
      	        matchExpressions:
      	        - key: es-cluster-name
      	          operator: In
      	          values:
      	          - ${es-cluster-name}
      	      topologyKey: esaas.hosts.rack=${rack_id}


    • 注意使用requiredDuringSchedulingIgnoredDuringExecution類型的pod anti-affinity時(shí),需要k8s admission controller disable LimitPodHardAntiAffinityTopology,否則會默認(rèn)使用topologyKey: kubernetes.io/hostname,而不能使用自定義topologyKey。

    • 線上按照上面的方式進(jìn)行跨機(jī)架部署,在開發(fā)測試環(huán)境,跨服務(wù)器部署就行了,使用topologyKey: kubernetes.io/hostname.

  4. 如何設(shè)置ES容器的vm屬性vm.max_map_count

    • 通過init container進(jìn)行設(shè)置,要求init contaienr的privilege為true。

    • 所有類型的node(client, master, data)都默認(rèn)使用一樣的vm配置。

      	  initContainers:
      	  - name: init-sysctl
      	    image: busybox
      	    imagePullPolicy: IfNotPresent
      	    command: ["sysctl", "-w", "vm.max_map_count=262144"]
      	    securityContext:
      	      privileged: true


  5. 如何關(guān)閉ES swap的配置?

    • 方法1:關(guān)閉物理服務(wù)器的swap;

    • 方法2:配置每個ES node的配置項(xiàng)bootstrap.mlockall: true,要求es容器添加CAP_IPC_LOCK,SYS_RESOURCE這兩個Linux Capacity。

      	securityContext:
      	  privileged: false
      	  capabilities:
      	    add:
      	      - IPC_LOCK
      	      - SYS_RESOURCE


  6. ES配置項(xiàng)minimum_master_nodes設(shè)置也是通過env注入,然后在容器啟動腳本run.sh中重新生成elasticsearch.yml。

    • POD中注入環(huán)境變量NUMBER_OF_MASTERS

    • 如果集群scale up/down后,可能需要動態(tài)設(shè)置這個環(huán)境變量;

    • 個人覺得,不人為設(shè)定ES集群的minimum_master_nodes配置項(xiàng),由ES集群觸發(fā)選舉時(shí)自己根據(jù)master node數(shù)動態(tài)調(diào)整。

  7. 修改file descriptors,建議212644(64K)。

    • 修改容器內(nèi)/etc/security/limits.conf, 也應(yīng)該是需要privilege,或者對應(yīng)Linux capability。

  8. es data通過K8S StatefulSet部署,每個es data Pod都會通過volumeClaimTemplates創(chuàng)建對應(yīng)的PV, 將宿主機(jī)上的/data/${es_cluster_name}掛載到es data容器內(nèi)的/data目錄。容器漂移或者recreate時(shí),舊的服務(wù)器上es垃圾數(shù)據(jù)需要做清理。

    • HostPath PV支持Recycle這種Reclain Policy。(目前只有HostPath和NFS支持Recycle)

    • Recycle —> basic scrub (rm -rf /thevolume/*)

  9. scale down 和 scale up時(shí)具體分別該如何操作?

    • ES集群的監(jiān)控狀態(tài)是green;

    • 確??s容后,max(index1.replicas, index2.replicas,…) + 1 < data-node-num

    • 其他檢查

    • scale down/up es-clients,直接按照HA的思路進(jìn)行scale,無需其他操作;

    • scale down/up es-masters,按照HA的思路進(jìn)行scale后,需要調(diào)ES接口修改minimum_master_nodes。

    • scale down/up es-datas, 按照HA的思路進(jìn)行scale up后,無需其他操作;scale down時(shí),需要將對應(yīng)hostpath上的目錄(數(shù)據(jù))進(jìn)行清理。每次縮容只允許減1個es data node,scale down操作前需要檢查:

  10. 某個物理服務(wù)器要下線,該如何操作?

    • 第3點(diǎn)提到HA方案,可以保證每個服務(wù)器上最多只會存在某個ES集群中的單個cient/master/data節(jié)點(diǎn),因此服務(wù)器下線最多只會down掉ES集群的單個cient/master/data節(jié)點(diǎn),對于正規(guī)的ES集群是不影響的。這種情況,直接在服務(wù)器上執(zhí)行kubectl drain將deployment,StatefulSet pods驅(qū)逐出去,并會自動在其他合適的服務(wù)器上recreate一個新的cient/master/data節(jié)點(diǎn)。ES集群在整個過程中始終保持正常工作。

    • 如果用戶部署的是單節(jié)點(diǎn)的ES實(shí)例,那么按照上面的步驟,必然會導(dǎo)致用戶的數(shù)據(jù)丟失,ES服務(wù)長時(shí)間不能用。因此需要對用戶進(jìn)行風(fēng)險(xiǎn)提示,并建議先進(jìn)行擴(kuò)容,然后待新節(jié)點(diǎn)同步數(shù)據(jù)完成后,才能干掉原來的es實(shí)例。

  11. 某個服務(wù)器突然down了,接下來是什么自動流程?

    • 服務(wù)器down了以后,由于調(diào)度部署時(shí)考慮了HA,因此不會影響正規(guī)的ES集群的使用。

    • 接著大概5min(通過pod-eviction-timeout設(shè)置)時(shí)間,會在新的Node上recreate新的client/master/data容器。這樣就繼續(xù)維持原有ES集群的規(guī)模。

  12. ES插件的安裝流程?

    • CaaS集群內(nèi)部提供ElastcSearch Plugin倉庫,存放常用插件提供下載;

    • 用戶在初始化部署ES集群時(shí)可以選擇想要安裝plugins(支持site和jar類型),在init container中下載插件文件到plugin-volume,ES啟動時(shí)自動加載這些plugins;

    • 如果在ES集群使用過程中用戶想安裝plugins,對于site類型的plugin,調(diào)用Kubernetes exec接口下載對應(yīng)Site plugin文件到對應(yīng)的插件目錄即可;對于jar類型的plugin,同樣的先現(xiàn)在插件到對應(yīng)的plugin-volume目錄,由于需要重啟ES實(shí)例,通過執(zhí)行kubectl exec POD_NAME -c CONTAINER_NAME reboot 或者 docker kill $containerName來重啟ES容器而不用recreate Pod。

    • 由于多個ES不能共享同一個plugin目錄,因此需要給每個ES實(shí)例都劃分獨(dú)立的plugin-volume,掛載宿主機(jī)上不同的hostpath;

    • 對于ES管理類plugin,需要指定插件部署到哪個ES node上(建議部署在某個master node上),后面訪問該plugin只能通過訪問該ES node的plugin API;

    • 對于ES功能類plugin(比如ik分詞器),需要在所有ES集群 nodes(client, master, data)上安裝該plugin。

    • 安裝jar插件重啟es節(jié)點(diǎn)前,必須檢查es集群健康狀態(tài)為green。

    • es節(jié)點(diǎn)重啟時(shí),注意ES的Fault Detection機(jī)制,配置discovery.zen.fd.ping_interval(1s), ping_timeout(30s),ping_retries(3),也就是說默認(rèn)90s內(nèi)沒ping通就認(rèn)為節(jié)點(diǎn)失敗,然后進(jìn)行分片遷移。我們關(guān)注這個配置,有需要可以適當(dāng)調(diào)大。

    • 討論決定,先只支持jar類型的插件,后續(xù)考慮sites類的插件(比如通過ESaaS本地存放sites plugin,所有ES集群共用)

  13. 自研ES監(jiān)控工具如何與ES集群對接?

    • 監(jiān)控工具支持API動態(tài)增加ES集群信息,只需要把集群中任一node(client/master/data)的IP和Port(9200)添加到監(jiān)控工具中,有client就給client的信息,如果只有data node,則給data node的9200到監(jiān)控工具;

    • ESaaS創(chuàng)建ES集群時(shí),配置是否自動添加到監(jiān)控平臺,如果是,則部署完ES集群后回調(diào)監(jiān)控平臺的”ADD_ES_CLUSTER“接口;

    • ESaaS頁面提供到監(jiān)控平臺的跳轉(zhuǎn)鏈接,由監(jiān)控平臺做好監(jiān)控信息的權(quán)限管理。監(jiān)控添加ES集群時(shí)需要帶上用戶的ID。

  14. Kibana服務(wù)的部署如何與ES集群對接?

    • 初始化部署ES集群時(shí),用戶可以勾選是否一并自動創(chuàng)建對應(yīng)的Kibana服務(wù);

    • 也提供單獨(dú)創(chuàng)建Kibana服務(wù)的頁面入口,要求用戶選擇對接的ES集群;

    • 通過注入環(huán)境變量ELASTICSEARCH_URL: http://es-client.namespace-1.svc.pro.es::9200

  15. 所有ES nodes的elasticsearch.yaml中的discovery hosts只需要配置master nodes的域名或者IP列表,當(dāng)然如果配置所有的(client, data, master nodes)IP列表,也不會有異常。

  16. 初始化創(chuàng)建ES集群的時(shí)候,注意確保成功啟動所有master nodes后,再去創(chuàng)建data nodes。client nodes的創(chuàng)建順序沒有要求。

  17. ES node的JVM內(nèi)存配置,支持8,16,32g。最大不允許超過32g,否則反而會因?yàn)镚C問題等導(dǎo)致性能更差。

  18. ES集群的日志收集,接入EFK日志系統(tǒng)。同時(shí)提供ES集群各個容器的web console能力,讓用戶能在web console查看(慢)日志等操作。

  19. ES zen discovery我們通過域名(K8S Service Name)來解析es master IP List, 需要注意hosts.resolve_timeout,默認(rèn)5s。

  20. ES 2.x和5.x,6.x在node角色劃分不一樣,目前我只考了2.x版本,5.x和6.x需做適度調(diào)整。

  21. 引導(dǎo)檢查

    • 啟動報(bào)錯:system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

    • 解決方法:elasticsearch.yml加上bootstrap.system_call_filter: false

    • 啟動報(bào)錯:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    • 解決方法:vi /etc/sysctl.conf

      	vm.max_map_count=262144
      	sysctl -p


    • 啟動報(bào)錯:max number of threads [1024] for user [push] is too low, increase to at least [2048]

    • 解決方法:vi /etc/security/limits.d/90-nproc.conf

      	soft nproc 2048


    • 啟動報(bào)錯:max file descriptors [65535] for elasticsearch process likely too low, increase to at least [65536]

    • 解決方式:ulimit -n 65536 或者 vi /etc/security/limits.conf

      	soft nofile 65536
      	hard nofile 65536


    • Heap size check 堆大小檢查

    • File descriptor check 文件描述符(文件句柄)檢查

    • Memory lock check 內(nèi)存鎖住檢查

    • Maximum number of threads check 線程最大值檢查

    • Maximum size virtual memory check 虛擬內(nèi)存最大值檢查

    • Maximum map count check map count最大值檢查

    • Client JVM check JVM客戶端檢查

    • Use serial collector check

    • System call filter check

    • OnError and OnOutOfMemoryError checks

    • Early-access check

    • G1GC check G1垃圾回收器檢查

  22. 用戶在ESaaS Portal上自助申請ES集群時(shí),除了指定每個nodes的cpu,mem之外,還需要指定需要的本地存儲空間大小,Kubernetes 1.9在調(diào)度時(shí)需要考慮服務(wù)器存儲空間是否能滿足需求。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI