最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

k8s之yaml文件的使用及說(shuō)明

 更新時(shí)間:2025年11月28日 15:45:15   作者:劉艷芬_  
這篇文章主要介紹了YAML文件在Kubernetes中的使用,包括YAML文件的格式、創(chuàng)建資源對(duì)象、創(chuàng)建Service服務(wù)、查看和測(cè)試Service、解釋Kubernetes中的port概念以及如何使用`kubectl`命令生成和修改YAML模板,同時(shí),文章也簡(jiǎn)要介紹了如何編寫和訪問MySQL的YAML文件

一、關(guān)于yaml文件

1、k8s支持的文件格式

  • Kubernetes支持YAML和JSON格式管理資源對(duì)象
  • JSON格式:主要用于api接口之間消息的傳遞
  • YAML格式:用于配置和管理,YAML是一種簡(jiǎn)潔的非標(biāo)記性語(yǔ)言,內(nèi)容格式人性化,較易讀

2、YAML語(yǔ)言格式

  • 大小寫敏感
  • 使用縮進(jìn)表示層級(jí)關(guān)系
  • 不支持Tab鍵制表符縮進(jìn),只使用空格縮進(jìn)
  • 縮進(jìn)的空格數(shù)目不重要,只要相同層級(jí)的元素左側(cè)對(duì)齊即可,通常開頭縮進(jìn)兩個(gè)空格
  • 符號(hào)字符后縮進(jìn)一個(gè)空格,如冒號(hào),逗號(hào),短橫杠(-)等
  • “—”表示YAML格式,一個(gè)文件的開始,用于分隔文件
  • “#”表示注釋

3、查看api資源版本標(biāo)簽

kubectl api-versions
#查看api資源版本標(biāo)簽

  • 如果是業(yè)務(wù)場(chǎng)景,一般首選使用apps/v1(apps/v1從v1.9版本開始提供API)。
  • 在k8s v1.16版本之前使用的是extensions/v1beta1,extensions/v1beta1從v1.20版本開始不再提供Ingress資源。
  • 帶有beta字樣的代表的是測(cè)試版本,不用在生產(chǎn)環(huán)境中。

4、編寫nginx-test.yaml資源配置清單

4.1 編寫資源配置清單

mkdir /opt/test
#新建目錄

cd !$
cd /opt/test
#切換到新建目錄

vim nginx-test.yaml
apiVersion: apps/v1
#指定api版本標(biāo)簽
kind: Deployment
#定義資源的類型/角色,deployment為副本控制器
#此處資源類型可以是Deployment、Job、Ingress、Service等
metadata:
#定義資源的元數(shù)據(jù)信息,比如資源的名稱、namespace、標(biāo)簽等信息
  name: nginx-test
  #定義資源名稱
  namespace: luck
  #定義deployment所在的命名空間
  labels:
  #定義標(biāo)簽
    app: nginx
    #定義資源的名稱,在同一個(gè)namespace空間中必須是唯一的
spec:
#定義deployment資源需要的參數(shù)屬性,諸如是否在容器失敗時(shí)重新啟動(dòng)容器的屬性
  replicas: 3
  #定義副本數(shù)量
  selector:
  #定義標(biāo)簽選擇器
    matchLabels:
    #定義匹配標(biāo)簽
      app: nginx
      #指定標(biāo)簽為nginx
      #需與后面的.spec.template.metadata.labels定義的標(biāo)簽保持一致
  template:
  #定義業(yè)務(wù)模板,如果有多個(gè)副本,所有副本的屬性會(huì)按照模板的相關(guān)配置進(jìn)行匹配
    metadata:
    #pod的元數(shù)據(jù)
      labels:
      #定義pod標(biāo)簽
        app: nginx
        #定義Pod副本將使用的標(biāo)簽,需與前面的.spec.selector.matchLabels定義的標(biāo)簽保持一致
    spec:
    #定義pod的規(guī)格
      containers:
      #定義容器屬性
      - name: nginx
        #定義一個(gè)容器名,一個(gè)-name:定義一個(gè)容器
        image: nginx:1.18
        #定義容器使用的鏡像以及版本
        ports:
        #定義容器對(duì)外的端口
        - containerPort: 80
          #定義容器內(nèi)部監(jiān)聽的端口號(hào)

4.2 創(chuàng)建資源對(duì)象

kubectl apply -f nginx-test.yaml
#創(chuàng)建資源對(duì)象

4.3 查看創(chuàng)建的pod資源

kubectl get pods -owide
#查看創(chuàng)建的pod資源

5、創(chuàng)建service服務(wù)對(duì)外提供訪問并測(cè)試

5.1 編寫nginx-svc-test.yaml

