主頁 >  其他 > K8S | 容器和Pod組件

K8S | 容器和Pod組件

2023-07-04 08:22:56 其他

對比軟體安裝和運行;

一、場景

作為研發人員,通常自己電腦的系統環境都是非常復雜,在個人的習慣上,是按照下圖的模塊管理電腦的系統環境;

對于「基礎設施」、「主機作業系統」、「系統軟體」來說,通常只做配置修改;

對于自行安裝的軟體環境來說,個人通常這樣分類:「應用軟體」、「研發軟體」、「持續集成」、「虛擬機環境」;

  • 應用軟體:主要指常用的辦公軟體,比如檔案撰寫,畫圖設計,通信產品等;
  • 研發軟體:比如基礎開發環境,各種中間件環境,資料存盤查詢等;
  • 持續集成:主流的就是Jenkins、Docker、Kubernetes等組件,整體比較復雜,不好管理;
  • 虛擬機環境:研發必備的Linux作業系統,用來部署一些標準的組件集群;

不論是這些軟體環境還是虛擬機系統的搭建,基本都是通過下載軟體安裝包,然后在本地部署和定期更新以及運行,基于這個場景再去理解容器和Pod組件,會輕松許多;

二、容器

1、容器鏡像

參考上面系統環境的管理,軟體包和安裝部署的原理;

Docker容器鏡像是一個輕量級的、獨立的、可執行的軟體包,它包含了運行應用程式所需的一切:代碼、運行時、系統工具、系統庫和設定,帶有創建Docker容器的說明;

可以通過Dockerfile腳本自定義鏡像,也可以使用云端倉庫中其他人公開發布的,生產環境通常采用私有倉庫管理鏡像;

容器鏡像所承載的是封裝了應用程式及其所有軟體依賴的二進制資料,容器鏡像是可執行的軟體包,可以單獨運行;通常會創建應用的容器鏡像并將其推送到某倉庫,然后在Pod中參考它;

2、容器

容器將應用程式從底層的主機設施中解耦,這使得在不同的云或OS環境中部署更加容易;

容器的本質就是一個視圖隔離、可限制資源、獨立檔案系統的行程集合;

以常見的Linux研發環境來分析,可以限制容器的資源分配,比如記憶體大小、CPU使用,隔離行程之間的通信,設定獨立的檔案系統等;

Kubernetes集群中的每個節點都會運行容器,這些容器構成分配給該節點的Pod,單個Pod中的容器會在共同調度下,于同一位置運行在相同的節點上;

從整體上可以把K8S理解為「作業系統」,鏡像理解為「軟體安裝包」,容器理解為「應用行程」;

3、實踐案例

制作鏡像,首先將代碼工程auto-clientauto-serve打包,然后構建鏡像檔案,放在本地環境中;

  • 制作【auto-client】鏡像

構建命令

docker build -t auto-client:latest .

Dockerfile腳本

# 基礎鏡像
FROM openjdk:8

# 維護者
MAINTAINER cicadasmile

# 持久化目錄
VOLUME /data/docker/logs

# 添加應用服務JAR包
ADD auto-client.jar application.jar

# 配置引數
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-Djava.security.egd=file:/dev/./urandom","-jar","/application.jar"]
  • 制作【auto-serve】鏡像

構建命令

docker build -t auto-serve:latest .

Dockerfile腳本

# 基礎鏡像
FROM openjdk:8

# 維護者
MAINTAINER cicadasmile

# 持久化目錄
VOLUME /data/docker/logs

# 添加應用服務JAR包
ADD auto-serve.jar application.jar

# 配置引數
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-Djava.security.egd=file:/dev/./urandom","-jar","/application.jar"]

三、Pod組件

1、基本概念

Pod是可以在K8S中創建和管理的、最小的可部署的計算單元;

Pod是一組(一個或多個)容器,這些容器共享存盤、網路、以及怎樣運行這些容器的宣告,Pod中的內容總是并置的并且一同調度,在共享的背景關系中運行;

