日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Kubernetes資源清單篇:如何創(chuàng)建資源?

 在Kubernetes中所有操作的內(nèi)容,我們都稱為“資源對(duì)象”,是由API Server基于HTTP/HTTPS接收并響應(yīng)客戶端的操作請(qǐng)求,是一種Restful風(fēng)格的接口,將各種組件及操作內(nèi)容都抽象成為標(biāo)準(zhǔn)的REST資源,如Namespace、Pod等,其中操作內(nèi)容以JSON或yml格式數(shù)據(jù)進(jìn)行操作。本文講解的是Kubernetes中的最為重要的一節(jié)——資源清單,我們想要在Kubernetes中部署Pod、Service等資源對(duì)象,都需要通過資源清單的方式來部署,無論是通過命令kubectl,還是可視化控制臺(tái),都是離不開資源清單的定義,本文重點(diǎn)講述資源清單如何定義、如何創(chuàng)建及使用。

1、資源分類

根據(jù)資源的功能進(jìn)行資源分類,Kubernetes資源對(duì)象可分為:

  • 工作負(fù)載(Workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob。
  • 發(fā)現(xiàn)和負(fù)載均衡(Discovery & LB):Service 、Ingress。
  • 配置和存儲(chǔ)(Config & Storage):Volume(存儲(chǔ)卷)、CSI(容器存儲(chǔ)接口,可以擴(kuò)展各種各樣的第三方存儲(chǔ)卷)。
  • 集群(Cluster):Namespace、Node、Role、ClusterRole、RoleBinding(角色綁定)、ClusterRoleBinding(集群角色綁定)。
  • 元數(shù)據(jù)(Metadata):HPA、PodTemplate(Pod模板,用于讓控制器創(chuàng)建Pod時(shí)使用的模板)、LimitRange(用來定義硬件資源限制的)。

一個(gè)應(yīng)用通常需要多個(gè)資源的支撐,例如,使用Deployment資源管理應(yīng)用實(shí)例(Pod)、使用ConfigMap資源保存應(yīng)用配置、使用Service或Ingress資源暴露服務(wù)、使用Volume資源提供外部存儲(chǔ)等。

2.資源清單

資源清單,等同于一個(gè)劇本,能夠告訴我們每一步應(yīng)該怎么去做,Kubernetes接收到這么一個(gè)劇本,就能夠按照這個(gè)劇本去執(zhí)行,以達(dá)到我們的預(yù)期。在Kubernetes中,一般都是通過定義資源清單的方式去創(chuàng)建資源。一般使用yaml格式的文件來創(chuàng)建符合我們預(yù)期期望的資源,這樣的yaml文件我們稱為資源清單。(也可以定義為json格式)如,創(chuàng)建一個(gè)Pod資源:

 
 
 
 
  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: vue-frontend 
  5.   namespace: test 
  6.   labels: 
  7.     app: vue-frontend 
  8. spec: 
  9.   containers: 
  10.   - name: vue-frontend 
  11.     image: xcbeyond/vue-frontend:latest 
  12.     ports: 
  13.       - name: port 
  14.         containerPort: 80 
  15.         hostPort: 8080 

接下來,以Pod資源定義為例展開對(duì)資源清單的詳細(xì)說明。

2.1 資源清單定義

yaml格式的Pod資源清單定義文件的完整內(nèi)容如下:

 
 
 
 
  1. apiVersion: v1 
  2. kind: Pod    # 資源類別 
  3. metadata:    # 資源元數(shù)據(jù) 
  4.   name: string 
  5.   namespace: string 
  6.   labels: 
  7.     - name: string 
  8.   annotations: 
  9.     - name: string 
  10. spec:      # 資源期望的狀態(tài) 
  11.   containers:    # 容器列表 
  12.     - name: string    # 容器名稱,下面的屬性均屬于對(duì)該容器的定義或約束 
  13.       image: string 
  14.         imagePullPolicy: [Always|Never|IfNotPresent] 
  15.       command: [string] 
  16.       args: [string] 
  17.       workingDir: string 
  18.       volumeMounts: 
  19.         - name: string 
  20.           mountPath: string 
  21.           readOnly: boolean 
  22.       ports: 
  23.         - name: string 
  24.           containerPort: int 
  25.           hostPort: int 
  26.           protocol: string 
  27.       env: 
  28.         - name: string 
  29.           value: string 
  30.       resources: 
  31.         limits: 
  32.           cpu: string 
  33.           memory: string 
  34.         requests: 
  35.           cpu: string 
  36.           memory: string 
  37.       livenssProbe: 
  38.         exec: 
  39.           command: [string] 
  40.         httpGet: 
  41.           path: string 
  42.           port: number 
  43.           host: string 
  44.           scheme: string 
  45.           httpHeaders: 
  46.             - name: string 
  47.               value: string 
  48.           tcpSocket: 
  49.             port: number 
  50.           initialDelaySeconds: 0 
  51.           timeoutSeconds: 0 
  52.           periodSeconds: 0 
  53.           successThreshold: 0 
  54.           failureThreshold: 0 
  55. ……  

對(duì)各屬性的詳細(xì)說明如下表所示:(必選屬性,是必須存在的,否則創(chuàng)建失敗。)

上述列舉的是常用的屬性,如果想查看全部屬性,可以使用命令kubectl explain pod:

 
 
 
 
  1. [xcbeyond@bogon ~]$ kubectl explain pod 
  2. KIND:     Pod 
  3. VERSION:  v1 
  4.  
  5. DESCRIPTION: 
  6.      Pod is a collection of containers that can run on a host. This resource is 
  7.      created by clients and scheduled onto hosts. 
  8.  
  9. FIELDS: 
  10.    apiVersion   
  11.      APIVersion defines the versioned schema of this representation of an 
  12.      object. Servers should convert recognized schemas to the latest internal 
  13.      value, and may reject unrecognized values. More info: 
  14.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources 
  15.  
  16.    kind   
  17.      Kind is a string value representing the REST resource this object 
  18.      represents. Servers may infer this from the endpoint the client submits 
  19.      requests to. Cannot be updated. In CamelCase. More info: 
  20.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 
  21.  
  22.    metadata   
  23.      Standard object's metadata. More info: 
  24.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata 
  25.  
  26.    spec   
  27.      Specification of the desired behavior of the pod. More info: 
  28.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status 
  29.  
  30.    status   
  31.      Most recently observed status of the pod. This data may not be up to date. 
  32.      Populated by the system. Read-only. More info: 
  33.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status 
  34. 查看屬性說明,使用如下命令,如:查看pod.spec.containers

     
     
     
     
    1. [xcbeyond@bogon ~]$ kubectl explain pod.spec.containers 
    2. KIND:     Pod 
    3. VERSION:  v1 
    4.  
    5. RESOURCE: containers <[]Object> 
    6.  
    7. DESCRIPTION: 
    8.      List of containers belonging to the pod. Containers cannot currently be 
    9.      added or removed. There must be at least one container in a Pod. Cannot be 
    10.      updated. 
    11.  
    12.      A single application container that you want to run within a pod. 
    13.  
    14. FIELDS: 
    15.    args  <[]string> 
    16.      Arguments to the entrypoint. The docker image's CMD is used if this is not 
    17.      provided. Variable references $(VAR_NAME) are expanded using the 
    18.      container's environment. If a variable cannot be resolved, the reference in 
    19.      the input string will be unchanged. The $(VAR_NAME) syntax can be escaped 
    20.      with a double $$, ie: $$(VAR_NAME). Escaped references will never be 
    21.      expanded, regardless of whether the variable exists or not. Cannot be 
    22.      updated. More info: 
    23.      https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell 
    24.  
    25.    command  <[]string> 
    26.      Entrypoint array. Not executed within a shell. The docker image's 
    27.      ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) 
    28.      are expanded using the container's environment. If a variable cannot be 
    29.      resolved, the reference in the input string will be unchanged. The 
    30.      $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). 
    31.      Escaped references will never be expanded, regardless of whether the 
    32.      variable exists or not. Cannot be updated. More info: 
    33.      https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell 
    34. …… 

    2.2 示例

    在命名空間test中,定義一個(gè)名為frontend的Pod。

    (1)定義命名空間

    為了便于后期測(cè)試,特定義一個(gè)新的命名空間test。(如果命名空間test已存在,則無需再建)

    命名空間test的資源清單文件test-namespace.yaml如下:

     
     
     
     
    1. apiVersion: v1 
    2. kind: Namespace 
    3. metadata:    
    4.   name: test 

    執(zhí)行kubectl create命令創(chuàng)建該Namespace:

     
     
     
     
    1. [xcbeyond@bogon ~]$ kubectl create -f test-namespace.yaml  
    2. namespace/test created 

    (2)定義Pod

    定義一個(gè)名為frontend的Pod,由一個(gè)容器組成,資源清單文件frontend-pod.yaml如下:

     
     
     
     
    1. apiVersion: v1 
    2. kind: Pod 
    3. metadata: 
    4.   name: frontend 
    5.   namespace: test 
    6.   labels: 
    7.     app: frontend 
    8. spec: 
    9.   containers: 
    10.   - name: frontend 
    11.     image: xcbeyond/vue-frontend:latest 
    12.     ports: 
    13.       - name: port 
    14.         containerPort: 80 
    15.         hostPort: 8080 

    執(zhí)行kubectl create命令創(chuàng)建該P(yáng)od:

     
     
     
     
    1. [xcbeyond@bogon ~]$ kubectl create -f frontend-pod.yaml  
    2. pod/frontend created 

    通過命令kubectl get pods -n 查看,創(chuàng)建Pod的狀態(tài):

     
     
     
     
    1. [xcbeyond@bogon ~]$ kubectl get pods -n test 
    2. NAME       READY   STATUS   RESTARTS   AGE 
    3. frontend   1/1     Runing   0          79s 

    本文題目:Kubernetes資源清單篇:如何創(chuàng)建資源?
    本文地址:http://m.5511xx.com/article/djooegg.html