#編輯yaml文件
vim nginx-svc-test.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  namespace: luck
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
    #此處定義的selector要與deployment所定義的selector相同
    #service依靠標(biāo)簽選擇器來(lái)檢索提供服務(wù)的nodes

5.2 創(chuàng)建資源對(duì)象

kubectl apply -f nginx-svc-test.yaml
#創(chuàng)建資源對(duì)象

5.3 查看創(chuàng)建的service

kubectl get pod,svc -n luck
#查看創(chuàng)建的service資源

5.4 訪問測(cè)試

curl 192.168.10.12:30811
curl 192.168.10.13:30811
#驗(yàn)證訪問

#或者在瀏覽器輸入nodeIP:nodePort即可訪問

6、詳解k8s中的port

相關(guān)port說(shuō)明
portport是k8s集群內(nèi)部訪問service的端口,即通過clusterIP:port可以從Pod所在的Node上訪問到service
nodePortnodePort是外部訪問k8s集群中service的端口,通過nodeIP:nodePort可以從外部訪問到某個(gè)service
targetPorttargetPort是Pod的端口,從port或nodePort來(lái)的流量經(jīng)過kube-proxy反向代理負(fù)載均衡轉(zhuǎn)發(fā)到后端Pod的targetPort上,最后進(jìn)入容器。
containerPortcontainerPort是Pod內(nèi)部容器的端口,targetPort映射到containerPort。

7、試運(yùn)行生成yaml模板后創(chuàng)建實(shí)例

7.1 --dry-run:試運(yùn)行

  • kubectl run --dry-run打印相應(yīng)的API對(duì)象而不執(zhí)行創(chuàng)建
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run
#--dry-run不會(huì)實(shí)際創(chuàng)建任何資源,而是會(huì)輸出一個(gè) YAML 或 JSON 格式的資源配置,即并不會(huì)真的創(chuàng)建出pod和deployment實(shí)例,去掉該參數(shù)后即可真正執(zhí)行命令。

--------------------------------------------------------------------------------------------------------
dryrun-test:是創(chuàng)建的 Pod(或更具體地說(shuō)是 Deployment,因?yàn)槭褂昧?--replicas)的名稱。
--image=nginx:指定了 Pod 中容器的鏡像。
--port=80:通常用于指定容器內(nèi)的端口,但注意這個(gè)參數(shù)在 kubectl run 命令中可能不會(huì)直接設(shè)置容器的端口,而是需要額外的參數(shù)(如 --container-port)來(lái)明確指定。不過,在某些版本的 Kubernetes 中,--port 可能被解釋為容器端口。
--replicas=3:表示你想要?jiǎng)?chuàng)建一個(gè) Deployment,而不是單個(gè) Pod,并且該 Deployment 將確保有 3 個(gè) Pod 副本在運(yùn)行。
--dry-run:表示不會(huì)實(shí)際創(chuàng)建資源,而是輸出一個(gè)描述這些資源的 YAML 或 JSON 配置。
--------------------------------------------------------------------------------------------------------

kubectl get pod,deploy
#查看資源

7.2 查看生成yaml格式

  • 使用–dry-run試運(yùn)行可不觸發(fā)生成命令,然后通過-o yaml可實(shí)現(xiàn)對(duì)其yaml資源配置清單的查看
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml
#查看生成的yaml資源配置清單

7.3 查看生成json格式

  • 同理,可通過-o json查看該命令產(chǎn)生的json配置清單
kubectl run dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o json
#查看生成的json資源配置清單

7.4 yaml和json的主要區(qū)別

  • YAML使用空格縮進(jìn),這是Python開發(fā)人員熟悉的領(lǐng)域。

  • JavaScript開發(fā)人員喜歡JSON,因?yàn)樗荍avaScript的一個(gè)子集,可以直接在JavaScript中解釋和編寫,同時(shí)使用簡(jiǎn)寫方式聲明JSON,在使用沒有空格的典型變量名時(shí),不需要鍵中的雙引號(hào)。

  • 有很多解析器在YAML和JSON的所有語(yǔ)言中都能很好地工作。

  • 在許多情況下,YAML的空白格式可以更容易查看,因?yàn)楦袷交枰诵曰姆椒ā?/p>

  • 如果您的編輯器中沒有空格可見或縮進(jìn)線指示符,那么YAML的空白雖然更緊湊,更容易查看,但可能難以手動(dòng)編輯。

  • JSON的序列化和反序列化要快得多,因?yàn)橐獧z查的功能明顯少于YAML,這使得更小更輕的代碼能夠處理JSON。

  • 一個(gè)常見的誤解是YAML需要較少的標(biāo)點(diǎn)符號(hào)并且比JSON更緊湊,但這完全是錯(cuò)誤的??崭袷遣豢梢姷模钥雌饋?lái)字符較少,但是如果你計(jì)算實(shí)際的空格是必要的,以便正確解釋YAML以及正確的縮進(jìn),你會(huì)發(fā)現(xiàn)YAML實(shí)際上需要比JSON更多的字符。JSON不使用空格來(lái)表示層次結(jié)構(gòu)或分組,并且可以通過刪除不必要的空格來(lái)輕松展平,以實(shí)現(xiàn)更緊湊的傳輸。

