<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • k8s指令部署各個常用功能

    k8s之所以這么火,主要是提供了許多功能,比如服務的快速部署、服務的滾動升級、自動擴縮容、service下的服務負載均衡等功能。下面來動手實操下幾個主要的功能。

    2.1、K8s基本指令介紹

    1、查詢pod服務信息: kubectl get pod
    2、查詢pod服務詳細信息: kubectl get pod -o wide
    3、查詢deployment服務部署對象信息: kubectl get deployment
    4、查詢rs副本控制器對象信息: kubectl get rs
    5、查詢pod描述信息: kubectl describe pod podName
    6、查詢pod服務日志: kubectl logs podName (pod內部只有一個容器) kubectl logs podName -c cname
    7、登錄pod服務內容容器: kubectl exec -it podName – sh (pod內部只有一個容器) kubectl exec -it podName -c cname – sh
    8、刪除服務: kubectl delete xxName

    查詢幫助文檔:
    1、kubectl –help # 查詢k8s所有的指令

    2.2、查看k8s本地集群及harbor倉庫

    kubectl get node
    image.png
    harbor倉庫
    image.png

    2.3、服務部署

    需求: 部署一個my-app服務(內部是nginx服務程序,nginx放入一個靜態資源頁面)
    部署指令:kubectl run my-app --image=harbor.hyz.com/library/mynginx:v1 --port=80
    說明:通過指令部署服務,默認是部署一個Deployment,Deployment下有一個ReplicaSet,ReplicaSet控制了需要部署多少個Pod服務。
    如下圖所示:
    image.png
    執行后告訴我們這種方式將會被后面的2種方式替換掉,通過kubectl get pod -o wide查看到該服務已經啟動成功。
    訪問方式:curl PODIP:PORT
    image.png

    2.4、服務擴縮容

    這里的擴容指的是服務實例個數的擴縮容,而不是內存!
    服務擴縮容指令:kubectl scale deployment my-app --replicas=2
    image.png
    對擴容后的服務進行訪問測試:
    image.png
    服務調度問題:擴容后,pod被調度到哪些節點進行部署呢?會是在同一個節點上嗎?
    image.png
    可以發現pod服務會被調度到不同的節點繼續部署,這個調度工作是由scheduler來實現的,Kubectl實現最終部署。

    2.5、服務自愈功能

    Pod宕機了,副本控制器就會立馬對Pod服務進行重建,保證Pod服務副本數量永遠等于預期所設定的數量,從而保證了服務的高可用性。所以有了k8s這個特性,服務就能一直處于高可用狀態。
    試驗1:刪除pod,查詢pod數量與預期設定的數量是否一致?(replicas=3)
    image.png
    試驗2:刪除所有的pod,查詢pod副本數量是否與預期設定的數量一致?
    答案:刪除所有的pod副本之后,依舊會創建符合副本數量的Pod.
    image.png
    問題:如果確實想要刪除pod,如何實現呢?
    答案:1、通過kubectl scale deployment my-app --replicas=2 修改副本的數量
    ** 2、刪除deployment或者replicaset對象**

    2.6、服務更新/升級

    產品發布了新的版本:v1->v2版本,服務部署就需要進行更新。
    服務更新/升級指令:kubectl set image deployment my-app=harbor.hyz.com/library/mynginx:v2
    image.png
    可以看出,當服務更新后,該服務對應的所有pod副本都會進行更新,每個pod的IP都進行了重新分配。

    2.7、服務回滾

    回滾指令:kubectl rollout undo deployment my-app
    image.png
    查看歷史版本:kubectl rollout hisotry deployment my-app
    指定特定歷史版本進行回滾:kubectl rollout history deployment my-app --to-revision=3

    2.8、自動擴縮容

    如果集群支持HPA,就可以為deployment/stateful資源對象設置自動擴縮容的操作。
    指令:kubectl autoscale deployment my-app --min=5 --max=8 --cpu-percent=50 #監控pod服務cpu資源率超過50%,進行擴容
    image.png
    image.png
    對HPA資源對象不了解的童鞋可以參考:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/

    2.9、負載均衡

    在k8s服務部署中,一個服務會部署多個Pod副本(服務實例集群),在訪問pod服務的時候如何實現負載均衡呢?
    image.png
    以上4個服務組合的集群,當用戶訪問的時候,我們的服務內部到底會訪問哪個pod服務呢?這里就涉及到一個負載均衡的訪問方式,好比微服務中的ribbon組件中就可以設置負載均衡方式。
    問題:如何實現負載均衡?
    答案:kuberneteds引入了一個新的對象,虛擬Service VIP服務,k8s利用service服務來實現pod訪問的負載均衡。
    image.png
    建立Service資源對象,統一對用戶提供服務(Service其實這幾個pod服務統一入口)
    創建Service對象指令: kubectl expose deployment my-app –target-port=80 –port=80
    查看service將會負載哪些endpoint: kubectl describe service my-app
    image.png

    2.10、DNS服務發現

    kubernetes在服務部署過程中,通過域名解析出服務的service IP地址,再通過SERVICE的負載均衡到具體的Pod服務(微服務架構服務發現:通過nacos注冊中心發現服務的ip地址)。
    image.png
    驗證: 驗證DNS域名解析服務器是否能解析出 service IP地址?
    查看DNF服務:kubectl get pod -n kube-system
    image.png
    解析方案: 登錄一個pod內部容器中,通過service 名稱解析出ip地址,查詢是否能夠解析?
    image.png
    這里可能會出現ping不同的情況,有這個情況的童鞋可以參考這篇文章:
    https://blog.csdn.net/xjjj064/article/details/123526381

    2.11、外網訪問

    根據service統一入口訪問pod服務的情況,service服務是否可以在外網直接訪問呢?
    image.png
    直接通過Service VIP 無法對外提供服務。因為Service資源對象僅僅是一個虛擬的服務,有自己的IP地址,有自己端口,但是他僅僅是操作系統內部一個虛擬的服務。沒有與之對應的物理實體。
    image.png
    計算機之間的通信,是需要建立在網卡基礎上的,所有的信息都通過網卡傳播出去。那對于kubernetes的服務來說,如何實現對外網的通信呢?
    image.png
    因此如果需要實現外網訪問,必須打通內外的端口映射關系(Service端口和物理機端口),此時外網訪問物理機端口,然后把數據通過端口映射轉發給內部service,從而實現外部通信。
    需要開通端口映射,本身kubernetes提供幾種ip的類型,其中nodeport類型自動開辟映射關系。
    Serviceip類型:
    1、cluseterIp : 局域網ip類型,只能在局域網進行訪問,無法對外提供服務。這是默認ip類型
    2、NodePort : 會在每一個節點上開辟一個端口,且這些端口大小都相同。
    3、Loadbanlancer : 第三方服務商提供對外訪問入口,收費。
    修改Service配置文件,修改IP類型:(創建服務對象,實際上在內部生成配置文件)
    或者在創建service的時候就指定IP類型:
    kubectl expose deployment my-app --target-port=80 --port=80 --type=NodePort
    image.png
    外網訪問: http://物理機IP:31846
    image.png
    到這里kubernetes的主要常用功能demo就都演示差不多了。

    posted @ 2022-06-26 14:11  尋找的路上  閱讀(130)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看