wordpress調(diào)用第一張圖片合肥網(wǎng)絡(luò)優(yōu)化公司有幾家
目錄
pod概念
pod的分類
1.基礎(chǔ)容器 pause
2.初始化容器?init
實(shí)驗(yàn):定義初始化容器
init容器的作用
實(shí)驗(yàn):如何在容器內(nèi)部進(jìn)行掛載
鏡像拉取策略
pod概念
pod是k8s里面的最小單位,pod也是最小化運(yùn)行容器的資源對(duì)象。容器是基于pod在k8s集群當(dāng)中工作的。在k8s集群當(dāng)中,一個(gè)pod就代表著一個(gè)運(yùn)行的進(jìn)程,k8s的大部分組件都是圍繞pod來進(jìn)行的,主要是對(duì)pod進(jìn)行支撐和擴(kuò)展。deployment和service都是圍繞pod來進(jìn)行部署的。
k8s的pod有兩種使用方式:
1.一個(gè)pod里面只有一個(gè)容器。這是最常見的方式。k8s管理的是pod,而不是容器
2.一個(gè)pod里面有多個(gè)容器。即使有多個(gè)容器,它們之間也是共享網(wǎng)絡(luò)、共享掛載卷。
現(xiàn)在容器的技術(shù)要求:一個(gè)pod下的容器必須運(yùn)行在同一個(gè)節(jié)點(diǎn)上。因?yàn)樗鼈冎g要共享網(wǎng)絡(luò)、共享掛載卷,所以并不是pod自身提供的功能,而是pause容器提供共享網(wǎng)絡(luò)和共享掛載卷。
流向圖
流程:要在k8s集群上創(chuàng)建pod,此時(shí)集群分配到一個(gè)節(jié)點(diǎn)上,在節(jié)點(diǎn)上r創(chuàng)建pod的過程:先把pause鏡像運(yùn)行起來(初始化鏡像),然后才拉取nginx鏡像,在運(yùn)行過程中,pause鏡像不參與,只有刪除的時(shí)候才參與,在刪除鏡像的過程中回收容器的資源和容器內(nèi)的僵尸進(jìn)程,然后再通知kubelet,kubelet回收pod,然后通知apiserver,然后通過apiserver存儲(chǔ)到etcd
注:其中要先有pause基礎(chǔ)容器,然后才拉取nginx鏡像
pod的分類
1.基礎(chǔ)容器 pause
用來共享網(wǎng)絡(luò)、共享掛載卷
2.初始化容器?init
這種初始化容器包含在pod內(nèi)部,屬于pod的組成部分之一,而且伴隨著pod的生命周期當(dāng)中的一個(gè)環(huán)節(jié):啟動(dòng)環(huán)節(jié)。
當(dāng)我們拉起一個(gè)pod時(shí),先構(gòu)建pause,構(gòu)建完成之后,如果包含初始化容器,必須要等到初始化容器部署完成之后,才會(huì)部署應(yīng)用容器。
實(shí)驗(yàn):定義初始化容器
mkdir k8s-yaml
cd k8s-yaml/
vim init.yaml
apiVersion: v1
kind: Pod
metadata:name: init-podlabels:app: test1
spec:initContainers:
#定義pod內(nèi)部的初始化容器,一個(gè)pod里面可以有多個(gè)容器,它包含初始化容器- name: centos1image: centos:7command: ["/bin/bash","-c","echo 123 > /opt/123.txt && sleep 2"]
#多個(gè)命令用 ; 表示邏輯或,用 && 表示邏輯且 - name: centos2image: centos:7command: ["/bin/bash","-c","echo 456 > /opt/456.txt && sleep 2"]containers:
#業(yè)務(wù)容器- name: centos3image: centos:7command: ["/bin/bash","-c","echo system is running && sleep 3600"]
這里會(huì)有三個(gè)問題:
1.怎么查看這三個(gè)容器
kubectl exec -it pod名稱 -c 容器名 bash??
kubectl logs -f pod名稱 -c 容器名 bash? ?查看日志
初始化容器運(yùn)行完成之后,即使命完成之后就退出了,但是節(jié)點(diǎn)上的容器還在,這個(gè)時(shí)候只能查詢到業(yè)務(wù)容器的日志和狀態(tài)。
初始化容器運(yùn)行完畢之后必須要退出,否則后續(xù)的容器無法繼續(xù)構(gòu)建。也就是初始化容器后要加command?
2.這三個(gè)容器的啟動(dòng)先后順序是什么
啟動(dòng)的先后順序:先啟動(dòng)初始化的容器,再啟業(yè)務(wù)容器。
3.初始化容器啟動(dòng)失敗后pod能否進(jìn)入ready狀態(tài)
不能
init容器的作用
1.創(chuàng)建pod的時(shí)候,可以為業(yè)務(wù)容器初始化運(yùn)行條件以及提供環(huán)境變量和一些軟件(自定義)
2.初始化容器可以訪問Secrets權(quán)限,不需要配置。業(yè)務(wù)容器必須要配置之后才能訪問Secrets
初始化容器的核心作用:可以為業(yè)務(wù)容器運(yùn)行之前,提供一些必要的條件。只有前置條件滿足之后,那么業(yè)務(wù)容器才能運(yùn)行。
實(shí)驗(yàn):如何在容器內(nèi)部進(jìn)行掛載
apiVersion: v1
kind: Pod
matadata:name: init-podlabels:app: test1
spec:volumes:- name: testdataemptyDir: {}
#容器卷,容器內(nèi)部掛載的數(shù)據(jù)卷initContainers:
#定義pod內(nèi)部的初始化 一個(gè)pod里面有多個(gè)容器 初始化容器- name: centos1image: centos7command: ["/bin/bash","-c","echo 123 > /opt/123.txt && sleep 2"]volumeMounts:- name: testdata
#需要和上面的保持一致mountPath: /opt/data
#多個(gè)命令用 ; 表示邏輯或,用 && 表示邏輯且name: centos2image: centos7command: ["/bin/bash","-c","echo 456 > /opt/456.txt && sleep 2"]volumeMounts:- name: testdata
#需要和上面的保持一致mountPath: /opt/datacontainers:- name: centos3image: centos7command: ["/bin/bash","-c","echo system is running && sleep 3600"]volumeMounts:- name: testdata
#需要和上面的保持一致mountPath: /opt/data
鏡像拉取策略
1. IfNotPresent :鏡像在本地已經(jīng)存在,就不會(huì)到鏡像倉庫再一次拉取鏡像? (默認(rèn)方式)
2. Always :每次創(chuàng)建pod都會(huì)拉取鏡像
3. Never :從來不去倉庫拉取鏡像,只使用本地鏡像
鏡像的標(biāo)簽:nginx:1.22
如果不加標(biāo)簽就是nginx? 默認(rèn)就是nginx:laster? ? laster指的是最新版
如果沒有鏡像拉取策略,默認(rèn)策略就是ifNotPresent,但是如果鏡像沒有指定標(biāo)簽,即使沒有聲明鏡像的拉取策略,那么默認(rèn)策略也是 Always