亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s之Labels,Daemonset,Job資源對象

發布時間:2020-05-27 11:57:47 來源:網絡 閱讀:829 作者:wx5b9c94b17c62a 欄目:云計算

Label(標簽)

我們為什么要使用label呢?
當相同類型的資源對象越來越多,為了更好的管理,才按照標簽分為一個小組,為的是提升資源的管理效率。

lable是附著到object上(例如pod)的鍵值對。可以在創建object的時候指定,也可以在object創建后隨時指定。Labels的值對系統本身并沒有什么含義,只是對用戶才有意義。

"labels": {
"key1" : "value1",
"key2" : "value2"
}

語法和字符集

Label key的組成:
* 不得超過63個字符
* 可以使用前綴,使用/分隔,前綴必須是DNS子域,不得超過253個字符,系統中的自動化組件創建的label必須指定前綴,kubernetes.io/ 由kubernetes保留。
* 起始必須是字母(大小寫都可以)或數字,中間可以有連字符,下劃線和點。
Label value的組成:
不得超過63個字符
起始必須是字母(大小寫都可以)或數字,中間可以有連字符,下劃線和點。

常用的,多維度標簽分類:

版本標簽(release):      stable(穩定版),canary(金絲雀版本),beta(測試版)
環境類(environment):   dev(開發),qa(測試),production(生產),op(運維)
應用類(applaction):        ui(設計),as(應用軟件),pc(電腦端),sc(網絡方面)
架構層(tier):          frontend(前端),backend(后端),cache(緩存)
分區標簽(partition):        customerA(客戶),customerB
品控級別(track):        daily(每天),weekly(每周)

通過以下例子來實踐label:

[root@master yaml]# vim label-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: label-pod
  labels:       #使用labels字段來定義標簽,可以一次定義多個標簽,這里定義3個標簽
    release: stable   #版本:穩定版
    env: qa              #環境:測試
    tier: frontend   #架構類:前端
spec:
  containers:
  - name: testapp
    image: nginx    #部署的是nginx服務
---
kind: Service   #關聯一個service資源對象
apiVersion: v1
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:   #使用標簽選擇器
    release: stable   #只需定義selector字段中的一個標簽,字段下的其他標簽可全部實現關聯。
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32134
[root@master yaml]# kubectl apply -f  label-pod.yaml 
pod/label-pod created
service/nginx-svc unchanged
//查看所有pod,并且顯示標簽key:value:
[root@master yaml]# kubectl  get pod --show-labels 
NAME        READY   STATUS    RESTARTS   AGE   LABELS
label-pod   1/1     Running   0          30m   env=qa,release=stable,tier=frontend

//查看指定pod的key:value:

[root@master yaml]# kubectl  get pod label-pod  --show-labels 
NAME        READY   STATUS    RESTARTS   AGE   LABELS
label-pod   1/1     Running   0          40m   app=as,env=qa,release=stable,tier=frontend

//只顯示標簽的value:

[root@master yaml]# kubectl  get pod label-pod -L env,release,tier
NAME        READY   STATUS    RESTARTS   AGE   ENV   RELEASE   TIER
label-pod   1/1     Running   0          41m   qa    stable    frontend

label的其他操作(命令行):添加,修改,刪除標簽
//通過命令行的方式添加標簽:

[root@master yaml]# kubectl  label  pod label-pod  app=sc
pod/label-pod labeled
[root@master yaml]# kubectl  get pod -L app
NAME        READY   STATUS    RESTARTS   AGE   APP
label-pod   1/1     Running   0          36m   sc

//修改標簽:

[root@master yaml]# kubectl  label pod label-pod app=as
error: 'app' already has a value (sc), and --overwrite is false
[root@master yaml]# kubectl  label pod label-pod app=as --overwrite 
pod/label-pod labeled

可以看到想要修改標簽,必須加上--overwrite選項進行重寫。

//刪除標簽:

[root@master yaml]# kubectl  label pod label-pod app-
pod/label-pod labeled
[root@master yaml]# kubectl  get pod -L app
NAME        READY   STATUS    RESTARTS   AGE   APP
label-pod   1/1     Running   0          43m                     #可以看到該標簽以被刪除

//我們測試nginx服務是否能夠正常運行:
k8s之Labels,Daemonset,Job資源對象

Label selector

標簽選擇器:標簽的查詢過濾條件。
Label不是唯一的,很多object可能有相同的label,通過label selector,客戶端/用戶可以指定一個object集合,通過label selector對object的集合進行操作

