您可以使用鏡像建立一個可公網訪問的nginx應用。

前提条件

建立一個 Kubernetes 叢集。詳情請參見 建立Kubernetes叢集

操作步骤

  1. 登入Container Service管理主控台
  2. 在Kubernetes菜單下,單擊左側導覽列中的應用 > 部署,然後單擊頁面右上方的使用鏡像建立
  3. 設定應用程式名稱部署叢集命名空間副本數量類型,副本數量即應用程式套件含的Pod數量。然後單擊下一步 進入容器配置頁面。
    说明 本例中選擇 無狀態類型,即Deployment類型。
    如果您不設定 命名空間,系統會預設使用 default 命名空間。


  4. 設定容器配置。
    说明 您可為應用的Pod設定多個容器。
    1. 設定容器的基本配置。
      • 鏡像名稱:您可以單擊選擇鏡像,在彈出的對話方塊中選擇所需的鏡像並單擊確定,本例中為 nginx。

        您還可以填寫私人 registry。填寫的格式為domainname/namespace/imagename:tag

      • 鏡像版本:您可以單擊選擇鏡像版本 選擇鏡像的版本。若不指定,預設為 latest。
      • 總是拉取鏡像:為了提高效率,Container Service會對鏡像進行緩衝。部署時,如果發現鏡像 Tag 與本機快取的一致,則會直接複用而不重新拉取。所以,如果您基於上層業務便利性等因素考慮,在做代碼和鏡像變更時沒有同步修改 Tag ,就會導致部署時還是使用本機快取內舊版本鏡像。而勾選該選項後,會忽略緩衝,每次部署時重新拉取鏡像,確保使用的始終是最新的鏡像和代碼。
      • 資源限制:可指定該應用所能使用的資源上限,包括 CPU 和 記憶體兩種資源,防止佔用過多資源。其中,CPU 資源的單位為 millicores,即一個核的千分之一;記憶體的單位為 Bytes,可以為 Gi、Mi 或 Ki。
      • 所需資源:即為該應用預留資源額度,包括 CPU 和 記憶體兩種資源,即容器獨佔該資源,防止因資源不足而被其他服務或進程爭搶資源,導致應用不可用。
      • Init Container:勾選該項,表示建立一個Init Container,Init Container包含一些實用的工具,具體參見https://kubernetes.io/docs/concepts/workloads/pods/init-containers/


    2. 可选: 配置資料卷資訊。

      支援配置本機存放區和雲端儲存。

      • 本機存放區:支援主機目錄(hostpath)、配置項(configmap)、保密字典(secret)和臨時目錄,將對應的掛載源掛載到容器路徑中。更多資訊參見 volumes
      • 雲端儲存:支援雲端硬碟/NAS/OSS三種雲端儲存類型。
      本例中配置了一個雲端硬碟類型的資料卷,將該雲端硬碟掛載到容器中 /tmp 路徑下,在該路徑下產生的容器資料會儲存到雲端硬碟中。


    3. 可选: 配置Log Service,您可進行採集配置和自訂Tag設定。
      说明 請確保已部署Kubernetes叢集,並且在此叢集上已安裝日誌外掛程式。

      您可對日誌進行採集配置:

      • 日誌庫:即在Log Service中產生一個對應的logstore,用於儲存採集到的日誌。
      • 容器內日誌路徑:支援stdout和文本日誌。
        • stdout: stdout 表示採集容器的標準輸出日誌。
        • 文本日誌:表示收集容器內指定路徑的日誌,本例中表示收集/var/log/nginx下所有的文本日誌,也支援萬用字元的方式。

      您還可設定自訂 tag,設定tag後,會將該tag一起採集到容器的日誌輸出中。自訂 tag 可協助您給容器日誌打上tag,方便進行日誌統計和過濾等分析操作。



    4. 可选: 配置環境變數。

      支援通過索引值對的形式為 Pod 配置環境變數。用於給 Pod 添加環境標誌或傳遞配置等,具體請參見 Pod variable

    5. 配置生命週期。

      您可以為容器的生命週期配置容器啟動項、啟動執行、啟動後處理和停止前處理。具體參見https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/

      • 容器啟動項:勾選 stdin 表示為該容器開啟標準輸入;勾選 tty 表示為該容器分配一個虛擬終端,以便於向容器發送訊號。通常這兩個選項是一起使用的,表示將終端 (tty) 綁定到容器的標準輸入(stdin)上,比如一個互動程式從使用者擷取標準輸入,並顯示到終端中。
      • 啟動執行:為容器設定啟動前置命令和參數。
      • 啟動後處理:為容器設定啟動後的命令。
      • 停止前處理:為容器設定預結束命令。


    6. 可选: 設定健全狀態檢查

      支援存活檢查(liveness)和就緒檢查(Readiness)。存活檢查用於檢測何時重啟容器;就緒檢查確定容器是否已經就緒,且可以接受流量。關於健全狀態檢查的更多資訊,請參見https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes



      請求類型 配置說明
      HTTP請求 即向容器發送一個HTTPget 請求,支援的參數包括:
      • 協議:HTTP/HTTPS
      • 路徑:訪問HTTP server 的路徑
      • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。
      • HTTP頭:即HTTPHeaders,HTTP請求中自訂的要求標頭,HTTP允許重複的header。支援索引值對的配置方式。
      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為3秒。
      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10s,最低為1s。
      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。
      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。
      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3。最小值是1。
      TCP串連 即向容器發送一個TCP Socket,kubelet將嘗試在指定連接埠上開啟容器的通訊端。 如果可以建立串連,容器被認為是健康的,如果不能就認為是失敗的。支援的參數包括:
      • 連接埠:容器暴露的訪問連接埠或連接埠名,連接埠號碼必須介於1~65535。
      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為15秒。
      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10s,最低為1s。
      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。
      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。
      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3。最小值是1。
      命令列 通過在容器中執行探針檢測命令,來檢測容器的健康情況。支援的參數包括:
      • 命令列:用於檢測容器健康情況的探測命令。
      • 延遲探測時間(秒):即initialDelaySeconds,容器啟動後第一次執行探測時需要等待多少秒,預設為5秒。
      • 執行探測頻率(秒):即periodSeconds,指執行探測的時間間隔,預設為10s,最低為1s。
      • 逾時時間(秒):即timeoutSeconds,探測逾時時間。預設1秒,最小1秒。
      • 健康閾值:探測失敗後,最少連續探測成功多少次才被認定為成功。預設是1,最小值是1。對於存活檢查(liveness)必須是1。
      • 不健康閾值:探測成功後,最少連續探測失敗多少次才被認定為失敗。預設是3。最小值是1。
  5. 完成容器配置後,單擊 下一步
  6. 進行進階設定。
    1. 設定訪問設定
      您可以設定暴露後端Pod的方式,最後單擊 建立。本例中選擇ClusterIP服務和路由(Ingress),構建一個可公網訪問的nginx應用。
      说明

      針對應用的通訊需求,您可靈活進行訪問設定:

      • 內部應用:對於只在叢集內部工作的應用,您可根據需要建立ClusterIP或NodePort類型的服務,來進行內部通訊。
      • 外部應用:對於需要暴露到公網的應用,您可以採用兩種方式進行訪問設定:
        • 建立LoadBalancer類型的服務:使用阿里雲提供的負載平衡服務(Server Load Balancer,SLB),該服務提供公網訪問能力。
        • 建立ClusterIP、NodePort類型的服務,以及路由(Ingress):通過路由提供公網訪問能力,詳情參見https://kubernetes.io/docs/concepts/services-networking/ingress/


      1. 在服務欄單擊建立,在彈出的對話方塊中進行配置,最後單擊建立


        • 名稱:您可自主設定,預設為applicationname-svc
        • 類型:您可以從下面 3 種服務類型中進行選擇。
          • 虛擬叢集 IP:即 ClusterIP,指通過叢集的內部 IP 暴露服務,選擇該項,服務只能夠在叢集內部可以訪問。
          • 節點連接埠:即 NodePort,通過每個 Node 上的 IP 和靜態連接埠(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動建立。通過請求 <NodeIP>:<NodePort>,可以從叢集的外部存取一個 NodePort 服務。
          • 負載平衡:即 LoadBalancer,是阿里雲提供的負載平衡服務,可選擇公網訪問或內網訪問。負載平衡可以路由到 NodePort 服務和 ClusterIP 服務。
        • 連接埠映射:您需要添加服務連接埠和容器連接埠,若類型選擇為節點連接埠,還需要自己設定節點連接埠,防止連接埠出現衝突。支援 TCP/UDP 協議。
        • 註解:為該服務添加一個註解(annotation),支援負載平衡配置參數,參見通過負載平衡(Server Load Balancer)訪問服務
        • 標籤:您可為該服務添加一個標籤,標識該服務。
      2. 在路由欄單擊建立,在彈出的對話方塊中,為後端Pod配置路由規則,最後單擊建立。更多詳細的路由配置資訊,請參見路由配置說明
        说明 通過鏡像建立應用時,您僅能為一個服務建立路由(Ingress)。本例中使用一個虛擬機器主機名稱作為測試網域名稱,您需要在hosts中添加一條記錄。在實際工作情境中,請使用備案網域名稱。
        101.37.224.146   foo.bar.com    #即ingress的IP


      3. 在訪問設定欄中,您可看到建立完畢的服務和路由,您可單擊變更刪除進行二次配置。


    2. 可选: 容器組水平伸縮
      您可勾選是否開啟 容器組水平伸縮,為了滿足應用在不同負載下的需求,Container Service支援服容器組(Pod)的Auto Scaling,即根據容器 CPU 和記憶體資源佔用情況自動調整容器組數量。


      说明 若要啟用自動調整,您必須為容器設定所需資源,否則容器自動調整無法生效。參見容器基本配置環節。
      • 指標:支援CPU和記憶體,需要和設定的所需資源類型相同。
      • 觸發條件:資源使用率的百分比,超過該使用量,容器開始擴容。
      • 最大容器數量:該Deployment可擴容的容器數量上限。
      • 最小容器數量:該Deployment可縮容的容器數量下限。
    3. 可选: 設定調度親和性

      您可設定節點親和性、應用親和性和應用非親和性,詳情參見https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity

      说明 親和性調度依賴節點標籤和Pod標籤,您可使用內建的標籤進行調度;也可預先為節點、Pod配置相關的標籤。
      1. 設定節點親和性,通過Node節點的Label標籤進行設定。


        節點調度支援硬約束和軟約束(Required/Preferred),以及豐富的匹配運算式(In, NotIn, Exists, DoesNotExist. Gt, and Lt):
        • 必須滿足,即硬約束,一定要滿足,對應requiredDuringSchedulingIgnoredDuringExecution,效果與NodeSelector相同。本例中Pod只能調度到具有對應標籤的Node節點。您可以定義多條硬約束規則,但只需滿足其中一條。
        • 盡量滿足,即軟約束,不一定滿足,對應preferredDuringSchedulingIgnoredDuringExecution。本例中,調度會盡量不調度Pod到具有對應標籤的Node節點。您還可為軟約束規則設定權重,具體調度時,若存在多個合格節點,權重最高的節點會被優先調度。您可定義多條軟約束規則,但必須滿足全部約束,才會進行調度。
      2. 設定應用親和性調度。決定應用的Pod可以和哪些Pod部署在同一拓撲域。例如,對於相互連信的服務,可通過應用親和性調度,將其部署到同一拓撲域(如同一個主機)中,減少它們之間的網路延遲。


        根據節點上啟動並執行Pod的標籤(Label)來進行調度,支援硬約束和軟約束,匹配的運算式有:In, NotIn, Exists, DoesNotExist

        • 必須滿足,即硬約束,一定要滿足,對應requiredDuringSchedulingIgnoredDuringExecution,Pod的親和性調度必須要滿足後續定義的約束條件。
          • 命名空間:該策略是依據Pod的Label進行調度,所以會受到命名空間的約束。
          • 拓撲域:即topologyKey,指定調度時範圍,這是通過Node節點的標籤來實現的,例如指定為kubernetes.io/hostname,那就是以Node節點為區分範圍;如果指定為beta.kubernetes.io/os,則以Node節點的作業系統類型來區分。
          • 選取器:單擊選取器右側的加號按鈕,您可添加多條硬約束規則。
          • 查看應用列表:單擊應用列表,彈出對話方塊,您可在此查看各命名空間下的應用,並可將應用的標籤匯入到親和性配置頁面。
          • 硬約束條件:設定已有應用的標籤、操作符和標籤值。本例中,表示將待建立的應用調度到該主機上,該主機啟動並執行已有應用具有app:nginx標籤。
        • 盡量滿足,即軟約束,不一定滿足,對應preferredDuringSchedulingIgnoredDuringExecution。Pod的親和性調度會盡量滿足後續定義的約束條件。對於軟約束規則,您可配置每條規則的權重,其他配置規則與硬約束規則相同。
          说明 權重:設定一條軟約束規則的權重,介於1-100,通過演算法計算滿足軟約束規則的節點的權重,將Pod調度到權重最高的節點上。
      3. 設定應用非親和性調度,決定應用的Pod不與哪些Pod部署在同一拓撲域。應用非親和性調度的情境包括:
        • 將一個服務的Pod分散部署到不同的拓撲域(如不同主機)中,提高服務本身的穩定性。
        • 給予Pod一個節點的獨佔存取權限來保證資源隔離,保證不會有其它Pod來分享節點資源。
        • 把可能會相互影響的服務的Pod分散在不同的主機上。
        说明 應用非親和性調度的設定方式與親和性調度相同,但是相同的調度規則代表的意思不同,請根據使用情境進行選擇。
  7. 最後單擊建立
  8. 建立成功後,預設進入建立完成頁面,會列出應用程式套件含的對象,您可以單擊查看應用詳情進行查看。


    預設進入建立的nginx-deployment的詳情頁面。



  9. 單擊左側導覽列的應用 > 路由,可以看到路由列表下出現一條規則。


  10. 在瀏覽器中訪問路由測試網域名稱,您可訪問 nginx 歡迎頁面。