2、Pod管理

【Pod創建】

通常不會直接創建Pod,而是使用諸如Deployment或Job這類作業負載資源來創建Pod;是相對臨時性的、用后即拋的一次性物體;

【單容器Pod】

每個Pod都意在運行給定應用程式的單個實體,可以使用多個Pod對應用程式橫向擴展,即一個實體一個Pod對應,Pod看作單個容器的包裝器由K8S直接管理,是常見的部署方式;

【多容器Pod】

分布式系統中可能存在由多個緊密耦合且需要共享資源的共處容器組成的應用程式,比較典型的是「生產消費」場景,Pod將這些容器和存盤資源打包為一個可管理的物體;

Pod中的容器被自動安排到集群中的同一物理機或虛擬機上,并可以一起進行調度,容器之間可以共享網路和存盤資源和依賴、彼此通信、協調何時以及何種方式終止自身;

容器之間原本是被隔離開的,而Pod在設計上可以突破這種隔離,進而實作資源共享;

  • 存盤共享

在Pod層面設定共享的Volume,該Pod中所有容器都可以訪問該共享Volume,這也是Pod組件的存盤方式,Volume還允許Pod中持久資料保留下來,即使其中的容器需要重新啟動;

  • 網路共享

同一個Pod內,所有容器共享一個IP地址和埠空間,并且可以通過localhost發現對方;

3、實踐案例

3.1 Pod腳本

在此前的案例中,都是單容器Pod,這里演示多容器Pod,將【auto-client】和【auto-serve】放在同一個「auto-pod」中運行;

并且這里為兩個容器分配CPU和記憶體資源,requests是要為容器指定資源需求,limits是要為容器指定資源限制;

apiVersion: v1
kind: Pod
metadata:
  name: auto-pod
spec:
  containers:
    - name: auto-client
      image: auto-client
      imagePullPolicy: Never
      ports:
        - containerPort: 8079
      resources:
        requests:
          cpu: "250m"
          memory: "64Mi"
        limits:
          cpu: "500m"
          memory: "128Mi"
    - name: auto-serve
      image: auto-serve
      imagePullPolicy: Never
      ports:
        - containerPort: 8082
      resources:
        requests:
          cpu: "250m"
          memory: "64Mi"
        limits:
          cpu: "500m"
          memory: "128Mi"

3.2 Pod命令

  • 創建Pod
kubectl create -f pod.yaml
  • 查看指定Pod
kubectl get pod/auto-pod -o wide
NAME       READY   STATUS    RESTARTS   AGE    IP           NODE             NOMINATED NODE   READINESS GATES
auto-pod   2/2     Running   0          9m2s   10.1.0.123   docker-desktop   <none>           <none>
  • 查看指定Pod描述
kubectl describe pod/auto-pod

# 此處只展示部分資訊
Name:         auto-pod
Namespace:    default
Node:         docker-desktop/192.168.65.11
Status:       Running
IP:           10.1.0.123
Containers:
  auto-client:
    Container ID:   docker://Container-ID
    Image:          auto-client
    Image ID:       docker://sha256:Image-ID
    Port:           8079/TCP
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        250m
      memory:     64Mi
  auto-serve:
    Container ID:   docker://Container-ID
    Image:          auto-serve
    Image ID:       docker://sha256:Image-ID
    Port:           8082/TCP
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        250m
      memory:     64Mi
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  38s   default-scheduler  Successfully assigned default/auto-pod to docker-desktop
  Normal  Pulled     37s   kubelet            Container image "auto-client" already present on machine
  Normal  Created    37s   kubelet            Created container auto-client
  Normal  Started    37s   kubelet            Started container auto-client
  Normal  Pulled     37s   kubelet            Container image "auto-serve" already present on machine
  Normal  Created    37s   kubelet            Created container auto-serve
  Normal  Started    37s   kubelet            Started container auto-serve
  • 洗掉Pod
kubectl delete -f pod.yaml

3.3 服務日志