7.5 使用yaml格式導(dǎo)出生成模板

kubectl run dryrun-test --image=nginx --port=80 --dry-run -o yaml > nginx.yaml
#使用yaml格式導(dǎo)出生成模板

7.6 刪除一些不必要的參數(shù)

#編輯yaml配置文件
vim nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  #刪除上面一行
  labels:
    run: dryrun-test
  name: dryrun-test
spec:
  containers:
  - image: nginx
    name: dryrun-test
    ports:
    - containerPort: 80
    resources: {}
    #刪除上面一行
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
#刪除上面一行

7.7 使用yaml模板創(chuàng)建實(shí)例

kubectl apply -f nginx.yaml
#使用yaml模板創(chuàng)建實(shí)例

kubectl get pod,deploy
#顯示pod資源信息

8、將現(xiàn)有資源生成yaml模板導(dǎo)出并保存為文件

8.1 將現(xiàn)有的資源生成模板導(dǎo)出

kubectl get svc
#顯示svc信息

kubectl get svc nginx-svc -o yaml
#將現(xiàn)有的資源生成模板導(dǎo)出

8.2 保存到文件中

kubectl get svc nginx-svc -o yaml > my-svc.yaml
#輸出到my-svc.yaml文件中

9、explain:查看字段幫助信息

  • 可一層層的查看相關(guān)資源對(duì)象的幫助信息
kubectl explain deployment.spec.template.spec.containers
#查看相關(guān)資源對(duì)象的幫助信息

kubectl explain pods.spec.containers
#查看相關(guān)資源對(duì)象的幫助信息

10、獲取資源配置清單的總結(jié)

kubectl run dryrun-test --image=nginx --port=80 --dry-run -o yaml > nginx.yaml
#沒有相關(guān)資源,使用run命令--dry-run選項(xiàng)

kubectl get svc nginx-svc -o yaml > my-svc.yaml
#已有相關(guān)資源,使用get命令導(dǎo)出

二、編寫MySQL的yaml文件

1、編寫文件

vim mysql.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: mysql-server
---
apiVersion: apps/v1
kind: Deployment
#mysql為動(dòng)態(tài)服務(wù)器,其pod控制器應(yīng)當(dāng)設(shè)置為StatefulSet,為便于理解基礎(chǔ),先設(shè)置為Deployment
metadata:
  labels:
    apps: mysql
  name: mysql-db
  namespace: mysql-server
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: mysql
  template:
    metadata:
      labels:
        apps: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:latest
        #使用MySQL的官方鏡像 
        ports:
        - containerPort: 3306
        env:
        #定義環(huán)境變量列表
        - name: MYSQL_ROOT_PASSWORD
        #環(huán)境變量的名稱
          value: password
          #設(shè)置MySQL的root密碼,也就是環(huán)境變量的值
          #當(dāng)MySQL容器首次啟動(dòng)時(shí),它會(huì)檢查數(shù)據(jù)庫(kù)是否已經(jīng)初始化,并且如果沒有提供密碼相關(guān)的環(huán)境變量,它會(huì)報(bào)錯(cuò)并退出
        volumeMounts:
        #定義如何掛載卷到容器中
        - name: mysql-test
        #引用的卷的名稱
          mountPath: /var/lib/mysql
          #卷在容器中的掛載路徑
      volumes:
      #定義Pod中使用的卷列表
      - name: mysql-test
      #卷的名稱,與volumeMounts中的name相對(duì)應(yīng)
        emptyDir: {}
        #一個(gè)空目錄卷。這種類型的卷在Pod首次被調(diào)度到節(jié)點(diǎn)上時(shí)創(chuàng)建,并在Pod被刪除時(shí)銷毀。它不持久化數(shù)據(jù),僅用于臨時(shí)存儲(chǔ)
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  namespace: mysql-server
  labels:
    apps: mysql
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    apps: mysql

2、生成資源

kubectl apply -f mysql.yaml
#指定yaml配置文件

kubectl get pod,svc -n mysql-server -owide
#查看詳細(xì)信息

3、訪問驗(yàn)證

  • 登錄mysql容器
