Kubernets Yaml 編寫

1、定義pod的完整內容

# yaml格式的pod定義文件完整內容:
apiVersion: v1                  #必選,版本號,例如v1
kind: Pod                       #必選,Pod
metadata:                       #必選,元數據
  name: string                  #必選,Pod名稱
  namespace: string             #必選,Pod所屬的命名空間
  labels:                       #自定義標籤
    - name: string              #自定義標籤名字
  annotations:                  #自定義註釋列表
    - name: string
spec:                           #必選,Pod中容器的詳細定義
  containers:                   #必選,Pod中容器列表
  - name: string                #必選,容器名稱
    image: string               #必選,容器的鏡像名稱
    imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像
                                #IfnotPresent表示優先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
    command: [string]           #容器的啓動命令列表,如不指定,使用打包時使用的啓動命令
    args: [string]              #容器的啓動命令參數列表
    workingDir: string          #容器的工作目錄
    volumeMounts:               #掛載到容器內部的存儲卷配置
    - name: string              #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名
      mountPath: string         #存儲卷在容器內mount的絕對路徑,應少於512字符
      readOnly: boolean         #是否爲只讀模式
    ports:                      #需要暴露的端口庫號列表
    - name: string              #端口號名稱
      containerPort: int        #容器需要監聽的端口號
      hostPort: int             #容器所在主機需要監聽的端口號,默認與Container相同
      protocol: string          #端口協議,支持TCP和UDP,默認TCP
    env:                        #容器運行前需設置的環境變量列表
    - name: string              #環境變量名稱
      value: string             #環境變量的值
    resources:                  #資源限制和請求的設置
      limits:                   #資源限制的設置
        cpu: string             #Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數
        memory: string          #內存限制,單位可以爲Mib/Gib,將用於docker run --memory參數
      requests:                 #資源請求的設置
        cpu: string             #Cpu請求,容器啓動的初始可用數量
        memory: string          #內存清楚,容器啓動的初始可用數量
    livenessProbe:              #對Pod內個容器健康檢查的設置,當探測無響應幾次後將自動重啓該容器,
                                #檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法即可
      exec:                     #對Pod容器內檢查方式設置爲exec方式
        command: [string]       #exec方式需要制定的命令或腳本
      httpGet:                  #對Pod內個容器健康檢查方法設置爲HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:                #對Pod內個容器健康檢查方式設置爲tcpSocket方式
         port: number
       initialDelaySeconds: 0   #容器啓動完成後首次探測的時間,單位爲秒
       timeoutSeconds: 0        #對容器健康檢查探測等待響應的超時時間,單位秒,默認1秒
       periodSeconds: 0         #對容器監控檢查的定期探測時間設置,單位秒,默認10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure]#Pod的重啓策略,Always表示一旦不管以何種方式終止運行,
                               #kubelet都將重啓,OnFailure表示只有Pod以非0退出碼退出才重啓,Nerver表示不再重啓該Pod
    nodeSelector: obeject      #設置NodeSelector表示將該Pod調度到包含這個label的node上,以key:value的格式指定
    imagePullSecrets:          #Pull鏡像時使用的secret名稱,以key:secretkey格式指定
    - name: string
    hostNetwork:false          #是否使用主機網絡模式,默認爲false,如果設置爲true,表示使用宿主機網絡
    volumes:                   #在該pod上定義共享存儲卷列表
    - name: string             #共享存儲卷名稱 (volumes類型有很多種)
      emptyDir: {}             #類型爲emtyDir的存儲卷,與Pod同生命週期的一個臨時目錄。爲空值
      hostPath: string         #類型爲hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
        path: string           #Pod所在宿主機的目錄,將被用於同期中mount的目錄
      secret:                  #類型爲secret的存儲卷,掛載集羣與定義的secre對象到容器內部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:               #類型爲configMap的存儲卷,掛載預定義的configMap對象到容器內部
        name: string
        items:
        - key: string
          path: string

通過 查看apiVersion

kubectl api-version
kubectl get namespace

2、創建deployment,一般通過deployment 來創建pod

#test-pod 
apiVersion: v1                       #指定api版本,此值必須在kubectl apiversion中   
kind: Deployment                     #指定創建資源的角色/類型   
metadata:                            #資源的元數據/屬性   
  name: test-pod                     #資源的名字,在同一個namespace中必須唯一   
  labels:                             #設定資源的標籤 
    k8s-app: apache   
    version: v1   
    kubernetes.io/cluster-service: "true"   
  annotations:            #自定義註解列表   
    - name: String        #自定義註解名字   