在「auto-client」服務中,提供一個簡單的定時任務,每10秒訪問一次「auto-serve」的介面,列印請求的回應結果;

@Component
public class HttpJob {

    private static final Logger LOG = LoggerFactory.getLogger(HttpJob.class.getName()) ;

    private static final String SERVER_URL = "http://localhost:8082/serve";

    /**
     * 每10秒執行一次
     */
    @Scheduled(fixedDelay = 10000)
    public void systemDate (){
        try{
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setReadTimeout(3000);
            factory.setConnectTimeout(6000);
            RestTemplate restTemplate = new RestTemplate(factory);
            Map<String,String> paramMap = new HashMap<>() ;
            String result = restTemplate.getForObject(SERVER_URL,String.class,paramMap);
            LOG.info("server-resp::::"+result);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

在「auto-serve」服務中,提供一個簡單的Get請求介面;

@RestController
public class ServeWeb {
    private static final Logger logger = LoggerFactory.getLogger(ServeWeb.class) ;

    @Value("${server.port:}")
    private Integer servePort ;

    @GetMapping("/serve")
    public String serve (){
        logger.info("serve:{}",servePort);
        return "serve:"+servePort ;
    }
}

查看兩個容器的運行日志,發現「auto-client」和「auto-serve」可以正常通信,以此來驗證同一個Pod內網路共享;

4、狀態與重啟

4.1 重啟策略

可以在Pod中通過restartPolicy屬性設定重啟策略,常用的取值是Always以降低應用的中斷時間,適用于Pod中的所有容器;

  • Always:默認值,容器失效時,kubelet自動重啟該容器,
  • OnFailure:容器停止運行且退出碼不為0時,kubelet自動重啟該容器,
  • Never:不論容器是什么狀態,kubelet都不重啟該容器,

4.2 生命周期

  • Pending:Pod被Kubernetes系統接受,但有一個或者多個容器未創建,此階段包括等待Pod被調度的時間和通過網路下載鏡像的時間,
  • Running:Pod已經系結到了某個節點,Pod中所有的容器都已被創建,至少有一個容器在運行,或者正處于啟動或重啟狀態,
  • Succeeded:Pod中的所有容器都已成功終止,并且不會再重啟,
  • Failed:Pod中的所有容器都已終止,并且至少有一個容器是因為失敗被終止,
  • Unknown:因為某些原因無法取得Pod的狀態,通常是因為與Pod所在主機通信失敗,

Pod遵循預定義的生命周期,起始于Pending階段,如果至少其中有一個主要容器正常啟動,則進入Running階段,之后取決于Pod中是否有容器以失敗狀態結束而進入Succeeded或者Failed階段,

四、參考原始碼

檔案倉庫:
https://gitee.com/cicadasmile/butte-java-note

腳本倉庫:
https://gitee.com/cicadasmile/butte-auto-parent
Gitee主頁: https://gitee.com/cicadasmile/butte-java-note

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/556543.html

標籤:其他

上一篇:ois七層模型與資料封裝程序

下一篇:返回列表

標籤雲
其他(162037) Python(38266) JavaScript(25520) Java(18286) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7281) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4609) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1983) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • K8S | 容器和Pod組件

    不論是軟體環境還是虛擬機系統的搭建,基本都是通過下載軟體安裝包,然后在本地部署和定期更新以及運行,基于這個場景再去理解容器和Pod組件,會輕松許多; ......

    uj5u.com 2023-07-04 08:22:56 more
  • ois七層模型與資料封裝程序

    一,ois七層模型 一,ois七層模型1 為什么要分層2 七層模型3 七層總結二,協議,埠,的作用2.1協議作用2.2tcp/udp的區別2.3ARP 協議的作用2.4客戶端與服務端的作用2.5icmp與ping的區別2.6FTP協議埠2.7埠號的作用三,資料封裝程序3.1資料封裝程序 1 為 ......

    uj5u.com 2023-07-04 08:17:45 more
  • 云原生周刊:Microcks 成為 CNCF 沙箱專案

    ## 開源專案推薦 ### [Kubent](https://github.com/doitintl/kube-no-trouble) Kube No Trouble (kubent) 是一個簡單的工具,該工具將能夠根據您部署資源的方式檢測已棄用的 API。 ### [kdoctor](https: ......

    uj5u.com 2023-07-04 08:17:39 more
  • 系統集成管理真題 2022-11 廣東

    2022-11 廣東 1、云計算服務中,(B)為用戶提供虛擬的作業系統,資料庫管理系統,開發環境等服務。 A.Iaas B.Paas C.Saas D.Daas 決議: 按照云計算服務提供的資源層次,可以分為 IaaS、PaaS 和 SaaS 等三種服務型別。 (1)Iaas(基礎設施即服務),向用 ......

    uj5u.com 2023-07-04 08:17:35 more
  • 保姆級教程:帶你體驗華為云測驗計劃CodeArts TestPlan

    摘要:華為云測驗計劃(CodeArts TestPlan)是面向軟體開發者提供的一站式云端測驗平臺,覆寫測驗管理、介面測驗,融入DevOps敏捷測驗理念,幫助您高效管理測驗活動,保障產品高質量交付。 本文分享自華為云社區《保姆級教程:帶你體驗華為云測驗計劃CodeArts TestPlan》,作者: ......

    uj5u.com 2023-07-04 08:17:11 more
  • CodeGeeX榮獲2023稀土開發者大會“年度最佳開發工具”獎項

    XDC 2023稀土開發者大會6月30日在北京成功舉辦,今年大會主題為“代碼不止,掘金不停”。除了為開發者提供多達60場+的技術分享之外,針對開發者使用的工具也展開了一系列的專業評選,這也是每年大家非常期待的環節。 開發工具是每個開發者每天都會使用的產品,深度影響著開發者的作業效率和生產力。稀土掘金 ......

    uj5u.com 2023-07-04 08:17:01 more
  • 華為掃地僧:揭秘IoT+鴻蒙幫助企業突圍物聯網安全問題

    摘要:通過介紹物聯網安全架構以及華為云IoT+鴻蒙端邊云協同安全實踐,意在通過華為云IoT+鴻蒙幫助企業解決物聯網安全問題。 在本期#碼出未來,與你同行#HDC.Cloud2023華為云開發者社區系列直播之《華為掃地僧揭秘IoT+鴻蒙幫助企業突圍物聯網安全問題》的主題直播中,華為云IoT 資深架構師 ......

    uj5u.com 2023-07-04 08:16:42 more
  • Jmeter壓測實戰:Jmeter二次開發之自定義函式

    本文介紹如何開發Jmeter自定義函式實作快速生成京東宙斯下單標準sign,同時深刻理解Jmeter的插件化機制及高擴展性特性。 ......

    uj5u.com 2023-07-04 08:16:36 more
  • 祝賀開源之夏 2023 KubeSphere 社區專案中選學生!

    日前,開源之夏 2023 所有中選結果已出爐,在此祝賀各位中選的同學! ## 活動簡介 開源之夏是由中科院軟體所“開源軟體供應鏈點亮計劃”發起并長期支持的一項暑期開源活動,旨在鼓勵在校學生積極參與開源軟體的開發維護,培養和發掘更多優秀的開發者,促進優秀開源軟體社區的蓬勃發展,助力開源軟體供應鏈建設。 ......

    uj5u.com 2023-07-04 08:11:22 more
  • CodeGeeX榮獲2023稀土開發者大會“年度最佳開發工具”獎項

    XDC 2023稀土開發者大會6月30日在北京成功舉辦,今年大會主題為“代碼不止,掘金不停”。除了為開發者提供多達60場+的技術分享之外,針對開發者使用的工具也展開了一系列的專業評選,這也是每年大家非常期待的環節。 開發工具是每個開發者每天都會使用的產品,深度影響著開發者的作業效率和生產力。稀土掘金 ......

    uj5u.com 2023-07-04 08:05:28 more