成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8S | 容器和Pod組件

開發(fā) 架構(gòu)
Pod遵循預(yù)定義的生命周期,起始于Pending階段,如果至少其中有一個(gè)主要容器正常啟動(dòng),則進(jìn)入Running階段,之后取決于Pod中是否有容器以失敗狀態(tài)結(jié)束而進(jìn)入Succeeded或者Failed階段。

一、場(chǎng)景

作為研發(fā)人員,通常自己電腦的系統(tǒng)環(huán)境都是非常復(fù)雜,在個(gè)人的習(xí)慣上,是按照下圖的模塊管理電腦的系統(tǒng)環(huán)境;

對(duì)于「基礎(chǔ)設(shè)施」、「主機(jī)操作系統(tǒng)」、「系統(tǒng)軟件」來說,通常只做配置修改;

對(duì)于自行安裝的軟件環(huán)境來說,個(gè)人通常這樣分類:「應(yīng)用軟件」、「研發(fā)軟件」、「持續(xù)集成」、「虛擬機(jī)環(huán)境」;

  • 應(yīng)用軟件:主要指常用的辦公軟件,比如文檔編寫,畫圖設(shè)計(jì),通信產(chǎn)品等;
  • 研發(fā)軟件:比如基礎(chǔ)開發(fā)環(huán)境,各種中間件環(huán)境,數(shù)據(jù)存儲(chǔ)查詢等;
  • 持續(xù)集成:主流的就是Jenkins、Docker、Kubernetes等組件,整體比較復(fù)雜,不好管理;
  • 虛擬機(jī)環(huán)境:研發(fā)必備的Linux操作系統(tǒng),用來部署一些標(biāo)準(zhǔn)的組件集群;

不論是這些軟件環(huán)境還是虛擬機(jī)系統(tǒng)的搭建,基本都是通過下載軟件安裝包,然后在本地部署和定期更新以及運(yùn)行,基于這個(gè)場(chǎng)景再去理解容器和Pod組件,會(huì)輕松許多;

二、容器

1、容器鏡像

參考上面系統(tǒng)環(huán)境的管理,軟件包和安裝部署的原理;

Docker容器鏡像是一個(gè)輕量級(jí)的、獨(dú)立的、可執(zhí)行的軟件包,它包含了運(yùn)行應(yīng)用程序所需的一切:代碼、運(yùn)行時(shí)、系統(tǒng)工具、系統(tǒng)庫和設(shè)置,帶有創(chuàng)建Docker容器的說明;

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

容器鏡像所承載的是封裝了應(yīng)用程序及其所有軟件依賴的二進(jìn)制數(shù)據(jù),容器鏡像是可執(zhí)行的軟件包,可以單獨(dú)運(yùn)行;通常會(huì)創(chuàng)建應(yīng)用的容器鏡像并將其推送到某倉庫,然后在Pod中引用它;

2、容器

容器將應(yīng)用程序從底層的主機(jī)設(shè)施中解耦,這使得在不同的云或OS環(huán)境中部署更加容易;

容器的本質(zhì)就是一個(gè)視圖隔離、可限制資源、獨(dú)立文件系統(tǒng)的進(jìn)程集合;

以常見的Linux研發(fā)環(huán)境來分析,可以限制容器的資源分配,比如內(nèi)存大小、CPU使用,隔離進(jìn)程之間的通信,設(shè)置獨(dú)立的文件系統(tǒng)等;

Kubernetes集群中的每個(gè)節(jié)點(diǎn)都會(huì)運(yùn)行容器,這些容器構(gòu)成分配給該節(jié)點(diǎn)的Pod,單個(gè)Pod中的容器會(huì)在共同調(diào)度下,于同一位置運(yùn)行在相同的節(jié)點(diǎn)上;

從整體上可以把K8S理解為「操作系統(tǒng)」,鏡像理解為「軟件安裝包」,容器理解為「應(yīng)用進(jìn)程」;

3、實(shí)踐案例

制作鏡像,首先將代碼工程auto-clientauto-serve打包,然后構(gòu)建鏡像文件,放在本地環(huán)境中;

  • 制作【auto-client】鏡像

