kubernetes(k8s)使用聲明式管理與 創建yaml模板文件


kubectl 使用 聲明式管理(yaml文件)

一:聲明式管理方法

1.1 什么是聲明式管理

聲明式管理方法:

  • 適合於對資源的修改操作
  • 聲明式資源管理方法依賴於資源配置清單文件對資源進行管理
    • 資源配置清單文件有兩種格式: yaml (人性化,易讀) , json (易於api接口解析)
  • 對資源的管理,是通過事先定義在統一資源配置清單內,再通過陳述式命令應用到k8s集群里
  • 語法格式: kubectl  create/apply/delete  -f  xxxx. yaml



1.2 查看資源配置

1.2.1 查看資源配置清單

#將資源配置輸出為yaml 格式
kubectl -n kube-public  get deployments.apps nginx -o yaml

image-20211103150548246



1.2 使用explain 解釋資源配置清單

#查看deployment資源配置里字段解釋(只能看到第一層的字段)
kubectl explain -n kube-public deployment

#查看deployment里的metadata字段解釋
kubectl explain -n kube-public deployment.metadata

#查看service 資源配置里的第一層字段解釋
kubectl explain -n kube-public  service

#查看service配置里,metadata字段的解釋
kubectl explain -n kube-public service.metadata

image-20211103151841909

image-20211103152011610



1.3 修改資源配置清單並應用

1.3.1 離線修改

離線修改:

修改yaml 文件,並用 kubectl apply -f xxx.yaml 文件使之生效。

注意:當apply 不生效時,先使用delete 清除資源,在apply 創建資源


create 和 apply 的區別

  • 都可以使用 kubectl create/apply -f xxx.yaml 創建資源
  • create:只能用於創建,不能apply更新。 如果要更新需要先delete 刪除資源,在create/apply創建 新的
  • apply:可以創建,也可以直接更新
#將service 資源配置以yaml格式顯示,導入到nginx-svc.yaml里
kubectl -n kube-public get service nginx-service -o yaml > nginx-svc.yaml

#修改yaml 文件,將port 項值修改為8080
vim nginx-svc.yaml

#先使用聲明式方式刪除
kubectl delete -f nginx-svc.yaml

#指定yaml文件,使用聲明式方式創建service
kubectl apply -f nginx-svc.yaml

#再次查看,端口變為了8080
kubectl get svc -n kube-public

image-20211103154828261

image-20211103155213673


1.3.2 在線修改

直接使用kubectl edit service nginx在線編輯資源配置清單,並保存退出。保存退出后立即生效(如port:888)

此修改方式不會對yaml 文件內容修改

#使用kubect edit 在線修改 資源
kubectl edit -n kube-public service

#將port 值修改為888,並保存退出


kubectl get svc -n kube-public 

image-20211103155801409

image-20211103155935615



1.4 刪除資源配置清單

1.4.1 陳述式刪除

#陳述式刪除
kubectl -n kube-public delete service nginx-service

1.4.2 聲明式刪除

#指定yaml 文件,聲明式刪除
kubectl delete -f nginx-svc.yaml 



二:使用YALML 管理資源對象

2.1 k8s 的yaml 

Kubernetes支持YAML和JSON格式管理資源對象

  • JSON格式:主要用於api接口之間消息的傳遞

  • YAMI格式:用於配置和管理, YAML是一種簡潔的非標記性語言,內容格式人性化,較易讀

YAML語法格式:

  • 大小寫敏感使用縮進表示層級關系
  • 不支持Tab鍵制表符縮進,只使用空格縮進
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可,通常開頭縮進兩個空格
  • 符號字符后縮進一個空格,如冒號,逗號,短橫桿(-)等
  • "---"表示YAMI格式,一個文件的開始,用於分隔文件
  • "#"表示注釋

2.2 查看api 資源版本標簽

# 查看api 的版本,不同的k8s版本,支持的api version不同
kubectl api-versions 

image-20211103161042800



2.3 編寫yaml 文件

[root@master ~]# mkdir /opt/demo
[root@master ~]# cd /opt/demo/
[root@master demo]# vim nginx-deploymenet.yaml
apiVersion: apps/v1        #指定api版本標簽
kind: Deployment         #定義資源的類型。可以是Deployment,Job,Ingress,Service等
metadata:               #定義資源的元數據信息,比如資源的名稱,namespace,標簽等信息
  name: nginx-deployment  #定義資源的名稱,在同一個namespace空間中必須是唯一的
  namespace: default     #定義命名空間
  labels:                #定義Deployment資源標簽
    app: nginx