spec: #specification of the resource content 指定該資源的內容   
  restartPolicy: Always #表明該容器一直運行,默認k8s的策略,在此容器退出後,會立即創建一個相同的容器   
  nodeSelector:     #節點選擇,先給主機打標籤kubectl label nodes kube-node1 zone=node1   
    zone: node1   
  containers:   
  - name: test-pod #容器的名字   
    image: 10.192.21.18:5000/rjh/client:latest #容器使用的鏡像地址   
    imagePullPolicy: Never #三個選擇Always、Never、IfNotPresent,每次啓動時檢查和更新(從registery)images的策略, 
                           # Always,每次都檢查 
                           # Never,每次都不檢查(不管本地是否有) 
                           # IfNotPresent,如果本地有就不檢查,如果沒有就拉取 
    command: ['sh'] #啓動容器的運行命令,將覆蓋容器中的Entrypoint,對應Dockefile中的ENTRYPOINT   
    args: ["$(str)"] #啓動容器的命令參數,對應Dockerfile中CMD參數   
    env: #指定容器中的環境變量   
    - name: str #變量的名字   
      value: "/etc/run.sh" #變量的值   
    resources: #資源管理 
      requests: #容器運行時,最低資源需求,也就是說最少需要多少資源容器才能正常運行   
        cpu: 0.1 #CPU資源(核數),兩種方式,浮點數或者是整數+m,0.1=100m,最少值爲0.001核(1m) 
        memory: 32Mi #內存使用量   
      limits: #資源限制   
        cpu: 0.5   
        memory: 1000Mi   
    ports:   
    - containerPort: 80 #容器開發對外的端口 
      name: httpd  #名稱 
      protocol: TCP   
    livenessProbe: #pod內容器健康檢查的設置 
      httpGet: #通過httpget檢查健康,返回200-399之間,則認爲容器正常   
        path: / #URI地址   
        port: 80   
        #host: 127.0.0.1 #主機地址   
        scheme: HTTP   
      initialDelaySeconds: 180 #表明第一次檢測在容器啓動後多長時間後開始   
      timeoutSeconds: 5 #檢測的超時時間   
      periodSeconds: 15  #檢查間隔時間   
      #也可以用這種方法   
      #exec: 執行命令的方法進行監測,如果其退出碼不爲0,則認爲容器正常   
      #  command:   
      #    - cat   
      #    - /tmp/health   
      #也可以用這種方法   
      #tcpSocket: //通過tcpSocket檢查健康    
      #  port: number    
    lifecycle: #生命週期管理   
      postStart: #容器運行之前運行的任務   
        exec:   
          command:   
            - 'sh'   
            - 'yum upgrade -y'   
      preStop:#容器關閉之前運行的任務   
        exec:   
          command: ['service httpd stop']   
    volumeMounts:  #掛載持久存儲卷 
    - name: volume #掛載設備的名字,與volumes[*].name 需要對應     
      mountPath: /data #掛載到容器的某個路徑下   
      readOnly: True   
  volumes: #定義一組掛載設備   
  - name: volume #定義一個掛載設備的名字   
    #meptyDir: {}   
    hostPath:   
      path: /opt #掛載設備類型爲hostPath,路徑爲宿主機下的/opt,這裏設備類型支持很多種 
    #nfs

Deployment 管理的是replicaset-controller,RC會創建Pod。Pod自身會下載鏡像並啓動鏡像

3、service 完整文件

apiVersion: v1
kind: Service
matadata:
  name: string
  namespace: string
  labels:
    - name: string
  annotations:
    - name: string
spec:
  selector: [] #必須,將具有指定Label標籤的Pod作爲管理範圍,與deployment的selector.matchLabels對應
  type: string # 指定Service的訪問方式,默認爲ClusterIP, ClusterIP:虛擬的服務IP地址,該地址用於Kubernets集羣內部的
               # Pod訪問,在Node上Kuber-proxy通過設置的iptables規則進行轉發
               # NodePort: 使用宿主機的端口,使能夠訪問各Node的外部客戶端通過Node的IP地址和端口號就能訪問服務
               # LoadBalancer: 使用外部負載均衡器完成到服務的負載分發,需要在spec.status.loadBalancer 字段指定外部負
               # 載均衡器的IP地址,並同時定義nodePort和clusterIP
  clusterIP: string #當type=clusterIP時,如果不指定,則系統自動分配,也可以指定。當type=LoadBalancer時,需要指定
  sessionAffinity: string #是否支持Session, 可選值爲clientIP,默認爲空,ClientIP:表示將一個客戶端
                          #(根據客戶端的IP地址決定)的訪問請求都轉發到同一個後端端口
  ports:                  #service 需要暴露的端口列表
  - name: string         
    protocol: string      #端口協議 支持TCP和UDP
    port: int             #端口號
    targetPort: int       #需要轉發到後端Pod的端口號
    nodePort: int         #當spec.type=NodePort時,指定映射到物理機的端口號
  status:                 #當scpe.type=LoadBalancer時,設置外部負載均衡器的地址,用於公有云環境
    loadBalancer:
      ingress:
        ip: string
        hostname: string  #均衡器的主機名

Service 中,NodePort,targetPort,Port三個關係很緊密,而且很難區分,先看下圖

外部客戶端通過指定的負載均衡器,130.211.53.173:80 訪問kubernets 集羣,通過Nodeport:32143 訪問到服務port,服務再去訪問容器暴露出來的targetPort :8080

 

4、實踐

apiVersion: v1
kind: ConfigMap
metadata:
  name: rjh-configmap
  namespace: default
data:
  test: rjh-server
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test
  namespace: default
  labels:
    app: rjh-client
spec:
  replicas: 1
  selector:
    matchLabels:
      app:rjh-client
    spec:
      containers:
      - name: coredns
        image: coredns/coredns:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 53
          name: client
          protocol: TCP
        resources: #資源管理 
          requests: #容器運行時,最低資源需求,也就是說最少需要多少資源容器才能正常運行   
            cpu: 0.1 #CPU資源(核數),兩種方式,浮點數或者是整數+m,0.1=100m,最少值爲0.001核(1m) 
            memory: 32Mi #內存使用量   
          limits: #資源限制   
            cpu: 0.5   
            memory: 1000Mi   
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
      dnsPolicy: Default
      volumes:
        - name: config-volume
          configMap:
            name: test
            items:
            - key: rjh-configmap
              path:    #待考證
---
#內部使用服務
apiVersion: v1
kind: Service
metadata:
  name: rjh-service
  namespace: default
  labels:
    app:rjh-client
spec:
  selector:
   app:client
  type: ClusterIP
  ports:
  #coreDNS 支持TCP、UDP、HTTP、TTL四種協議
  - name: ownservice
    port: 53
    protocol: TCP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章