【智簡聯接,萬物互聯】華為云·云享專家董昕:Serverless和微服務下, IoT的變革蓄勢待發
938
2025-03-31
一、云計算–獨立宇宙
1.云是由很多小水滴組成的,把每一個計算機想象成小水滴,聯合起來就形成了云;傳統的水滴就是VM;Docker的出現,改變了小水滴的粒度
2.水滴獨立可運行,內部完整 (如 VM,Docker容器)
3.一般水滴先出現,然后出現管理水滴的平臺(如OpenStack,Kubernetes)
二、Kubernetes簡介
1.Kubernetes是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制
2.Kubernetes一個核心的特點就是能夠自主的管理容器來保證云平臺中的容器按照用戶的期望狀態運行著(比如用戶想讓dlcatalog一直運行,用戶不需要關心怎么去做,Kubernetes會自動去監控,然后去重啟,新建,總之,讓dlcatalog一直提供服務)
3.在Kubenetes中,所有的容器均在Pod中運行,一個Pod可以承載一個或者多個相關的容器
三、Kubernetes典型名詞
1.Pod
在Kubernetes中,最小的管理元素不是一個個獨立的容器,而是Pod;一個Pod是一個容器環境下的“邏輯主機”,一個Pod是由多個相關的并且共享磁盤的容器組成;在同一個Pod里,容器之間的端口不能重復,否則Pod會起不來,或者起來后無限重啟
2. Node
Node是Pod真正運行的主機,可以是物理機,也可以是虛擬機;為了管理Pod,每個Node節點上至少要運行container runtime(比如Docker)、kubelet和kube-proxy服務;Node本質上不是Kubernetes來創建的,Kubernetes只是管理Node上的資源;雖然可以通過manifest創建一個Node對象(如下json所示),但Kubernetes也只是去檢查是否真的是有這么一個Node,如果檢查失敗,也不會往上調度Pod
{ "kind":?"Node", "apiVersion":?"v1", "metadata":?{ ????????????"name":?"10.63.90.18", ????????????"labels":?{ ????????????????????????"name":?"my-first-k8s-node" ???????????????????????} ?????????????} }
3. Service
Service是一個抽象的概念,是K8s里面的精華;每個K8s上的App,都可以申請集群內部的“名號”,用來代表自己;K8s就會給你的App分配一個Service許可證,許可證上面帶著“假IP”,任何集群內部只要訪問這個IP,就等于訪問你的App
假設我們擁有一些Pod,每個Pod都開放了9083端口,并且都帶有一個標簽app=MyApp;如下這段json代碼會創建一個新的Service對象,名稱為my-dlcatalog-metastore-service,并且會連接目標端口9083;并且帶有標簽app=MyApp的Pod會被分配一個ip地址,這個ip是給kube-proxy使用的,集群內部只要訪問這個ip,就等于訪問你的App;需要注意的是,K8s里面的Pod實際ip一般沒什么用
kind:?Service, apiVersion:?v1, metadata: ????name:?my-dlcatalog-metastore-service spec: ????selector: ????app:?MyApp ports: -?protocol:?TCP, ??port:?20403, ??targetPort:?9083
4. ConfigMap
ConfigMap用于保存配置數據的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件;ConfigMap跟secret很類似,但它可以更方便地處理不包含敏感信息的字符串;
使用volume將ConfigMap作為文件或目錄直接掛載
如下表示將創建的ConfigMap直接掛載至Pod的/etc/config目錄下
apiVersion:?v1 kind:?Pod metadata: ????name:?vol-test-pod spec: ????containers: ????????-?name:?test-container ??????????image:?10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530 ??????????command:?[?"/bin/sh",?"bin/start_server.sh"?] ??????????volumeMounts: ??????????-?name:?config-volume ????????????mountPath:?/etc/config ????volumes: ????????-?name:?config-volume ??????????configMap: ????????????name:?special-config ????restartPolicy:?Never
四、Kubernetes資源花式調度
1.?????? 指定Node節點調度
有三種方式指定 Pod 只運行在指定的 Node 節點上
方式一:
nodeSelector:只調度到匹配指定label的Node上
方式二:
nodeAffinity:功能更豐富的 Node 選擇器,比如支持集合操作
nodeAffinity 目前支持兩種:requiredDuringSchedulingIgnoredDuringExecution與preferredDuringSchedulingIgnoredDuringExecution,分別代表必須滿足條件和優選條件
比如下面的例子代表調度到包含標簽 kubernetes.io/e2e-az-name 并且值為 e2e-az1 或 e2e-az2 的 Node 上,并且優選還帶有標簽 another-node-label-key=another-node-label-value 的 Node
apiVersion:?v1 kind:?Pod metadata: ????name:?with-node-affinity spec: ????affinity: ????????nodeAffinity: ????????????????requiredDuringSchedulingIgnoredDuringExecution: ????????????????????nodeSelectorTerms: ????????????????????-?matchExpressions: ????????????????????????-?key:?kubernetes.io/e2e-az-name ??????????????????????????operator:?In ??????????????????????????values: ??????????????????????????-?e2e-az1 ??????????????????????????-?e2e-az2 ????????????????preferredDuringSchedulingIgnoredDuringExecution: ????????????????-?weight:?1 ??????????????????preference: ????????????????????matchExpressions: ????????????????????-?key:?another-node-label-key ??????????????????????operator:?In ??????????????????????values: ??????????????????????-?another-node-label-value ????containers: ????-?name:?with-node-affinity ??????image:?10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530
方式三:
podAffinity:調度到滿足條件的 Pod 所在的 Node 上
podAffinity 基于 Pod 的標簽來選擇 Node,僅調度到滿足條件 Pod 所在的 Node 上,支持 podAffinity 和 podAntiAffinity
這個功能比較繞,以下面的兩個例子作為講解:
第一個例子表示:
如果一個 “Node 所在 Zone 中包含至少一個帶有 security=S1 標簽且運行中的 Pod”,那么可以調度到該 Node;不調度到 “包含至少一個帶有 security=S2 標簽且運行中 Pod” 的 Node 上
apiVersion:?v1 kind:?Pod metadata: ????name:?with-pod-affinity spec: ????affinity: ????????podAffinity: ????????????requiredDuringSchedulingIgnoredDuringExecution: ????????????-?labelSelector: ????????????????matchExpressions: ????????????????-?key:?security ??????????????????operator:?In ??????????????????values: ??????????????????-?S1 ??????????????topologyKey:?failure-domain.beta.kubernetes.io/zone ????????podAntiAffinity: ????????????preferredDuringSchedulingIgnoredDuringExecution: ????????????-?weight:?100 ????????????????podAffinityTerm: ????????????????????labelSelector: ????????????????????????matchExpressions: ????????????????????????-?key:?security ??????????????????????????operator:?In ??????????????????????????values: ??????????????????????????-?S2 ????????????????????topologyKey:?kubernetes.io/hostname ????????containers: ????????-?name:?with-node-affinity ??????????image:?10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530
第二個例子表示:
如果一個 “Node 所在 Zone 中包含至少一個帶有 appVersion= jwsdlcatalog-x86_64-1.0.1.20200918144530標簽且運行中的 Pod”,那么推薦不調度到該 Node;不調度到 “包含至少一個帶有app= jwsdlcatalog-x86_64標簽且運行中 Pod” 的 Node 上
spec: ??restartPolicy:?Always?????????#pod重啟策略 ??securityContext: ????runAsUser:?2000 ????fsGroup:?2000 ??affinity: ????podAntiAffinity: ??????preferredDuringSchedulingIgnoredDuringExecution: ????????-?podAffinityTerm: ????????????labelSelector: ??????????????matchExpressions: ????????????????-?key:?appVersion ??????????????????operator:?In ??????????????????values: ????????????????????-?concat: ????????????????????????-?get_input:?IMAGE_NAME ????????????????????????-?'-' ????????????????????????-?get_input:?IMAGE_VERSION ????????????#numOfMatchingPods:?"2"???#一定不要加此字段,此字段是華為自己的實現,社區沒有接納 ????????????topologyKey:?"failure-domain.beta.kubernetes.io/zone" ??????????weight:?100 ??????requiredDuringSchedulingIgnoredDuringExecution: ????????-?labelSelector: ????????????matchExpressions: ??????????????-?key:?app ????????????????operator:?In ????????????????values: ??????????????????-?get_input:?IMAGE_NAME ??????????numOfMatchingPods:?"1" ??????????topologyKey:?"kubernetes.io/hostname" ??containers: ????-?image: ????????concat: ??????????-?get_input:?IMAGE_ADDR???????????#拼接鏡像的地址(#用拼接函數解決數字型參數問題) ??????????-?"/" ??????????-?get_input:?IMAGE_NAME???????????#拼接鏡像的地址(#用拼接函數解決數字型參數問題) ??????????-?":" ??????????-?get_input:?IMAGE_VERSION????????#拼接鏡像的地址(#用拼接函數解決數字型參數問題) ??????name:?jwsdlcatalog
注:本文純屬個人觀點,部分圖片如有雷同,純屬意外
EI企業智能 智能數據 數據湖治理中心 DGC
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。