構(gòu)建命令

docker build -t auto-client:latest .

Dockerfile腳本

# 基礎(chǔ)鏡像
FROM openjdk:8

# 維護(hù)者
MAINTAINER cicadasmile

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

# 添加應(yīng)用服務(wù)JAR包
ADD auto-client.jar application.jar

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

構(gòu)建命令

docker build -t auto-serve:latest .

Dockerfile腳本

# 基礎(chǔ)鏡像
FROM openjdk:8

# 維護(hù)者
MAINTAINER cicadasmile

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

# 添加應(yīng)用服務(wù)JAR包
ADD auto-serve.jar application.jar

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

三、Pod組件

1、基本概念

Pod是可以在K8S中創(chuàng)建和管理的、最小的可部署的計(jì)算單元;

Pod是一組(一個(gè)或多個(gè))容器,這些容器共享存儲(chǔ)、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明,Pod中的內(nèi)容總是并置的并且一同調(diào)度,在共享的上下文中運(yùn)行;

2、Pod管理

【Pod創(chuàng)建】

通常不會(huì)直接創(chuàng)建Pod,而是使用諸如Deployment或Job這類工作負(fù)載資源來創(chuàng)建Pod;是相對(duì)臨時(shí)性的、用后即拋的一次性實(shí)體;

【單容器Pod】

每個(gè)Pod都意在運(yùn)行給定應(yīng)用程序的單個(gè)實(shí)例,可以使用多個(gè)Pod對(duì)應(yīng)用程序橫向擴(kuò)展,即一個(gè)實(shí)例一個(gè)Pod對(duì)應(yīng),Pod看作單個(gè)容器的包裝器由K8S直接管理,是常見的部署方式;

【多容器Pod】

分布式系統(tǒng)中可能存在由多個(gè)緊密耦合且需要共享資源的共處容器組成的應(yīng)用程序,比較典型的是「生產(chǎn)消費(fèi)」場(chǎng)景,Pod將這些容器和存儲(chǔ)資源打包為一個(gè)可管理的實(shí)體;

Pod中的容器被自動(dòng)安排到集群中的同一物理機(jī)或虛擬機(jī)上,并可以一起進(jìn)行調(diào)度,容器之間可以共享網(wǎng)絡(luò)和存儲(chǔ)資源和依賴、彼此通信、協(xié)調(diào)何時(shí)以及何種方式終止自身;

容器之間原本是被隔離開的,而Pod在設(shè)計(jì)上可以突破這種隔離,進(jìn)而實(shí)現(xiàn)資源共享;

  • 存儲(chǔ)共享

在Pod層面設(shè)置共享的Volume,該P(yáng)od中所有容器都可以訪問該共享Volume,這也是Pod組件的存儲(chǔ)方式,Volume還允許Pod中持久數(shù)據(jù)保留下來,即使其中的容器需要重新啟動(dòng);

  • 網(wǎng)絡(luò)共享

同一個(gè)Pod內(nèi),所有容器共享一個(gè)IP地址和端口空間,并且可以通過localhost發(fā)現(xiàn)對(duì)方;

3、實(shí)踐案例

3.1 Pod腳本

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

并且這里為兩個(gè)容器分配CPU和內(nèi)存資源,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命令

  • 創(chuàng)建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 服務(wù)日志

在「auto-client」服務(wù)中,提供一個(gè)簡單的定時(shí)任務(wù),每10秒訪問一次「auto-serve」的接口,打印請(qǐng)求的響應(yīng)結(jié)果;

@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秒執(zhí)行一次
     */
    @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」服務(wù)中,提供一個(gè)簡單的Get請(qǐng)求接口;

@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 ;
    }
}

查看兩個(gè)容器的運(yùn)行日志,發(fā)現(xiàn)「auto-client」和「auto-serve」可以正常通信,以此來驗(yàn)證同一個(gè)Pod內(nèi)網(wǎng)絡(luò)共享;

4、狀態(tài)與重啟

4.1 重啟策略