目前kubernetes API支持兩種標簽選擇器:

1)基于等值的關系(matchLables): “=”,“==”,“!=”
2)基于集合的(matchExpressions):in(在這個集合中),notin(不在這個集合中),exists(要么存在,要么不存在)

使用標簽選擇器的操作邏輯:
k8s之Labels,Daemonset,Job資源對象
1)同時指定的多個選擇器之間的邏輯關系為“與”操作
2)使用空值的標簽選擇器,意味著每個資源對象都將被選擇。
3)空的標簽選擇器將無法選出任何資源。
4)在基于集合的選擇器中,使用“in”或者“Notin”操作時,其values不強制為非空字符串列表,而使用exists或DostNoteExists,其values值必須為空。

舉例:
selector的操作語法如下:

[root@master yaml]# vim selector.yaml
selector:
  matchLabels:      #基于等值關系的
    app: nginx
  matchExpressions:   #基于集合的
    - {key: name,operator:  In,values: [zhangsan,lisi]}   #key,operator,values這三個是固定參數
    - {key: age,operator: Exists,values:}     #如果指定了Exists,其values值必須為空。

Daemonset

1)什么是Daemonset?
Daemonset 確保集群中的每個node上運行一個pod,且只能運行一個pod。當有node加入集群時,也會為它們新增一個pod。當有node從集群移除時,這些pod也會 被回收。當刪除Daemonset時將會刪除它創建的所有pod。

2)編寫Daemonset需要注意的點:
Daemonset不支持replicas字段,除此之外,與Deployment,RS等資源的寫法相同。

3)Daemonset一般的使用場景:

  • 常用于每個節點的日志收集工作。
  • 監控每個節點的運行狀態。

實踐Daemonset:

[root@master yaml]# vim daemonset.yaml
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: nginx-ds
spec:
  template:
    metadata:
      labels:
        app: qa
        env: dev
    spec:
      containers:
      - name: nginx
        image: nginx
---
kind: Service
apiVersion: v1
metadata:
  name: nginx-dsvc
spec:
  type: NodePort
  selector:
    app: qa
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30003
[root@master yaml]# kubectl apply -f daemonset.yaml 
daemonset.extensions/nginx-ds created
service/nginx-dsvc created

//查看pod的分布情況:

[root@master yaml]# kubectl  get pod -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-ds-dh529   1/1     Running   0          76s   10.244.2.2   node02   <none>           <none>
nginx-ds-xz4d8   1/1     Running   0          76s   10.244.1.3   node01   <none>           <none>

我集群中只有2個節點,可以看到通過Daemonset實現了每個node上都運行一個pod副本。

JOB資源對象

與之前的服務類容器不同,之前的資源對象是持續提供服務。job負責批量處理短暫的一次性任務,即僅執行一次的任務,它保證批量處理任務的一個或多個pod成功結束。

1,kubernetes支持以下幾種job:

* 非并行job:通常創建一個pod直至其成功結束。
* 固定結束次數的job:設置spec.completions,創建多個pod,直到.spec.completions個pod成功結束。
* 帶有工作隊列的并行job:設置.spec.Parallelism但不設置.spec.completions,當所有pod結束并且至少一個成功時,job就認為是成功。

2,Job Controller
Job Controller負責根據Job Spec創建pod,并持續監控pod的狀態,直至其成功結束,如果失敗,則根據restartPolicy(只支持OnFailure和Never,不支持Always)決定是否創建新的pod再次重試任務。

通過以下例子來實踐Job:
//創建一個job資源對象:

kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:
  template:
    metadata:
      labels:
        app: job
    spec:
      containers:
      - name: job
        image: busybox
        command: ["echo","hello job!"]
      restartPolicy: Never
[root@master yaml]# kubectl apply -f  job.yaml 
job.batch/test-job created

如果在生產環境中忘記了字段用法,可以通過kubectl explain 命令工具來提供幫助。

//查看該pod資源對象的狀態:
[root@master yaml]# kubectl  get pod  test-job-dcv6g 
NAME             READY   STATUS      RESTARTS   AGE
test-job-dcv6g   0/1     Completed   0          2m8s

我們可以看到job與其他資源對象不同,僅執行一次性任務,默認pod借宿運行后job即結束,狀態為Completed。

//通過查看該pod的日志來確保任務是否完成:

[root@master yaml]# kubectl  logs  test-job-dcv6g 
hello job!

任務完成后,如果沒有其他要求,我們可以刪除該job:

