K8s創(chuàng)建資源的兩種方法實(shí)例
前言
在 K8s 中,創(chuàng)建資源有兩種方式:
- 直接使用 kubectl run 命令創(chuàng)建
- 使用 kubectl create/apply 命令從 YAML 文件創(chuàng)建
在本文中,我將通過(guò)示例解釋這兩種方法,以及它們分別應(yīng)該在何時(shí)使用。
kubectl run
kubectl run 命令在 pod 中創(chuàng)建并運(yùn)行特定的鏡像。例如:
$ kubectl run nginx --image=nginx --port 80 pod/nginx created $ kubectl get po nginx NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 25s
如果您對(duì)這個(gè)新 pod 執(zhí)行 kubectl describe 命令,您將看到:
$ kubectl describe po nginx Name: nginx Namespace: default Priority: 0 Node: ip-10-0-0-146.ec2.internal/10.0.0.146 Start Time: Sat, 09 Apr 2022 16:56:29 -0400 Labels: run=nginx Annotations: kubernetes.io/psp: eks.privileged Status: Running IP: 10.0.0.69 IPs: IP: 10.0.0.69
請(qǐng)注意,Labels 是 run=nginx。
您還可以在 run 命令中指定環(huán)境變量,例如:
$ kubectl run nginx --image=nginx --port 80 --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
如果您現(xiàn)在執(zhí)行 kubectl describe nginx,就可以看到我們剛剛提供的新環(huán)境變量:
$ kubectl describe po nginx | grep "Env" -A2 Environment: DNS_DOMAIN: cluster POD_NAMESPACE: default
通常,kubectl run 命令用于一些簡(jiǎn)單、直觀和快速的任務(wù),它適用于 ad-hoc(點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)模式)的測(cè)試或?qū)嶒?yàn)。
kubectl kubectl create/apply
kubectl create/apply 命令基于給定的配置文件。該配置文件具有以下特點(diǎn):
- 配置文件描述了應(yīng)用程序最終將達(dá)到的 Whatstate。
- 配置文件提供創(chuàng)建資源的模板,可以重復(fù)部署。
- 部署可以像代碼一樣進(jìn)行管理。
- 適用于正式的、跨環(huán)境的、大規(guī)模的部署。
- 需要熟悉配置文件的語(yǔ)法才能使用此方法。
讓我們?cè)倏匆粋€(gè)例子。我們將創(chuàng)建相同的 nginx pod,這一次,讓我們通過(guò) YAML 文件來(lái)完成:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
不用在意 Deployment 文件語(yǔ)法,我將在另一篇文章中討論 K8s Deployment。
讓我們使用 kubectl create 命令來(lái)創(chuàng)建資源:
$ kubectl create -f nginx-deployment.yaml deployment.apps/nginx created $ kubectl get po NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-k7tfl 1/1 Running 0 5s $ kubectl delete -f nginx-deployment.yaml deployment.apps "nginx" deleted
您還可以使用 kubectl apply 命令:
$ kubectl apply -f nginx-deployment.yaml deployment.apps/nginx created $ kubectl get po NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-2fsxk 1/1 Running 0 17s $ kubectl delete -f nginx-deployment.yaml deployment.apps "nginx" deleted
可以看到,create 和 apply 命令都可以用來(lái)創(chuàng)建資源,但是二者有什么區(qū)別呢?
kubectl create 與 kubectl apply
讓我們談?wù)?create 和 apply 之間的區(qū)別。
create
此命令將告訴 K8s API 服務(wù)器,您要?jiǎng)?chuàng)建、刪除或替換一個(gè)或多個(gè)資源。以更簡(jiǎn)化的方式,這意味著您可以從頭開(kāi)始創(chuàng)建一個(gè)全新的對(duì)象?;蛘撸ㄟ^(guò)定義需求對(duì)任何現(xiàn)有對(duì)象進(jìn)行一些更改。
apply
此命令意味著通過(guò)在給定的 YAML 文件中聲明您確切需要的內(nèi)容來(lái)更改已經(jīng)存在的對(duì)象。
為了演示,讓我們使用 nginx Deployment 文件。首先,讓我們創(chuàng)建資源:
$ kubectl create -f nginx-deployment.yaml deployment.apps/nginx created
現(xiàn)在,假設(shè)我們要向 pod 添加一個(gè) label,將 label 更新為:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx env: prod spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx env: prod spec: containers: - name: nginx image: nginx
如果再次運(yùn)行 create 命令:
$ kubectl create -f nginx-deployment.yaml Error from server (AlreadyExists): error when creating "nginx-deployment.yaml": deployments.apps "nginx" already exists
即使 YAML 文件略有不同,您也會(huì)收到 “nginx” 已存在的錯(cuò)誤。
那如果你運(yùn)行 kubectl apply 呢?讓我們?cè)囈辉嚕?/p>
$ kubectl apply -f nginx-deployment.yaml deployment.apps/nginx configured
現(xiàn)在讓我們描述一下資源:
$ kubectl get po NAME READY STATUS RESTARTS AGE nginx-595f565474-zkl4t 1/1 Running 0 3m39s $ kubectl describe po nginx-595f565474-zkl4t Name: nginx-595f565474-zkl4t Namespace: default Priority: 0 Node: ip-10-0-0-146.ec2.internal/10.0.0.146 Start Time: Sat, 09 Apr 2022 17:20:04 -0400 Labels: app=nginx env=prod pod-template-hash=595f565474
您可以看到應(yīng)用了新的 labels 是 env=prod。
現(xiàn)在我們了解了 kubectl create 和 kubectl apply 之間的區(qū)別,您可能想知道應(yīng)該使用哪一個(gè)?
在 kubectl create 命令中,我們指定了一個(gè)特定行為,也就是 create,因此它是一種更具命令式的方法。在 kubectl apply 命令中,我們指定系統(tǒng)的目標(biāo)狀態(tài),而不指定一個(gè)特定的行為,因此它是更具聲明性的方法。我們讓系統(tǒng)決定采取什么行動(dòng)。如果資源不存在,它將創(chuàng)建它,如果資源存在,則它將配置應(yīng)用于現(xiàn)有資源。
簡(jiǎn)單來(lái)說(shuō),如果對(duì)單個(gè)文件運(yùn)行一個(gè)操作來(lái)創(chuàng)建資源,create 和 apply 基本是相同的。但是,apply 允許您在一個(gè)目錄中的多個(gè)文件上同時(shí)創(chuàng)建和修補(bǔ)。
總結(jié)
到此這篇關(guān)于K8s創(chuàng)建資源的文章就介紹到這了,更多相關(guān)K8s創(chuàng)建資源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解k8s?NetworkPolicy?網(wǎng)絡(luò)策略是怎么樣的
這篇文章主要為大家介紹了k8s?NetworkPolicy?網(wǎng)絡(luò)策略是怎么樣的深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明
這篇文章主要為大家介紹了詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09使用sealos快速搭建K8s集群環(huán)境的過(guò)程
這篇文章主要介紹了使用sealos快速搭建K8s集群環(huán)境,主要包括sealos安裝方法,虛擬機(jī)設(shè)置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解
這篇文章主要為大家介紹了IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02K8S內(nèi)部pod之間相互調(diào)用案例以及詳解
這篇文章主要給大家介紹了關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的相關(guān)資料,Pod是Kubernetes中最小的可部署單元,它是一個(gè)或多個(gè)容器的集合,它們共享網(wǎng)絡(luò)和存儲(chǔ)資源,并在同一節(jié)點(diǎn)上運(yùn)行,需要的朋友可以參考下2023-08-08Rainbond配置組件自動(dòng)構(gòu)建部署官方文檔講解
這篇文章主要為大家介紹了Rainbond配置組件自動(dòng)構(gòu)建部署官方文檔講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04K8S?實(shí)用工具之合并多個(gè)kubeconfig實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了K8S?實(shí)用工具之合并多個(gè)kubeconfig實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03