可以在Pod中通過restartPolicy屬性設(shè)置重啟策略,常用的取值是Always以降低應(yīng)用的中斷時(shí)間,適用于Pod中的所有容器;

  • Always:默認(rèn)值,容器失效時(shí),kubelet自動(dòng)重啟該容器。
  • OnFailure:容器停止運(yùn)行且退出碼不為0時(shí),kubelet自動(dòng)重啟該容器。
  • Never:不論容器是什么狀態(tài),kubelet都不重啟該容器。

4.2 生命周期

  • Pending:Pod被Kubernetes系統(tǒng)接受,但有一個(gè)或者多個(gè)容器未創(chuàng)建,此階段包括等待Pod被調(diào)度的時(shí)間和通過網(wǎng)絡(luò)下載鏡像的時(shí)間。
  • Running:Pod已經(jīng)綁定到了某個(gè)節(jié)點(diǎn),Pod中所有的容器都已被創(chuàng)建,至少有一個(gè)容器在運(yùn)行,或者正處于啟動(dòng)或重啟狀態(tài)。
  • Succeeded:Pod中的所有容器都已成功終止,并且不會(huì)再重啟。
  • Failed:Pod中的所有容器都已終止,并且至少有一個(gè)容器是因?yàn)槭”唤K止。
  • Unknown:因?yàn)槟承┰驘o法取得Pod的狀態(tài),通常是因?yàn)榕cPod所在主機(jī)通信失敗。

Pod遵循預(yù)定義的生命周期,起始于Pending階段,如果至少其中有一個(gè)主要容器正常啟動(dòng),則進(jìn)入Running階段,之后取決于Pod中是否有容器以失敗狀態(tài)結(jié)束而進(jìn)入Succeeded或者Failed階段。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-06-01 09:38:36

KubernetesPod容器

2022-11-02 10:21:41

K8s pod運(yùn)維

2021-03-11 12:31:33

K8sCoreDNSDNS服務(wù)器

2024-03-18 15:44:48

K8S故障運(yùn)維

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2024-05-27 00:00:10

KubernetesK8s云原生

2022-02-11 23:11:09

Kubernetes集群容器化

2022-01-02 08:42:50

架構(gòu)部署容器

2024-09-13 10:11:38

2023-11-06 07:16:22

WasmK8s模塊

2025-04-28 08:45:16

2023-02-08 07:55:33

K8sHPA服務(wù)器

2021-07-28 10:10:57

K8SMount PVCPod

2023-09-06 08:12:04

k8s云原生

2022-01-27 08:27:23

Dubbo上下線設(shè)計(jì)

2017-12-04 10:57:31

容器K8S

2017-11-21 10:11:19

陌陌K8sDocker

2021-12-21 08:31:07

k8s診斷工具kubectl-deb

2023-12-01 15:58:00

Kubernetes集群DevOps

2019-08-12 08:36:33

K8S網(wǎng)絡(luò)Pod
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧区一欧区二欧区三免费 | 亚洲精品久久久久久久久久久 | 国产综合久久久 | 午夜免费看视频 | 精品免费 | 欧美综合久久 | 中文字幕1区2区 | 99精品免费久久久久久日本 | 久综合| 一区二区三区在线免费观看 | 国产91色在线 | 亚洲 | 欧美三级在线 | 亚洲成人高清 | 欧美日韩一二区 | 国产无人区一区二区三区 | 国家一级黄色片 | 国产激情偷乱视频一区二区三区 | 精品一区二区在线视频 | 逼逼视频 | 欧美日韩国产一区二区三区 | 精品国产一二三区 | 亚洲精品一区二三区不卡 | 天天干com| 亚洲欧美在线一区 | 日韩av手机在线观看 | 美女黄18岁以下禁止观看 | 一区二区三区在线看 | 午夜视频在线观看一区二区 | 亚洲综合在线视频 | 国产黄色在线观看 | 日韩淫片免费看 | 久久亚洲国产 | 一区二区三区免费 | 网站黄色在线免费观看 | 日韩无| 综合久久综合久久 | h视频在线观看免费 | 国产精品亚洲一区二区三区在线 | 国产一级在线观看 | 日韩av一区二区在线 | 午夜免费电影 |