日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

工作負(fù)載推薦配置

在ACK集群中配置工作負(fù)載(Deployment、StatefulSet、DaemonSet、Job、CronJob等)時,您需考慮多種因素,以確保應(yīng)用可以穩(wěn)定、可靠地運(yùn)行。

聲明每個Pod的resource(Request和Limit

在使用Kubernetes集群時,經(jīng)常會遇到在一個節(jié)點上調(diào)度了太多的Pod,導(dǎo)致節(jié)點負(fù)載過高,無法正常對外提供服務(wù)的問題。

為避免上述問題,在Kubernetes集群中部署Pod時,您可以指定該P(yáng)od所需的Request及Limit資源,Kubernetes在部署這個Pod的時候,就會根據(jù)Pod的需求找一個具有充足空閑資源的節(jié)點部署這個Pod。下面的例子中,聲明Nginx這個Pod需要1核CPU,1024MB的內(nèi)存,運(yùn)行中實際使用不能超過2核CPU和4096MB內(nèi)存。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources: # 資源聲明
      requests:
        memory: "1024Mi"
        cpu: "1000m"
      limits:
        memory: "4096Mi"
        cpu: "2000m"

Kubernetes采用靜態(tài)資源調(diào)度方式,對于每個節(jié)點上的剩余資源的計算為節(jié)點剩余資源=節(jié)點總資源-已經(jīng)分配出去的資源,并不是實際使用的資源。如果您自己手動運(yùn)行一個資源消耗較大的程序,Kubernetes并不能感知到。

此外,所有Pod都要聲明resources。沒有聲明resources的Pod被調(diào)度到某個節(jié)點后,Kubernetes不會在對應(yīng)節(jié)點上減去這個Pod使用的資源,繼而可能導(dǎo)致該節(jié)點上被調(diào)度過多Pod。

您可以使用ACK提供的資源畫像功能,基于資源使用量的歷史數(shù)據(jù)獲得容器粒度的資源規(guī)格推薦,簡化為容器配置Request和Limit的復(fù)雜度。更多信息,請參見資源畫像

啟動時等待下游服務(wù),不要直接退出

有些應(yīng)用可能會有一些外部依賴,例如需要從數(shù)據(jù)庫(DB)讀取數(shù)據(jù)或者依賴另外一個服務(wù)的接口。應(yīng)用啟動時,外部依賴未必都能滿足。手動運(yùn)維時,通常采用依賴不滿足立即退出的方式,也就是所謂的failfast,但在Kubernetes中,這種策略不再適用。這是因為Kubernetes中多數(shù)運(yùn)維操作都是自動操作,無需人工介入。例如,部署應(yīng)用時,無需自己選擇節(jié)點,再到節(jié)點上啟動應(yīng)用;應(yīng)用fail時,也無需手動重啟,Kubernetes會自動重啟應(yīng)用;負(fù)載增高時,還可以通過HPA自動擴(kuò)容。

啟動時依賴不滿足的場景下,可以假設(shè)有兩個應(yīng)用A和B,A依賴B且運(yùn)行在同一個節(jié)點上,此節(jié)點因為某些原因重啟,重啟后,A首先啟動,B還沒啟動,對于A來說就是依賴不滿足。如果A還是按照傳統(tǒng)的方式直接退出,當(dāng)B啟動之后,A也不會再啟動,必須人工介入處理。

在Kubernetes集群中,推薦您啟動時檢查依賴,如果不滿足,則進(jìn)行輪詢等待,而不是直接退出。可以通過 Init Container完成這個功能。

配置restart policy

Pod運(yùn)行過程中進(jìn)程退出十分常見。代碼中存在Bug、占用內(nèi)存太多等,都會導(dǎo)致應(yīng)用進(jìn)程退出,繼而導(dǎo)致Pod退出。您可在Pod上配置restartPolicy,實現(xiàn)Pod退出后自動啟動。

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat
    restartPolicy: OnFailure 

restartPolicy有三個可選值:

  • Always:總是自動重啟。

  • OnFailure:異常退出時自動重啟(進(jìn)程退出狀態(tài)非0)。

  • Never:從不重啟。

配置Liveness Probe和Readiness Probe

Pod處于Running狀態(tài)和Pod能正常提供服務(wù)是完全不同的概念。一個Running狀態(tài)的Pod,里面的進(jìn)程可能發(fā)生了死鎖而無法提供服務(wù)。但是因為Pod還是Running的,Kubernetes也不會自動重啟這個Pod。所以我們要在所有Pod上配置Liveness Probe,探測Pod是否真的存活,是否還能提供服務(wù)。如果Liveness Probe發(fā)現(xiàn)了問題,Kubernetes會重啟Pod。

Readiness Probe用于探測Pod是否可以對外提供服務(wù)。應(yīng)用啟動過程中需要一些時間完成初始化,在這個過程中是無法對外提供服務(wù)的,通過Readiness Probe,可以告訴Ingress或者Service是否可以將流量轉(zhuǎn)發(fā)到這個Pod上。當(dāng)Pod出現(xiàn)問題時,Readiness Probe可以避免新流量繼續(xù)轉(zhuǎn)發(fā)到這個Pod。

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat
    livenessProbe:
      httpGet:
        path: /index.jsp
        port: 8080
      initialDelaySeconds: 3
      periodSeconds: 3
    readinessProbe:
      httpGet:
        path: /index.jsp
        port: 8080

每個進(jìn)程一個容器

很多剛剛接觸容器的人喜歡按照舊習(xí)慣把容器當(dāng)作虛擬機(jī)(VM)使用,在一個容器里放置多個進(jìn)程:監(jiān)控進(jìn)程、日志進(jìn)程、sshd進(jìn)程,甚至整個Systemd。這樣操作存在兩個問題:

  • 判斷Pod整體的資源占用會變復(fù)雜,不方便實施Pod Resource涉及到的Request和Limit。

  • 容器內(nèi)只有一個進(jìn)程的情況下,如果進(jìn)程中斷,外部的容器引擎可以清楚地感知到,并且重啟容器。如果容器內(nèi)有多個進(jìn)程,某個進(jìn)程掛了,容器未必受影響,外部的容器引擎無法感知到容器內(nèi)有進(jìn)程退出,也不會對容器做任何操作,但是實際上容器已經(jīng)不能正常工作了。

如果有幾個進(jìn)程需要協(xié)同工作,在Kubernetes里也可以實現(xiàn),例如:nginx和php-fpm,通過Unix domain socket通信,我們可以用一個包含兩個容器的Pod,將Unix socket放在兩個容器的共享Volume中。

確保不存在SPOF(Single Point of Failure)

如果應(yīng)用只有一個實例,當(dāng)實例失敗的時候,雖然Kubernetes能夠重啟實例,但是中間不可避免地存在一段時間的不可用。甚至更新應(yīng)用,發(fā)布一個新版本的時候,也會出現(xiàn)這種情況。在Kubernetes里,盡量避免直接使用Pod,盡可能使用Deployment/StatefulSet,并且讓應(yīng)用的Pod在兩個以上。

相關(guān)文檔

ACK可實現(xiàn)應(yīng)用灰度發(fā)布、藍(lán)綠發(fā)布等,請參見應(yīng)用部署

關(guān)于應(yīng)用管理的最佳實踐,請參見應(yīng)用管理最佳實踐

如果您的應(yīng)用Pod運(yùn)行出現(xiàn)問題,請先參見Pod異常問題排查應(yīng)用FAQ進(jìn)行自排查。