[root@master yaml]# kubectl  delete  jobs.batch test-job 
job.batch "test-job" deleted

2,提高job執行效率的方法
通過在yaml文件中定義字段來實現:

kind: Job
apiVersion: batch/v1
metadata:
  name: test-job
spec:      #通過spec下的這兩個字段來優化
  parallelism: 2    #同時運行2個pod
  completions: 8    #運行pod的總數量8個
  template:
    metadata:
      labels:
        app: job
    spec:
      containers:
      - name: job
        image: busybox
        command: ["echo","hello job!"]
      restartPolicy: Never

job 字段解釋:

completions:標志Job結束需要成功運行的Pod個數,默認為1
parallelism:標志并行運行的Pod的個數,默認為1
activeDeadlineSeconds:標志失敗Pod的重試最大時間,超過這個時間不會繼續重試.

//重新運行job后,查看pod狀態:

[root@master yaml]# kubectl  get pod 
NAME             READY   STATUS      RESTARTS   AGE
test-job-28ww5   0/1     Completed   0          50s
test-job-5wt95   0/1     Completed   0          46s
test-job-6s4p6   0/1     Completed   0          44s
test-job-8s2v7   0/1     Completed   0          50s
test-job-bt4ch   0/1     Completed   0          45s
test-job-bzjz6   0/1     Completed   0          48s
test-job-fhnvc   0/1     Completed   0          44s
test-job-kfn9l   0/1     Completed   0          48s

[root@master yaml]# kubectl  logs test-job-28ww5 
hello job!

可以看到pod總數為8個,且并行2個,時間會有些許差別,但不大。

3,定時運行job任務:
相當我們在linux中crontab計劃任務。

[root@master yaml]# vim cronjob.yaml
kind: CronJob       #類型為CronJob
apiVersion: batch/v1beta1
metadata:    
  name: cronjob
spec:            #使用spec.schedule字段來定義計劃job任務
  schedule: "*/1 * * * *"      #指定每分鐘執行一次任務,格式同linux中的crontab(分,時,日,月,周)
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cronjob
            image: busybox
            command: ["echo","hello job!"]
          restartPolicy: OnFailure    #僅在pod失敗時才重啟

//執行yaml文件后監控pod的狀態:

[root@master yaml]# kubectl  apply -f  cronjob.yaml 
cronjob.batch/cronjob created

k8s之Labels,Daemonset,Job資源對象

可以看到它會每個一分鐘執行一次job任務,每執行一次就會生成一個pod。
查看日志,驗證任務是否執行:

[root@master ~]# kubectl logs  cronjob-1577505180-4ss84 
hello job!
[root@master ~]# kubectl logs  cronjob-1577505240-d5gf8 
hello job!

擴展: 添加apiVersion
1)查看當前kubernetes集群中對應的API版本:

[root@master ~]# kubectl  api-versions 
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

查看發現并沒有開發版本,全是測試版本。
添加api版本:

[root@master ~]# cd /etc/kubernetes/manifests/
[root@master manifests]# ll
total 16
-rw------- 1 root root 1900 Nov  4 16:32 etcd.yaml
-rw------- 1 root root 2602 Nov  4 16:32 kube-apiserver.yaml
-rw------- 1 root root 2486 Nov  4 16:32 kube-controller-manager.yaml
-rw------- 1 root root  990 Nov  4 16:32 kube-scheduler.yaml
[root@master manifests]# vim kube-apiserver.yaml 

k8s之Labels,Daemonset,Job資源對象
在該字段下,參照對應的格式進行添加對應的版本,以上添加的是batch開發版本。

//重啟kubelet,重新加載:
[root@master manifests]# systemctl restart kubelet.service

//再次查看api版本時,就可以查看到開發版本:
k8s之Labels,Daemonset,Job資源對象

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

集贤县| 凤阳县| 鄂托克前旗| 林芝县| 绍兴市| 余姚市| 靖边县| 万年县| 翁源县| 周宁县| 金昌市| 靖西县| 杭锦旗| 巫山县| 九龙城区| 宣汉县| 宣武区| 新津县| 塔城市| 翁牛特旗| 桐柏县| 永顺县| 澄城县| 融水| 巢湖市| 安阳县| 漳州市| 通辽市| 浦城县| 故城县| 墨玉县| 岳阳市| 扎鲁特旗| 迁西县| 丹棱县| 大余县| 尼勒克县| 黎平县| 同江市| 华坪县| 长宁区|