自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes資源清單篇:如何創(chuàng)建資源?

開(kāi)發(fā) 前端
在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中所有操作的內(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ì)象,都需要通過(guò)資源清單的方式來(lái)部署,無(wú)論是通過(guò)命令kubectl,還是可視化控制臺(tái),都是離不開(kāi)資源清單的定義,本文重點(diǎn)講述資源清單如何定義、如何創(chuàng)建及使用。

[[353555]]

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(用來(lái)定義硬件資源限制的)。

一個(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中,一般都是通過(guò)定義資源清單的方式去創(chuàng)建資源。一般使用yaml格式的文件來(lái)創(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 

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

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ì)說(shuō)明如下表所示:(必選屬性,是必須存在的,否則創(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  <string> 
  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  <string> 
  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  <Object> 
  23.      Standard object's metadata. More info: 
  24.      https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata 
  25.  
  26.    spec  <Object> 
  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  <Object> 
  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 

查看屬性說(shuō)明,使用如下命令,如:查看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已存在,則無(wú)需再建)

命名空間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 

通過(guò)命令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 

 

責(zé)任編輯:華軒 來(lái)源: 程序猿技術(shù)大咖
相關(guān)推薦

2021-07-29 06:37:55

KubernetesKubeLinter工具

2022-03-24 08:04:50

Kubernetes資源限制

2024-11-15 08:30:23

2020-07-31 07:00:00

Kubernetes容器Linux

2020-09-09 07:00:00

Kubernetes集群容器

2021-01-12 15:19:23

Kubernetes

2022-06-27 10:25:55

Kubernetes調(diào)度CPU

2022-12-19 07:28:53

Kubernetes資源請(qǐng)求限制

2018-12-18 09:00:26

Kubernetes工作負(fù)載測(cè)試

2021-11-22 16:21:28

Kubernetes 運(yùn)維開(kāi)源

2021-12-26 18:23:10

Kubernetes集群命令

2018-11-23 21:01:03

RancherKubernetes金風(fēng)

2022-06-21 08:03:49

RBAC 限制容器

2015-09-08 10:28:52

數(shù)據(jù)中心資源清單

2022-09-07 15:57:41

KubernetesCRD

2021-05-25 09:00:00

Kubernetes容器集群

2020-09-01 08:06:54

Kubernetes資源

2025-04-29 10:00:00

Kubernete云原生Helm

2022-08-09 18:26:04

KubernetesLinux

2021-12-20 09:35:14

Kubernetes命令Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)