kubectl exec -it mysql-db-557b9b7f5b-vjsnm -n mysql-server bash
#進(jìn)入mysql容器
     
root@mysql-db-557b9b7f5b-vjsnm:/# mysql -u root -p'password'    
#登錄mysql服務(wù)

mysql> show databases;
#查看數(shù)據(jù)庫(kù)信息

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于NetworkPolicy工作原理解讀

    關(guān)于NetworkPolicy工作原理解讀

    NetworkPolicy是Kubernetes中用于控制Pod間網(wǎng)絡(luò)流量的資源對(duì)象,依賴于支持NetworkPolicy的CNI插件來(lái)實(shí)現(xiàn)流量控制,它通過定義入口和出口規(guī)則來(lái)允許或拒絕Pod間的通信,實(shí)現(xiàn)網(wǎng)絡(luò)微分段,保障集群網(wǎng)絡(luò)安全,NetworkPolicy遵循“默認(rèn)拒絕,顯式允許”的原則
    2025-10-10
  • K8s學(xué)習(xí)之Pod的定義及詳細(xì)資源調(diào)用案例

    K8s學(xué)習(xí)之Pod的定義及詳細(xì)資源調(diào)用案例

    Kubernetes將所有內(nèi)容抽象為資源,通過操作資源管理集群,核心單元是Pod,通過控制器管理Pod,資源管理分為命令式對(duì)象管理、命令式對(duì)象配置和聲明式對(duì)象配置,各有適用場(chǎng)景,需要的朋友可以參考下
    2024-09-09
  • k8s跨服務(wù)調(diào)用入門到實(shí)戰(zhàn)示例詳解

    k8s跨服務(wù)調(diào)用入門到實(shí)戰(zhàn)示例詳解

    這篇文章主要為大家介紹了k8s跨服務(wù)調(diào)用入門到實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Kubernetes k8s configmap 容器技術(shù)解析

    Kubernetes k8s configmap 容器技術(shù)解析

    這篇文章主要為大家介紹了k8s configmap 容器技術(shù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 新版k8s拉取鏡像失敗問題解決辦法

    新版k8s拉取鏡像失敗問題解決辦法

    隨著Kubernetes?1.23版本的發(fā)布,Docker作為默認(rèn)容器運(yùn)行時(shí)被棄用,轉(zhuǎn)而默認(rèn)采用Containerd,這一改變意味著用戶在使用Kubernetes時(shí),將不再通過Docker來(lái)拉取鏡像,文中jiang,需要的朋友可以參考下
    2024-10-10
  • k8s使用rbd作為存儲(chǔ)的操作方法

    k8s使用rbd作為存儲(chǔ)的操作方法

    這篇文章主要介紹了k8s使用rbd作為存儲(chǔ)的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • k8s創(chuàng)建啟動(dòng)、刪除pod的實(shí)現(xiàn)過程

    k8s創(chuàng)建啟動(dòng)、刪除pod的實(shí)現(xiàn)過程

    Kubernetes中Pod是管理容器的最小單元,包括創(chuàng)建、管理和刪除過程,Pod狀態(tài)包括Pending、Running、Succeeded、Failed和Unknown
    2026-01-01
  • k8s編排之StatefulSet知識(shí)點(diǎn)詳解二

    k8s編排之StatefulSet知識(shí)點(diǎn)詳解二

    這篇文章主要為大家介紹了k8s編排之StatefulSet知識(shí)點(diǎn)的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • K8s-helm簡(jiǎn)介及基本概念詳解

    K8s-helm簡(jiǎn)介及基本概念詳解

    ?Helm?使用的包格式稱為?chart,它是一個(gè)描述?Kubernetes?相關(guān)資源對(duì)象的文件集合,這篇文章主要介紹了K8s-helm簡(jiǎn)介及基本概念,需要的朋友可以參考下
    2022-07-07
  • 一篇文章搞懂K8S高級(jí)特性

    一篇文章搞懂K8S高級(jí)特性

    這篇文章主要給大家介紹了關(guān)于K8S高級(jí)特性的相關(guān)資料,文中通過時(shí)實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

中牟县| 子洲县| 团风县| 兴宁市| 荆门市| 高碑店市| 星子县| 古蔺县| 鄂尔多斯市| 白朗县| 团风县| 布拖县| 高邑县| 舒兰市| 扬中市| 南通市| 四川省| 获嘉县| 泌阳县| 大悟县| 临清市| 政和县| 湘潭市| 赣榆县| 侯马市| 修文县| 沂南县| 肥城市| 怀安县| 平利县| 武威市| 璧山县| 徐水县| 德昌县| 平遥县| 北海市| 新巴尔虎右旗| 舒城县| 冕宁县| 富平县| 睢宁县|