整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          日志服務器哪個好用 https://blog.csdn.net/pengkey123/article/details/139898863

          1 Pods介紹

          概念:Pod是中的最小調度單元,k8s是通過定義一個Pod的資源,然后在Pod里面運行容器,容器需要指定一個鏡像,這樣就可以用來運行具體的服務。一個Pod封裝一個容器(也可以封裝多個容器),Pod里的容器共享存儲、網絡等。也就是說,應該把整個pod看作虛擬機,然后每個容器相當于運行在虛擬機的進程。

          Pod是需要調度到k8s集群的工作節點來運行的,具體調度到哪個節點,是根據調度器實現的。

          在這里插入圖片描述

          2 Pod 管理多個容器

          集群中的 Pod 主要有兩種用法:

          在這里插入圖片描述

          Pod中可以同時運行多個容器。同一個Pod中的容器會自動的分配到同一個 node 上。同一個Pod中的容器共享資源、網絡環境,它們總是被同時調度,在一個Pod中同時運行多個容器是一種比較高級的用法,只有當你的容器需要緊密配合協作的時候才考慮用這種模式。例如,你有一個容器作為web服務器運行,需要用到共享的volume,有另一個“sidecar”容器來從遠端獲取資源更新這些文件。

          2.1 init容器與邊車容器(sidecar)

          在 中,邊車容器 是在主應用容器之前啟動并持續運行的容器。 Init 容器:在 Pod 初始化期間完成運行的容器。

          Init 容器與普通的容器非常像,除了如下兩點:

          如果 Pod 的 Init 容器失敗,kubelet 會不斷地重啟該 Init 容器直到該容器成功為止。 然而,如果 Pod 對應的 值為 “Never”,并且 Pod 的 Init 容器失敗, 則 會將整個 Pod 狀態設置為失敗。

          邊車容器是與主應用容器在同一個 Pod 中運行的輔助容器。 這些容器通過提供額外的服務或功能(如日志記錄、監控、安全性或數據同步)來增強或擴展主應用容器的功能, 而無需直接修改主應用代碼。

          4 學習Pod的作用

          1.Pod是由一組緊耦合的容器組成的容器組,當然目前最流行的就是Docker、、podman容器,Pod就可以作為1或者多個容器的載體。

          2、Pod中的所用容器會被一致調度、同節點部署,并且在一個“共享環境”中運行。Pod想成一個車:車里面好多座位,每個座位都坐不同的人,每個座位想成是一個容器,這里的“共享環境”包括以下幾點:

          1)所有容器共享一個IP地址和端口空間,意味著容器之間可以通過高效訪問,不能有端口沖突

          2)允許容器之間共享存儲卷,通過文件系統交互信息

          3)有些容器需要緊密聯系,需要一起工作。Pod提供了比容器更高層次的抽象, Pod中的所有容器使用同一個網絡的,即相同的IP地址和Port空間。它們可以直接用通信。同樣的,這些容器可以共享存儲,當K8s掛載Volume到Pod上,本質上是將volume掛載到Pod中的每一個容器里。

          4.1 使用pod的好處 4.1.1 代碼自動發版更新

          在這里插入圖片描述

          假如生產環境部署了一個go的應用,而且部署了幾百個節點,希望這個應用可以定時的同步最新的代碼,以便自動升級線上環境。這時,我們不希望改動原來的go應用,可以開發一個Git代碼倉庫的自動同步服務,然后通過Pod的方式進行編排,并共享代碼目錄,就可以達到更新java應用代碼的效果。

          4.1.2 收集業務日志

          在這里插入圖片描述

          某服務模塊已經實現了一些核心的業務邏輯,并且穩定運行了一段時間,日志記錄在了某個目錄下,按照不同級別分別為 error.log、access.log、warning.log、info.log,現在希望收集這些日志并發送到統一的日志處理服務器上。

          這時我們可以修改原來的服務模塊,在其中添加日志收集、發送的服務,但這樣可能會影響原來服務的配置、部署方式,從而帶來不必要的問題和成本,也會增加業務邏輯和基礎服務的藕合度。

          如果使用Pod的方式,通過簡單的編排,既可以保持原有服務邏輯、部署方式不變,又可以增加新的日志收集服務。

          而且如果我們對所有服務的日志生成有一個統一的標準,或者僅對日志收集服務稍加修改,就可以將日志收集服務和其他服務進行Pod編排,提供統一、標準的日志收集方式。

          這里的“核心業務服務”、“日志收集服務”分別是一個鏡像,運行在隔離的容器環境中。

          5 Pod的工作方式

          在K8s中,所有的資源都可以使用一個yaml文件來創建,創建Pod也可以使用yaml配置文件?;蛘呤褂胟ubectl run在命令行創建Pod(不常用)。

          5.1 自主式Pod

          所謂的自主式Pod,就是直接定義一個Pod資源,如下:

          導入鏡像

          [root@master1 ~]# ctr -n=k8s.io images import xianchao-tomcat.tar.gz  
          unpacking docker.io/xianchao/tomcat-8.5-jre8:v1 (sha256:14dae4798a335e2925e4ee07b3ccd519a67faab2a9155adeb76a4556478dd8d7)...done
          [root@node1 ~]# ctr -n=k8s.io images import xianchao-tomcat.tar.gz 
          unpacking docker.io/xianchao/tomcat-8.5-jre8:v1 (sha256:14dae4798a335e2925e4ee07b3ccd519a67faab2a9155adeb76a4556478dd8d7)...done
          

          定義一個pod資源

          [root@master1 ~]# vim pod-tomcat.yaml
          [root@master1 ~]# cat pod-tomcat.yaml 
          apiVersion: v1
          kind: Pod
          metadata:
            name: tomcat-test
            namespace: default
            labels:
              app:  tomcat
          spec:
            containers:
            - name: tomcat-java
              ports:
              - containerPort: 8080
              image: xianchao/tomcat-8.5-jre8:v1
              imagePullPolicy: IfNotPresent
          

          申請資源文件并查看pod是否創建成功

          [root@master1 ~]# kubectl apply -f pod-tomcat.yaml 
          pod/tomcat-test created
          [root@master1 ~]# kubectl get pods
          NAME          READY   STATUS    RESTARTS   AGE
          tomcat-test   1/1     Running   0          39s
          [root@master1 ~]# kubectl get pods -o wide
          NAME          READY   STATUS    RESTARTS   AGE     IP               NODE    NOMINATED NODE   READINESS GATES
          tomcat-test   1/1     Running   0          4m34s   10.244.166.142   node1              
          

          但是自主式Pod是存在一個問題的,假如我們不小心刪除了pod:

          [root@master1 ~]# kubectl delete pods tomcat-test
          pod "tomcat-test" deleted
          [root@master1 ~]# kubectl get pods
          No resources found in default namespace.
          

          結果是空,說明pod已經被刪除了

          如果直接定義一個Pod資源,那Pod被刪除,就徹底被刪除了,不會再創建一個新的Pod,這在生產環境還是具有非常大風險的,所以今后我們接觸的Pod,都是控制器管理的。

          5.2 控制器管理的Pod

          常見的管理Pod的控制器:、、Job、CronJob、、。

          控制器管理的Pod可以確保Pod始終維持在指定的副本數運行。

          下面使用創建pod:

          解壓鏡像

          [root@master1 ~]# ctr -n=k8s.io images import xianchao-nginx.tar.gz 
          unpacking docker.io/xianchao/nginx:v1 (sha256:47f9a127fcda0c39a444b9ae608055abcf71f02351665aa2c450b7bdb7434aca)...done
          [root@node1 ~]# ctr -n=k8s.io images import xianchao-nginx.tar.gz 
          unpacking docker.io/xianchao/nginx:v1 (sha256:47f9a127fcda0c39a444b9ae608055abcf71f02351665aa2c450b7bdb7434aca)...done
          

          定義資源清單

          [root@master1 ~]# vim nginx-deploy.yaml
          [root@master1 ~]# cat nginx-deploy.yaml 
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: nginx-test
            labels:
              app: nginx-deploy
          spec:
            selector:
              matchLabels:
                app: nginx
            replicas: 2
            template:
              metadata:
                labels:
                  app: nginx
              spec:
                containers:
                - name: my-nginx
                  image: xianchao/nginx:v1
                  imagePullPolicy: IfNotPresent
                  ports:
                  - containerPort: 80
          

          申請創建資源清單文件并查看pod

          [root@master1 ~]# kubectl apply -f nginx-deploy.yaml 
          deployment.apps/nginx-test created
          [root@master1 ~]# kubectl get deploy
          NAME         READY   UP-TO-DATE   AVAILABLE   AGE
          nginx-test   2/2     2            2           10s
          [root@master1 ~]# kubectl get replicaset
          NAME                    DESIRED   CURRENT   READY   AGE
          nginx-test-5b76549fbd   2         2         2       47s
          [root@master1 ~]# kubectl get pods -o wide
          NAME                          READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
          nginx-test-5b76549fbd-ggkmh   1/1     Running   0          67s   10.244.166.143   node1              
          nginx-test-5b76549fbd-q5z7x   1/1     Running   0          67s   10.244.166.144   node1              
          

          刪除其中一個pod

          [root@master1 ~]# kubectl delete pod nginx-test-5b76549fbd-ggkmh
          pod "nginx-test-5b76549fbd-ggkmh" deleted
          [root@master1 ~]# kubectl get pods
          NAME                          READY   STATUS    RESTARTS   AGE
          nginx-test-5b76549fbd-g9462   1/1     Running   0          9s
          nginx-test-5b76549fbd-q5z7x   1/1     Running   0          3m44s
          

          發現重新創建一個新的pod

          通過上面可以發現通過管理的pod,可以確保pod始終維持在指定副本數量

          6 Pod如何運行應用/工作流程

          創建Pod流程:

          在這里插入圖片描述

          kubectl apply -f nginx-deploy.yaml->找到config文件,基于config文件指定的用戶訪問指定的集群,這樣就找到了。

          通過kubectl命令向API Server提交創建pod的請求,API Server接收到請求后,會把pod的屬性信息()寫進etcd;API Server觸發watch機制準備創建pod, 信息發給調度器,調度器使用調度算法選擇node,調度器把node信息發給API Server,API Server把綁定node的信息寫進etcd;API Server又通過watch機制調用kubelet,指定pod信息,調用容器運行時創建并啟動pod內的容器;創建完成之后反饋給kubelet, kubelet又將pod的狀態信息給API Server,API Server又將pod的狀態信息寫入etcd。


          主站蜘蛛池模板: 无码精品国产一区二区三区免费| 中文字幕AV一区二区三区| 久草新视频一区二区三区| 亚洲国产精品一区二区第一页免 | 国产综合一区二区在线观看| 久久亚洲综合色一区二区三区| 亚洲午夜在线一区| 偷拍精品视频一区二区三区| 国产精品区AV一区二区| 久久久精品人妻一区二区三区蜜桃| 一本大道东京热无码一区| 怡红院美国分院一区二区 | 亚洲变态另类一区二区三区 | 久久国产高清一区二区三区| 日本一区二区在线| 日本美女一区二区三区| 亚洲乱码av中文一区二区| 亚洲AⅤ视频一区二区三区| 亚洲综合在线一区二区三区| 亚洲午夜日韩高清一区| 国产免费私拍一区二区三区| 亚洲一区二区三区四区视频 | 亚洲综合一区二区| 精品伦精品一区二区三区视频| 亚洲一区二区三区丝袜| 精品无码人妻一区二区三区18| www亚洲精品少妇裸乳一区二区 | 午夜性色一区二区三区免费不卡视频| 日本丰满少妇一区二区三区| 精品欧美一区二区在线观看| 无码人妻精品一区二区蜜桃网站| 台湾无码AV一区二区三区| 久久精品国产一区| 国产精品美女一区二区视频| 无码人妻久久一区二区三区 | 日韩人妻精品一区二区三区视频| 一区二区三区免费高清视频| 一区二区三区免费电影| 亚洲av无码天堂一区二区三区 | 一区二区三区日本视频| 波多野结衣一区二区三区aV高清|