1. 程式人生 > 實用技巧 >k8s-yml檔案詳解

k8s-yml檔案詳解

Nginx 業務 yaml 檔案詳解:

cat /opt/linux-yml/nginx.yml

kind: Deployment #物件型別,是deployment控制器,kubectl explain Deployment
apiVersion: extensions/v1beta1  #指定這個物件屬於哪個api分組,它的API版本是多少,
								# kubectl explain Deployment.apiVersion
metadata:     #pod的元資料資訊,kubectl explain Deployment.metadata
  labels:     #自定義pod的標籤,kubectl explain Deployment.metadata.labels
    app: linux-nginx-deployment-label #標籤名稱為app值為linux-nginx-deployment-label, 後面會用到此標籤
  name: linux-nginx-deployment        #pod的名稱 
  namespace: linux-ns                 #把pod的建立到指定的namespace,預設是default
spec:            #定義deployment中容器的詳細資訊,kubectl explain Deployment.spec
  replicas: 1    #創建出的pod的副本數,即多少個pod,預設值為1 
  selector:      #定義標籤選擇器
    matchLabels: #定義匹配的標籤,必須要設定
      app: linux-nginx-selector   #匹配的目標標籤
  template:      #定義模板,必須定義,模板是起到描述要建立的pod的作用
    metadata:    #定義模板元資料
      labels:    #定義模板label,Deployment.spec.template.metadata.labels
        app: linux-nginx-selector   #定義標籤,必須等於 matchLabels 定義的標籤
    spec:          #定義pod資訊
      containers:  #定義pod中容器列表,可以多個至少一個,pod不能動態增減容器(想新新增容器,需要把原有pod刪除,重新建立pod)
      - name: linux-nginx-container                      #容器名稱
        image: harbor.linux.com/web-images/nginx:1.14.2  #映象地址
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]     #容器啟動執行的命令或指令碼           
        #imagePullPolicy: IfNotPresent                   #本地有指定的映象,就不去harbor中拉取
        imagePullPolicy: Always    #拉取映象策略;不管本地有沒有所指定的映象,都去harbor拉取
        ports:                #定義容器埠列表
        - containerPort: 80   #定義一個埠
          protocol: TCP       #埠協議,TCP或者UDP
          name: http          #埠名稱
        - containerPort: 443  #定義一個埠
          protocol: TCP       #埠協議 
          name: https         #埠名稱
        env:                  #給容器傳遞配置的環境變數
        - name: "password"    #變數名稱。必須要用引號引起來
          value: "123456"     #當前變數的值
        - name: "age"         #另一個變數名稱 
          value: "18"         #另一個變數的值
        resources:            #對容器資源的請求設定和限制設定
          limits:             #硬限制;限制容器使用宿主機資源上限
            cpu: 2            #cpu的限制,單位為core數,可以寫0.5或者500m(毫核)等CPU壓縮值,1000毫核
            memory: 2Gi       #記憶體限制,單位可以為Mib/Gib,將用於docker run --memory引數
          requests:  #資源請求的設定;當構建pod時,過濾出哪些node節點的剩餘資源符合下面所指定的值,則建立pod時,才有可能把pod往該node節點排程;如果不夠下面所指定的值,則建立pod時不會把pod往不符合要求的node上排程
            cpu: 1        #cpu請求數,容器啟動的初始可用數量,可以寫0.5或者500m等CPU壓縮值
            memory: 512Mi #記憶體請求大小,容器啟動的初始可用數量,用於排程pod時候使用

---
kind: Service    #物件型別為service;pod要想被外部訪問,就必須指定一個service,service會在宿主機開啟一個nodeport;service不指定nodeport,則該service僅限於k8s內部呼叫	     
apiVersion: v1   #service API版本,service.apiVersion 
metadata:        #定義service元資料,service.metadata
  labels:        #自定義service的標籤,service.metadata.labels
    app: linux-nginx     #定義service標籤的內容
  name: linux-nginx-spec #定義service的名稱,此名稱會被DNS解析
  namespace: linux-ns    #該service隸屬於的namespaces名稱,即把service建立到哪個namespace裡面,並且service必須與pod在同一個namespace中,否則在呼叫時,service找不到所呼叫的pod 
spec:               #定義service的詳細資訊,service.spec
  type: NodePort    #NodePort表示在宿主機開啟一個監聽埠;service的型別,定義服務的訪問方式,預設為ClusterIP(不會再宿主機開啟一個監聽埠,只為k8s內部提供服務),service.spec.type
  ports:            #定義訪問埠, service.spec.ports
  - name: http      #定義一個埠名稱
    port: 80        #service的埠 
    protocol: TCP   #協議型別;service是k8s內部的一個傳輸層的負載均衡 
    targetPort: 80  #目標pod的埠 
    nodePort: 30001 #node節點暴露的埠
  - name: https     #SSL 埠
    port: 443       #service 443埠 
    protocol: TCP   #埠協議 
    targetPort: 443 #目標pod埠 
    nodePort: 30043 #node節點暴露的SSL埠
  selector:   #service的標籤選擇器,定義把使用者請求轉發給指定label標籤的pod;service會把符合label標籤的pod新增到後端可被排程的endpoint列表中
    app: linux-nginx-selector #將流量轉發到指定的pod上,須等於Deployment.spec.selector.matchLabels

注意事項

提前建立好yml檔案,並建立好pod執行所需要的namespace的yml檔案等資源,一般建立namespace的操作,會單獨存放在一個yml檔案中

cat /opt/linux-yml/linux-ns.yml

apiVersion: v1     #API版本 
kind: Namespace    #型別為namespac 
metadata:          #定義元資料 
  name: linux-ns   #namespace名稱