企業級容器技術 k8s 資源清單和標籤

2021-10-02 22:59:59 字數 4564 閱讀 4562

寫資源清單的時候使用命令查詢幫助,

kubectl explain pod
需要查詢pod中的特定內容時中間用.連線例如我們檢視pod中的spec都有什麼,就可以用

kubectl explain pod.spec
寫到哪,查到哪,但是要注意,寫的時候檢視到後面有-required-這個引數的時候那就代表,這一單元中這個引數是必須的,例如

kubectl explain pod.spec

containers <

object> -required-

list of containers belonging to the pod. containers cannot currently be

added or removed. there must be at least one container in a pod. cannot be

updated.

這就說明containers這個模組是必須要存在的。

乙個模組中有很多東西

例如寫乙個pod.ymal 檔案

apiversion: v1##版本

kind: pod##控制器型別

metadata:##元資料

name: demo##元資料名稱

labels:##標籤

spec:##控制容器

containers:

- name: demo ##容器名稱

- image: nginx ##指定映象

檔案編寫完成後建立pod,

[kubeadm@server1 ~]$ kubectl create -f pod.yaml 

pod/demo created

[kubeadm@server1 ~]$ kubectl get pod

name ready status restarts age

demo 1/1 running 0 41s

這樣就已經執行起來了,剛剛我們寫的檔案控制器型別為自主型的pod,kind: pod因為沒有控制器,所以可以直接將pod進行刪除,他並不會再次建立。

[kubeadm@server1 ~]$ kubectl delete pod demo 

pod "demo" deleted

[kubeadm@server1 ~]$ kubectl get pod

no resources found in default namespace.

其實乙個containers中可以執行多個容器,但是如果給的內容相同那麼就會產生乙個問題,那就是資源爭搶。所以盡量不要這麼幹。

可以使用不同的映象,兩個映象中的不管是埠還是網路不重和的映象來操作。

比如

apiversion: v1

kind: pod

metadata:

name: demo

labels:

spec:

containers:

- name: vm1

image: nginx

- name: vm2

image: redis

映象乙個使用nginx乙個使用redis,設定完成後進行建立

[kubeadm@server1 ~]$ kubectl create -f pod.yaml 

pod/demo created

[kubeadm@server1 ~]$ kubectl get pod

name ready status restarts age

demo 2/2 running 0 48s

這樣建立出來的就沒有資源的爭搶,可以順利執行。

不想要這個pod還可以直接使用命令,直接刪除檔案中配置的容器。

[kubeadm@server1 ~]$ kubectl delete -f pod.yaml 

pod "demo" deleted

但是在建立之後有乙個問題如下:

[kubeadm@server1 ~]$ kubectl get pod -o wide

name ready status restarts age ip node nominated node readiness gates

demo 2/2 running 0 39s 10.244.3.6 server4

[kubeadm@server1 ~]$ kubectl get pod --show-labels 

name ready status restarts age labels

還有一種過濾的方法,這種方法適用於標籤數量比較少的時候。

name ready status restarts age

demo 2/2 running 0 6m27s

demo 2/2 running 0 6m32s demo

可以看到最後顯示的就是乙個標籤。上面我們也提到了乙個東西,在標籤不多的時候可以使用過濾,但是仔細想想,標籤的多或者少可以指定麼?當然可以。我們給pod再加乙個版本資訊的標籤,可以使用

[kubeadm@server1 ~]$ kubectl label pod demo version=v1

pod/demo labeled

[kubeadm@server1 ~]$ kubectl get pod --show-labels

name ready status restarts age labels

這樣標籤又新增上去乙個。當標籤打錯了我們也是可以進行修改的。

pod/demo labeled

[kubeadm@server1 ~]$ kubectl get pod --show-labels

name ready status restarts age labels

那標籤的作用,或者說如何使用來控制資源分配。

首先給節點也打上標籤,接著給配置檔案裡面新增標籤的標識,再執行讀取檔案並執行就會跑到我們設定的結點上執行了。

[kubeadm@server1 ~]$ kubectl label nodes server3 disktype=ssd

node/server3 labeled

[kubeadm@server1 ~]$ kubectl get nodes -l disktype

name status roles age version disktype

server1 ready master 2d1h v1.17.3

server3 ready 2d1h v1.17.3 ssd

server4 ready 2d1h v1.17.3

[kubeadm@server1 ~]$ vim pod.yaml

kind: pod

metadata:

name: demo

labels:

spec:

containers:

- name: vm1

image: nginx

- name: vm2

image: redis

nodeselector:

disktype: ssd

[kubeadm@server1 ~]$ kubectl create -f pod.yaml

[kubeadm@server1 ~]$ kubectl get pod -o wide

name ready status restarts age ip node nominated node readiness gates

demo 2/2 running 0 47s 10.244.2.5 server3

總的來說

標籤新增:

kubectl label nodes kube-node/pod label_name=label_value

標籤刪除:

##刪除乙個label,只需在命令列最後指定label的key名並與乙個減號相連即可:

kubectl label nodes/pods pod/node-name label_name-

查詢:kubectl get pod --show-labels

替換:##在新增的基礎上加上乙個--overwrite的引數

k8s資源清單

自主式的pod無法自癒 編輯檔案vim pod.yaml apiversion v1 指定api的版本 kind pod 檔案自定義的資源型別和角色,控制器型別 metadata 元資料物件 name demo 命名空間 labels 標籤 spec 固定物件容器的控制 containers nam...

k8s資源清單定義入門

1.資源分類 a.workload型資源 service pod deployment replicaset statefulset job cronjob b.服務發現及服務均衡資源型資源 service ingress c.配置與儲存型資源 volume configmap secret dow...

K8S 資源配置清單補充1

k8s環境變數中敏感資訊會帶來的安全隱患 方法1 資源配置清單建立 configmap,通常用來管理應用的配置檔案或者環境變數,myblog two pod configmap.yaml apiversion v1 kind configmap metadata name myblog namesp...