spec:               #定義deployment資源需要的參數屬性,如,是否在容器失敗時重啟容器的屬性
  replicas: 3       #定義副本的數量
  selector:         #定義標簽選擇器
    matchLabels:    #定義匹配的標簽
      app: nginx    #需要與.spec.template.metadata.labels定義的標簽保持一致
  template:         #定義 業務模板,如果有多個副本,所有的副本屬性會按照模板的相關配置進行匹配
    metadata:       #定義pod使用的元信息      
      labels:       #定義Pod副本將使用的標簽,需要與.spec.selector.matchLabels 定義的標簽保持一致
        app: nginx 
    spec:           #定義pod副本的屬性(如pod里有幾個容器,容器名,容器鏡像,端口等) 
      containers:                #定義容器屬性
        - name: nginx            #容器的名稱
          image: nginx:1.15.12   #容器使用的鏡像
          ports:                 #定義容器使用的端口
            - containerPort: 80  #容器使用80端口
          ports: 
            - containerPort: 80



2.4 使用yaml 文件創建資源對象

#創建資源對象
kubectl create -f nginx-deploymenet.yaml

#查看pod的信息
kubectl get pods -o wide

#查看pod使用的標簽
kubectl get pods --show-labels 

image-20211103171146500

image-20211103171501274



2.5 使用service 服務對外提供訪問並測試

2.5.1 創建service資源的yaml文件

vim nginx-service.yaml
apiVersion: v1
kind: Service              #定義資源類型為Service
metadata:                  #定義Service的元信息
  name: nginx-service      #定義service的名稱
  namespace: default       #定義service的命名空間(和deployment在一個空間)
  labels:                  #定義service的標簽
    app: nginx

spec:                      #設置service的屬性
  type: NodePort           #指定service的類型,使用NodePort。
  ports:                   #指定端口,一個容器里的服務,對應一個端口。有幾個服務,就創建幾組
    - port: 8888           #指定ClusterIP 使用的端口
      targetPort: 80       #指定pod使用的端口
      nodePort: 31234      #如不指定,會在30000-32767 隨機分配 
  selector:                #使用標簽選擇器去選擇和對應的pod進行關聯
    app: nginx


2.5.2創建資源對象

#創建資源對象
kubectl create -f nginx-service.yaml

#查看svc資源
kubectl  get svc

image-20211103181449574

image-20211103181557573

2.5.3 訪問測試

curl -I http://192.168.23.12:31234
curl -I http://192.168.23.13:31234

image-20211103181827554



2.6 詳解k8s中port

  • port

    • 是k8s集群內部訪問service的端口,即通過clusterIP: port可以從Pod所在的Node上訪問到service.
  • nodePort

    • nodePort是外部訪問k8s集群中service的端口,通過nodelP: nodePort可以從外部訪問到某個service4
  • targetPort

    • targetport是Pod的端口,從port或nodeport來的流量經過kube-proxy反向代理負載均衡轉發到后端Pod的targetPort上,最后進入容器。
  • containerPort

    • containerPort是Pod內部容器的端口, targetPort映射到containerPort.

img



三: 創建模板

3.1 使用--dry-run 試運行的方式生成模板,創建資源

3.1.1 生成模板

#kubectl run --dry-run 打印相應的API對象而不執行創建
kubectl  run nginx-test --image=nginx --port=80 --replicas=3 --dry-run

#查看,並沒有生成相應的pod
kubectl get pods

image-20211103183802538


#查看生成的yaml 格式
kubectl  run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml
#查看生成的json格式
kubectl  run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o json

#使用yaml 格式導出生成模板,並進行修改,刪除一些不必要的參數
kubectl  run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml > nginx-test.yaml

image-20211103184204501


3.1.2 修改模板

vim nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx-test
  name: nginx-test
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx-test
  template:
    metadata:
      labels:
        run: nginx-test
    spec:
      containers:
      - image: nginx
        name: nginx-test
        ports:
        - containerPort: 80


3.1.3 根據生成的模板創建資源

#根據模板創建資源
kubectl apply -f nginx-test.yaml

kubectl get pods

image-20211103184847834



3.2 使用現有的資源生成模板導出

3.2.1 生成模板

#將現有的資源生成模板導出。 --export 可以刪除一些多余的配置
kubectl get deployments.apps nginx-deployment  --export -o yaml

#將模板保存到文件中
kubectl get deployments.apps nginx-deployment  --export -o yaml  > my-deploy.yaml

image-20211103185345091


3.2.2 修改模板

vim my-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: my-deploy
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: mydeploy-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: mydeploy-nginx 
    spec:
      containers:
      - image: nginx:1.15.12
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler


3.2.3 根據模板生成資源

#根據模板生成資源
kubectl apply -f my-deploy.yaml

#查看生成的deployment 信息
kubectl get deployments.apps my-deploy

image-20211103190700527


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM