導航:首頁 > 程序命令 > kubernetes命令

kubernetes命令

發布時間:2023-05-29 19:23:06

『壹』 k8s 常用命令總結

cp kubectl /usr/bin/

chmod 777 /usr/bin/kubectl

echo "export KUBECONFIG=/etc/kubernetes/kubeconfig/admin.kubeconfig" >> /etc/profile

source /etc/profile

#列出集群中的節點

kubectl get nodes 或 kubectl get no

#獲取所有命段碼物名空間

kubectl get namespace 或kubectl get ns

#獲取所有pods

kubectl get pods 或 kubectl get po

#獲取所有命名空間上的pods

kubectl get pods -o wide --all-namespaces

#查看kube-system namespace下面的pods/svc/deployment 等等(-o wide 選項可以查看存在哪個對應的節點)

kubectl get pods -n kube-system

kubectl get svc -n kube-system

kubectl get deployment -n kube-system

#查看所握液有namespace下面的pods/svc/deployment等等

kubectl get pods/模棗svc/deployment --all-namcpaces

#查看pod 日誌 (如果pod有多個容器需要加-c 容器名)

kubectl logs xxx -n kube-system

kubectl logs -f xxx -n kube-system

#查看pod詳細描述信息:

kubectl describe pod XXX -n kube-system

#查看運行的pod的環境變數

kubectl exec pod名 env

#刪除資源(先確定是由說明創建的,再刪除對應的kind):

kubectl delete pod  xxx -n kube-system

kubectl delete -f 文件名

kubectl delete pod pod名

kubectl delete rc rc名

kubectl delete service service名

kubectl delete pod --all

『貳』 k8s常用命令

相關服務及用途節點名稱服務名稱用途管理節點kubctl-apiserver提供HTTP Rest統一介面服務,處理和驗證REST請求和更新etcd中API對象的狀態管理節點kubectl-controller-manager資源控制管理同步管理節點kube-scheler負責資源調度(調度Pod)工作節點kubelet管理Pod的生命周期,創建、啟停等任務工作節點kube-proxy負大悶責網路通信及負載均衡### 1.重啟服務kubectl patch deployment app名稱 -p {"spec":{"template":{"metadata":{"labels":{"date":"date +'%s'"}}}}} -n kube-system

kubectl logs --previous l7-lb-controller-74c67fb85d-5b5cg -n kube-system

kubectl describe pod kubernetes-dashboard -n kube-system

kubectl get svc kubernetes-dashboard -n kube-system

kubectl get ep -n kube-system kubernetes-dashboard

lsmod | grep ip_vs
查看標簽kubectl get node --show-labels -n kube-system
kubectl get pods --show-labels kube-sytem
kubectl get pod --show-labels kubernetes-dashboard-6845889d64-25f9x -n kube-system

kubectl describe svc kubernetes-dashboard -n kube-system
kubectl describe pod kubernetes-dashboard -n kube-system

在容器內執行命令kubectl exec -ti pod名稱 /bin/基閉bash -n kube-system

kubectl get daemonset -o yaml -n kube-system calico-node
kubectl get svc -o json pod名稱 -n kube-system

kubectl get daemonsets -n kube-system

通過文件創建cat > my-namespace.yaml << EOF
apiVersion: v1
kind: Namespace
metadata:
name: new-namespace
EOF
kubectl create -f ./my-namespace.yaml
刪滾鋒彎除命令空間kubectl delete namespaces new-namespace
刪除一個namespace會自動刪除所有屬於該namespace的資源。default 和 kube-system 命名空間不可刪除。### 15.創建/查看 Deployment 記錄版本號kubectl create -f nginx-deployment.yaml --record

重新分配pod數量kubectl scale deployment kubernetes-dashboard --replicas=1 -n kube-system

查看升級歷史記錄kubectl rollout history deployment/kubernetes-dashboard -n kube-system
查看單個revision的詳細信息kubectl rollout history deployment/kubernetes-dashboard --revision=1 -n kube-system
回滾到上一個版本kubectl rollout undo deployment/kubernetes-dashboard -n kube-system
指定回滾某個歷史版本kubectl rollout undo deployment/kubernetes-dashboard --to-revision=1 -n kube-system

查看hap狀態kubectl get hpa kubernetes-dashboard -n kube-system
查看hpa詳細狀態kubectl describe hpa kubernetes-dashboard -n kube-system
刪除hpakubectl delete hpa kubernetes-dashboard -n kube-system

kubectl set image deploy kubernetes-dashboard nginx=nginx:1.9.1
更新升級資源kubectl set resources deployment kubernetes-dashboard -c=kubernetes-dashboard --limits=cpu=200m,memory=512Mi -n kube-system
恢復kubectl rollout resume deploy kubernetes-dashboard -n kube-system

kubectl get csr
添加新工作節點kubectl get csr|grep 'Pending' | awk 'NR>0{print 1}';do kubectl certificate approve 1}';do kubectl certificate deny 1}';do kubectl delete csr $i;done

查看集群訪問連接kubectl cluster-info
查看許可權kubectl describe clusterrole cluster-admin -n kube-system
查看kubectl版本kubectl version
查看支持api版本kubectl api-version
查看當前kubectl配置kubectl config view
查看集群狀態kubectl get componentstatuses
kubectl get rs
查看集群節點kubectl get nodes
查看命名空間kubectl get namespaces
Node狀態維護每個Node都包括以下狀態信息
地址:包括hostname、外網IP和內網IP
條件(Condition):包括OutOfDisk、Ready、MemoryPressure和DiskPressure
容量(Capacity):Node上的可用資源,包括CPU、內存和Pod總數
基本信息(Info):包括內核版本、容器引擎版本、OS類型等
維護狀態/取消維護模式kubectl cordon NodeName
kubectl uncordon NodeName

『叄』 k8s kubectl常用命令總結

查看所有 pod 列表, -n 後跟 namespace, 查看指定的命名空間
kubectl get pod
kubectl get pod -n kube

查看所有的命名空間
kubectl get ns

刪除某個節點
kubectl delete pod 節點名稱 -n 命名空間
查看 RC 和 service 列表, -o wide 查看詳細信息
kubectl get rc,svc
kubectl get pod,svc -o wide
kubectl get pod -o yaml

查看某個名稱空間下的所有節點以及ip
kubectl get pod -n 名稱空間名 -o wide

模擬用戶發起請求:
(模擬100個用戶同時發起100000條請求,後面跟著ip地址)
ab -c 100 -k 100000 http://23.23.23.1 -o wide

顯示仔坦租 Node 的詳細信息
kubectl describe node 192.168.0.212

顯示 Pod 的詳細信息, 特別是查看 pod 無法創建的時候的日誌
kubectl describe pod
eg:
kubectl describe pod redis-master-tqds9

根據 yaml 創建資源, apply 可以重復執行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml

基於 pod.yaml 定義的名稱刪除 pod
kubectl delete -f pod.yaml

刪除所有包含某個 label 的pod 和 service
kubectl delete pod,svc -l name=

刪除所有 Pod
kubectl delete pod --all

查看 endpoint 列表
kubectl get endpoints

執行 pod 的 date 命令
kubectl exec – date
kubectl exec – bash
kubectl exec – ping 10.24.51.9

通過bash獲得 pod 中某個容器的TTY,相當信握於登錄容器
kubectl exec -it -c – bash
eg:
kubectl exec -it redis-master-cln81 – bash

查看容器的日誌
kubectl logs
kubectl logs -f # 實時查看日誌

kubectl get pods --all-namespaces

kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system

查看pods具體信息
kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看集群健康狀態
kubectl get cs

獲取所有deployment
kubectl get deployment --all-namespaces

列出該 namespace 中的所有 pod 包括未初始化的
kubectl get pods --include-uninitialized

查看deployment()
kubectl get deployment nginx-app

kubectl get rc,services
查看pods結構信息(重點,通過這個看日誌分析錯誤)
對控制器和服務,node同樣有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其他控制器類似吧,就是kubectl get 控制器念兆 控制器具體名稱
查看pod日誌
kubectl logs $POD_NAME
查看pod變數
kubectl exec my-nginx-5j8ok – printenv | grep SERVICE
集群
kubectl get cs # 集群健康情況
kubectl cluster-info # 集群核心組件運行情況
kubectl get namespaces # 表空間名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
kubectl get nodes //獲取全部節點
kubectl delete node k8s2 //刪除節點
kubectl rollout status deploy nginx-test
創建
kubectl create -f ./nginx.yaml # 創建資源
kubectl create -f . # 創建當前目錄下的所有yaml資源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多個文件創建資源
kubectl create -f ./dir # 使用目錄下的所有清單文件來創建資源
kubectl create -f https://git.io/vPieo # 使用 url 來創建資源
kubectl run -i --tty busybox --image=busybox ----創建帶有終端的pod
kubectl run nginx --image=nginx # 啟動一個 nginx 實例
kubectl run mybusybox --image=busybox --replicas=5 ----啟動多個pod
kubectl explain pods,svc # 獲取 pod 和 svc 的文檔

kubectl rolling-update python-v1 -f python-v2.json # 滾動更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新資源名稱並更新鏡像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的鏡像
kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的進行中的滾動更新
cat pod.json | kubectl replace -f - # 基於 stdin 輸入的 JSON 替換 pod
強制替換,刪除後重新創建資源。會導致服務中斷。
kubectl replace --force -f ./pod.json
為 nginx RC 創建服務,啟用本地 80 埠連接到容器上的 8000 埠
kubectl expose rc nginx --port=80 --target-port=8000

更新單容器 pod 的鏡像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed 『s/(image: myimage):.*$/\1:v4/』 | kubectl replace -f -
kubectl label pods nginx-pod new-label=awesome # 添加標簽
kubectl annotate pods nginx-pod icon-url= http://goo.gl/XXBTWq # 添加註解
kubectl autoscale deployment foo --min=2 --max=10 # 自動擴展 deployment 「foo」
編輯資源
kubectl edit svc/docker-registry # 編輯名為 docker-registry 的 service
KUBE_EDITOR=「nano」 kubectl edit svc/docker-registry # 使用其它編輯器
動態伸縮pod
kubectl scale --replicas=3 rs/foo # 將foo副本集變成3個
kubectl scale --replicas=3 -f foo.yaml # 縮放「foo」中指定的資源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 將deployment/mysql從2個變成3個
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 變更多個控制器的數量
kubectl rollout status deploy deployment/mysql # 查看變更進度

kubectl delete -f ./pod.json # 刪除 pod.json 文件中定義的類型和名稱的 pod
kubectl delete pod,service baz foo # 刪除名為「baz」的 pod 和名為「foo」的 service
kubectl delete pods,services -l name=myLabel # 刪除具有 name=myLabel 標簽的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized # 刪除具有 name=myLabel 標簽的 pod 和 service,包括尚未初始化的
kubectl -n my-ns delete po,svc --all # 刪除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 強制刪除

kubectl logs nginx-pod # mp 輸出 pod 的日誌(stdout)
kubectl logs nginx-pod -c my-container # mp 輸出 pod 中容器的日誌(stdout,pod 中有多個容器的情況下使用)
kubectl logs -f nginx-pod # 流式輸出 pod 的日誌(stdout)
kubectl logs -f nginx-pod -c my-container # 流式輸出 pod 中容器的日誌(stdout,pod 中有多個容器的情況下使用)
kubectl run -i --tty busybox --image=busybox – sh # 互動式 shell 的方式運行 pod
kubectl attach nginx-pod -i # 連接到運行中的容器
kubectl port-forward nginx-pod 5000:6000 # 轉發 pod 中的 6000 埠到本地的 5000 埠
kubectl exec nginx-pod – ls / # 在已存在的容器中執行命令(只有一個容器的情況下)
kubectl exec nginx-pod -c my-container – ls / # 在已存在的容器中執行命令(pod 中有多個容器的情況下)
kubectl top pod POD_NAME --containers # 顯示指定 pod和容器的指標度量

kubectl drain k8s-node # 清空 my-node 以待維護
kubectl top node k8s-node # 顯示 my-node 的指標度量
kubectl cluster-info mp --output-directory=/path/to/cluster-state # 將當前集群狀態輸出到 /path/to/cluster-state

『肆』 k8s常用命令

docker run busybox echo "hello world"

docker run --name kubia-container -p 8080:8080 -d kubia

docker build -t kubia .

docker images

docker ps

docker exec -it kubia-container bash

docker stop kubia-container
docker rm kubia-container

docker tag kubia luksa/kubia
docker login
docker push luksa/kubia

docker logs <container id>

kubectl run kubia --image=luksa/kubia --port=8080

kubectl expose pod kubia <--type=LoadBalancer --name kubia-http> (type指定svc類型默認clusterip,name指定svc名稱)

kubectl get ... (#-o wide列出pod ip和運行節點 #-o yaml輸出格式 #--show-lables列出標簽#-L列出指定標簽)
kubectl describe ...

kubectl cluster-info

kubectl explain pod
kubectl explain pod.spec

kubectl create -f kubia-manual.yaml

kubectl logs <pod> -c <container id> (#--previous獲取奔潰容器的日誌)

kubectl port-forward kubia-manual 8888:8080
參考: https://stackoverflow.com/questions/33517646/unable-to-do-port-forwarding-socat-not-found-kubernetes-on-docker

kubectl label po <pod name> <key=value> #添加
kubectl label po <pod name> <key=value> --overwrite #修改

kubectl annotate

kubectl delete po <pod name> (--all 所有poad)
kubectl delete po -l
kubectl delete ns #刪除整個命名空間
kubectl delete all --all (刪除所有資源)

128+9(SIGKILL) 進程強制終止,此時會創建一個腔搏全新容器
128+15(SIGTERM)

initalDelaySeconds 設置延遲來說明應用程序啟動時間

kubectl delete rc kubia --cascade=false

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

export CURL_CA_BUNDLE=/var/run/secrets/kubernetes.io/伍渣祥serviceaccount/ca.crt
TOKEN= TOKEN" https://kubernetes

kubectl create clusterrolebinding permissive-binding --clusterrole=cluster-admin --group=system:serviceaccounts

kubectl apply -f nginx-test.yaml

kubectl delete -f nginx-test.yaml #刪除YAML文件中定義的資梁輪源

kubectl get deployment nginx-test -o yaml

kubectl create deployment test --image=nginx:1.7.9 --dry-run=client -o yaml > nginx.yaml

kubectl api-versions #查看K8S所支持API版本
kubectl api-resources #查看K8S所有資源類型
kubectl explain pods #發現api對象欄位
kubectl explain pods.spec#了解各個屬性更多信息

kubectl apply -f pod-demo.yaml
kubectl get pods #查看容器是否運行,正常情況應該是Running
kubectl get pods -o wide #查看pod詳細信息,包含了IP、所屬Node等
kubectl get pods --show-labels #查看資源標簽
kubectl get pods -L creation_method,env #將creation_method,env標簽展示在列表上
kubecl label pods kubia-manual creation_method=manual #添加標簽
kubecl label pods kubia-manual env=debug --overwrite #修改標簽--overwrite選項
kubectl get namespaces #查看namespace
kubectl get pods -n kube-system #顯示指定namespace的pod

kubectl describe pods pod-demo

kubectl delete pods <pod name> #按名稱刪除
kubectl delete pods -l <label> #按標簽刪除<namespace> #刪除整個命名空間來刪除pod
kubectl delete pods --all #刪除命名空間中的所有pod
kubectl delete all --all #刪除命名空間中的幾乎所有資源,pod rc svc
kubectl delete rc kubia --cascade=false #只刪除 ReplicationController 並保待 pod 運行

kubectl logs mypod
kubectl logs mypod --previous #查看前一個容器的日誌
退出狀態碼是兩個數字的總和:128+x, 其中x是終止進程的信號編號

http://kubernetes.io/docs/user-guide/jsonpath

主要用於Pod調度和驅逐,優先順序越低的QOS越容易被驅逐。不同QOS優先順序不同,使用kubectl describe命令可以查看Qos Class:
· BestEffort:盡可能的為Pod分配資源,默認不進行requests設置就是該QOS,優先順序最低
· Burstable:資源可波動,requests小於limit的值就是該QOS,推薦
· Guaranteed:完全可保障資源,必須使用requests和limit定義內存和CPU兩項資源並且相等,優先順序最高

由於每個節點都有 一個唯 一標簽 , 其中 鍵為kubernetes.io/hostname,值為該 節點的 實際主機名

kubectl annotate pods <podname> <key=value>

『伍』 Kubernetes中使用ConfigMap大全

ConfigMap在K8S中經常會使用到,它能使容器鏡像和配置內容解耦,它可以綁定在volume上供容器訪問,它的創建和使用也是靈活多樣核鄭,這篇文章翻譯自Kubernetes官網,局氏世詳細演示了如何創建ConfigMap和如何使用ConfigMap配置Pod,內容比較全面,希望能幫助到大家。

可以使用 kubectl create configmap 或 kustomization.yaml 中的 ConfigMap 生成器來創建 ConfigMap。 請注意,kubectl 從 1.14 開始支持 kustomization.yaml。

使用 kubectl create configmap 命令可以從目錄、文件或文字值創建 ConfigMap。

其中 <map-name> 是您要分配給 ConfigMap 的名稱,<data-source> 是從中提取數據的目錄、文件或文字值。 ConfigMap 對象的名稱必須是有效的 DNS 子域名。

基於文件桐肢創建ConfigMap時,<data-source>中的key默認為文件的basename,value默認為文件內容。

您可以使用 kubectl describe 或 kubectl get 來檢索有關 ConfigMap 的信息。

您可以使用 kubectl create configmap 從同一目錄中的多個文件創建一個 ConfigMap。 當你基於目錄創建 ConfigMap 時,kubectl 會識別基本名稱是目錄中有效鍵的文件,並將這些文件中的每一個打包到新的 ConfigMap 中。 除常規文件外的任何目錄條目都將被忽略(例如子目錄、符號鏈接、設備、管道等)。例如:

上述命令將 configure-pod-container/configmap/ 目錄中的每個文件(在本例中為 game.properties 和 ui.properties)打包到 game-config ConfigMap 中。 你可以使用以下命令顯示 ConfigMap 的詳細信息:

輸入結果類似如下:

configure-pod-container/configmap/ 目錄中的 game.properties 和 ui.properties 文件在 ConfigMap 的數據部分中表示。

輸出如下:

可以使用 kubectl create configmap 從單個文件或多個文件創建 ConfigMap。例如:

使用kubectl describe可以查看

輸出如下:

我們可以多次傳入 --from-file 參數以從多個數據源創建 ConfigMap。

使用以下命令顯示 game-config-2 ConfigMap 的詳細信息:

輸出如下:

當 kubectl 從非 ASCII 或 UTF-8 輸入創建 ConfigMap 時,該工具會將這些放入 ConfigMap 的 binaryData 欄位中,而不是數據中。 文本和二進制數據源都可以組合在一個 ConfigMap 中。 如果要查看 ConfigMap 中的 binaryData 鍵(及其值),可以運行 kubectl get configmap -o jsonpath='{.binaryData}' <name>。

使用選項 --from-env-file 從 env-file 創建一個 ConfigMap,例如:

運行下面的兩個命令將創建如下的ConfigMap

輸出如下:

如下實例:

輸出如下:

使用 --from-file 參數時,您可以定義要在 ConfigMap 的數據部分中使用的文件名以外的鍵:

其中 <my-key-name> 是您要在 ConfigMap 中使用的鍵,<path-to-file> 是您希望該鍵表示的數據源文件的位置。
例如:

將產生如下的輸出:

可以使用帶有 --from-literal 參數的 kubectl create configmap 從命令行定義文字值:

產生輸出如下:

kubectl 從 1.14 開始支持 kustomization.yaml。 您還可以從Generator創建一個 ConfigMap,然後應用它在 Apiserver 上創建對象。 Generator應在目錄內的 kustomization.yaml 中指定。

例如,從文件 configure-pod-container/configmap/game.properties 生成一個 ConfigMap

應用 kustomization 目錄來創建 ConfigMap 對象。

使用以下命令來check ConfigMap內容:

你可以定義要在 ConfigMap 生成器中使用的文件名以外的鍵。 例如,要從文件 configure-pod-container/configmap/game.properties 中生成一個 ConfigMap,其key為 game-special-key。

應用 kustomization 目錄來創建 ConfigMap 對象。

如下實例:

應用 kustomization 目錄來創建 ConfigMap 對象。

1)從單個ConfigMap的Data中定義容器環境變數
如下實例,
第一步,創建ConfigMap

第二步,在Pod specification中使用ConfigMap中定義的值賦給環境變數

實例如下:
第一步,聲明多個ConfigMaps

第二步,創建ConfigMaps

第三步,在pod specification中使用ConfigMap中的Data

實例如下:
第一步,聲明ConfigMap

第二步,創建ConfigMap

第三步,使用envFrom定義ConfigMap中所有data作為容器的環境變數。

第四步,創建POD

現在Pod中的環境變數包括SPECIAL_LEVEL=very 和 SPECIAL_TYPE=charm.

實例如下:

上面的實例中演示了從文件中創建ConfigMaps,文件名成為了key,文件內容成為了鍵值。
第一步,創建ConfigMap

第二步,使用ConfigMap里的存儲的數據綁定到volume
在 Pod specification的volume部分下添加 ConfigMap 名稱。 這會將 ConfigMap 數據添加到指定為 volumeMounts.mountPath 的目錄(在本例中為 /etc/config)。 命令部分列出了名稱與 ConfigMap 中的鍵匹配的目錄文件。

創建Pod

當pod運行後,命令 ls /etc/config/產生下面的輸出

實例如下:

創建Pod

當pod運行後,命令 ls /etc/config/產生下面的輸出

ConfigMap Reference可以被標記為「可選」。 如果 ConfigMap 不存在,則掛載的卷將為空。 如果 ConfigMap 存在,但引用的鍵不存在,則安裝點下方將不存在路徑。

當掛載的ConfigMap 更新時,映射內容最終也會更新。 這適用於在 pod 啟動後存在可選引用的 ConfigMap 的情況。
Kubelet 在每次定期同步時檢查掛載的 ConfigMap 是否是最新的。 但是,它使用其本地基於TTL的緩存來獲取 ConfigMap 的當前值。 因此,從更新 ConfigMap 到將新key投射到Pod的總延遲可以達到kubelet同步周期(默認為 1 分鍾)+ ConfigMaps 緩存的 TTL(默認為 1 分鍾) )。 在 kubelet 中,您可以通過更新 pod 的注釋之一來觸發立即刷新。

ConfigMap API 資源將配置數據存儲為鍵值對。 數據可以在 pod 中使用,也可以為控制器等系統組件提供配置。 ConfigMap類似於Secrets,但提供了一種處理不包含敏感信息的字元串的方法。 用戶和系統組件都可以在ConfigMap中存儲配置數據。

輸出類似結果:

『陸』 kubernetes(k8s)secret使用

Secret有三種類型:
1、Opaque:base64 編碼格式的 Secret,用來存儲密碼、密鑰等;但數據也可以通過base64 –decode解碼得到原始數據,所以加密性很弱。
2、kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認證信息。
3、kubernetes.io/service-account-token:用於被serviceaccount引用,serviceaccout 創建時Kubernetes會默認創建對應的secret。Pod如果使用了serviceaccount,對應的secret會自動掛載到Pod目錄/run/secrets/kubernetes.io/serviceaccount中。

Opaque 類型的數據是一個 map 類型,要求value是base64編碼格式,比如我們來創建一個用戶名為 admin,密碼為 admin321 的 Secret 對象,首先需要把這用戶名和密碼做 base64 編碼,

然後可以利用上面編碼過後的數據來編寫一個YAML文件:(secret-demo.yaml)

然後同樣使用kubectl命令來創建:

利用get secret命令查看:

其中default-token-n9w2d為創建集群時默認創建的 secret,被serviceacount/default 引用。

使用describe命令,查看詳情:

我們可以看到利用describe命令查看到的Data沒有直接顯示出來,如果想看到Data裡面的詳細信息,同樣我們可以輸出成YAML文件進行查看:

創建好Secret對象後,有兩種方式來使用它:
1、以環境變裂褲量的形式
2、以Volume的形式掛載

首先我們來測試下環境變數的方式,同樣的,我們來使用一個簡單的busybox鏡像來測試下:(secret1-pod.yaml)

創建上面的Pod:

然後我們查看Pod的日誌輸出:

可以看到有 USERNAME 和 PASSWORD 兩個環境變數輸出出來。需要注意的舉源帶是,環境變數的方式,不支持動態更新密碼。

同樣的我們用一個Pod來驗證下Volume掛載,創建一個Pod文件:(secret2-pod.yaml)

創建Pod:

然後我們查看輸出日誌:

可以看到secret把兩個key掛載成了兩個對應的文件。

除了上面的Opaque這種類型外,我們還可以來創建用戶docker registry認證的Secret,直接使用kubectl create命令創建即可,如下:

然後查看Secret列表:

注意 看上面的TYPE類型,myregistry是不是對應的kubernetes.io/dockerconfigjson,同樣的可以使用describe命令來查看詳細信息:

同樣的可以看到Data區域沒有直接展示出來,如果想查看的話可以使用-o yaml來輸出展示出來:

可以把上面的data.dockerconfigjson下面的數據做一個base64解碼正蘆,看看裡面的數據是怎樣的呢?

如果我們需要拉取私有倉庫中的docker鏡像的話就需要使用到上面的myregistry這個Secret:

我們需要拉取私有倉庫鏡像10.8.13.85/test:v1,我們就需要針對該私有倉庫來創建一個如上的Secret,然後在Pod的 YAML 文件中指定imagePullSecrets。

另外一種Secret類型就是kubernetes.io/service-account-token,用於被serviceaccount引用。serviceaccout 創建時 Kubernetes 會默認創建對應的 secret。Pod 如果使用了 serviceaccount,對應的secret會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中。

這里我們使用一個nginx鏡像來驗證一下,大家想一想為什麼不是呀busybox鏡像來驗證?當然也是可以的,但是我們就不能在command裡面來驗證了,因為token是需要Pod運行起來過後才會被掛載上去的,直接在command命令中去查看肯定是還沒有 token 文件的。

最後我們來對比下Secret和ConfigMap這兩種資源對象的異同點:

key/value的形式
屬於某個特定的namespace
可以導出到環境變數
可以通過目錄/文件形式掛載
通過 volume 掛載的配置信息均可熱更新

Secret 可以被 ServerAccount 關聯
Secret 可以存儲 docker register 的鑒權信息,用在 ImagePullSecret 參數中,用於拉取私有倉庫的鏡像
Secret 支持 Base64 加密
Secret 分為 kubernetes.io/service-account-token、kubernetes.io/dockerconfigjson、Opaque 三種類型,而 Configmap 不區分類型

『柒』 k8s常用命令

命令行 敲出的指令分為2種,

資源管理方式分類

直接使用命令去操作k8s資源,命令和參數一起出現

通過命令和配置文件去操作作k8s資源,命令還是那個命令,只不過參數都放在配置文件裡面

使用apply創建資源,

說明

在master節點執行以下命令即可刪除

還需要在work節點上執行以下命令來清空ini配置

先在主節點創建令牌

然後在需要加入集群的節點中執行令牌,注意這里的命令是通過 kubeadm token create --print-join-command 命令返回的結果

說明

記住,名稱中不能用下劃線 _ ,可以用橫行 - 第一種創建方式–命令行創建

第二種創建方式–命令行 + 配置文件
創建一個名為namespace-dev.yaml的文件,內容如下(注意大小寫,kind的頭字母必須大寫)

然後偶執行命令進行創建

需要注意的是,刪除後,當前命名空間下的pod、deployment、 container 也會一起刪掉

第一種–使用命令刪除

第二種–使用配置文件刪除

說明

獲取所有namespace的pod並監視資源變動
加上 -w 表示監視資源變動信息,此時命令行進入阻塞狀態,如果pod有變化將會馬上呈現出來;

其他參數

因為pod裡面至少要有一個容器,所以pod是和容器一起創建的,新建一個文件 pod.ymal ,內容如下

然後執行命令並指定配置文件進行創建

以下示例是為pod資源打標簽,這種方式是和pod一起創建的,新建一個配置文件 label.yaml

執行命令創建pod

適合更新label值,前提是label的key必須已存在;

刪除key為lebelKey的標簽

pod控制器有很多種,我們這里就用deployment

使用以下run命令運行一個nginx,deployment名稱為 app=run-cmd-nginx-deploy-3

通過以下命令可以看到,會自動生成一個 app=run-cmd-nginx-deploy-3 的標簽

新建一個deployment.yaml文件,內容如下

需要注意的是,一旦刪除pod控制器,此pod控制器下的所有pod和容器也會一並刪除;

默認創建的pod是只能對內訪問的,所以需要創建一個對外的訪問埠,創建一個service其實就是暴露對外的訪問埠

說明

創建好service之後,查看service信息,可以看到,暴露的埠為:30474,

新建一個service.ymal文件,內容如下

以下三種用法都可以

查詢pod控制器和pod

Endpoint是kubernetes中的一個資源對象,存儲在etcd中,用來記錄一個service對應的所有pod的訪問地址,它是根據service配置文件中selector描述產生的。

一個Service由一組Pod組成,這些Pod通過Endpoints暴露出來,Endpoints是實現實際服務的端點集合。換句話說,service和pod之間的聯系是通過endpoints實現的。

每創建一個service,k8s會自動創建一個同名的 Endpoint出來

如果是由service創建出來的endpoints,刪除後會馬上創建出一個同名的endpoint出來,如果要刪除必須先刪除service

因為每次創建一個service,k8s會自動創建一個同名的 Endpoint出來,所我們直接創建service就可以了

--help 用來查看幫助文檔,如果你不知道某個命令怎麼使用了,就可以用 --help 查詢命令的用法

explain用來查看配置文件的 資源結構,如果不知道配置文件中的資源用有哪些結構,那麼就可以使用explain命令來查看

『捌』 Kubectl 常用命令大全

create 命令 :根據文件或者輸入來創建資源

delete 命令 :刪除資源

get 命令 :獲得資源信息

run 命令 :在集群中創建並運行一個或多個容器鏡像。

更詳細用法參見 : http://docs.kubernetes.org.cn/468.html

expose 命令 :創建一個service服務,並且暴露埠讓外部可以訪問

更多expose詳細用法參見 : http://docs.kubernetes.org.cn/475.html

set 命令 :配置應用的一些特定資源,也可以修改應用已有的資源

set 命令詳情參見 : http://docs.kubernetes.org.cn/669.html

這個命令用於設置資源的一些范圍限制。

資源對象中的 Pod 可以指定計算資源需求(CPU-單位m、內存-單位Mi),即使用的最小資源請求(Requests),限制(Limits)的最大資源需求,Pod將保證使用在設置的資源數量范圍。

對於每個Pod資源,如果指定了 Limits (限制)值,並省略了 Requests (請求),則 Requests 默認為 Limits 的值。

可用資源對象包括(支持大小寫) : replicationcontroller 、 deployment 、 daemonset 、 job 、 replicaset 。

例如 :

設置資源的 selector (選擇器)。如果在調用"set selector"命令之前已經存在選擇器,則新創建的選擇器將覆蓋原來的選擇器。

selector 必須以字母或數字開頭,最多包含63個字元,可使用:字母、數字、連字元" - " 、點"."和下劃線" _ "。如果指定了--resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。

注意 :目前 selector 命歷手握令只能用於 Service 對象。

​用於更新現有資源的容器鏡像。

可用資源對象包括: pod (po) 、 replicationcontroller (rc) 、 deployment (deploy) 、 daemonset (ds) 、 job 、 replicaset (rs) 。

explain 命令 :用於顯示資源文檔信息

edit 命令 : 用於編輯資源信息

label命令 : 用於更新(增加、修改或刪除)資源上的 label(標簽)

例 :

annotate命令 :更新一個或多個資源的Annotations信息。也就是註解信息,可以方便的查看做了哪些操作。

例子 :

completion命令 :用於設置 kubectl 命令自動補全

BASH

ZSH

rollout 命令 : 用於對資源進行管理

可用資源包括: deployments , daemonsets 。

子命令 :

rolling-update命令 : 執行指定ReplicationController的滾動更新。

該命令創建了一個新的 RC , 然後一次更新一個 pod 方式逐步使用新的 PodTemplate ,最終實現 Pod 滾動更新, new-controller.json 需要與之前 RC 在相同的 namespace 下。

scale命令 :擴容或縮容 Deployment 、 ReplicaSet 、 Replication Controller 或 Job 中 Pod 數量

scale 也可以指定多個前提條件,如:當前副本數量或 --resource-version ,進行伸縮比例設置前,系統會先驗證前提條件是否成立。這個就是彈性伸縮策略。

autoscale命令 :這個比 scale 更加強大,也是彈性伸肢慶縮策略 ,它是根據流量的多少來自薯滲動進行擴展或者縮容。

指定 Deployment 、 ReplicaSet 或 ReplicationController ,並創建已經定義好資源的自動伸縮器。使用自動伸縮器可以根據需要自動增加或減少系統中部署的pod數量。

certificate命令 :用於證書資源管理,授權等

cluster-info 命令 :顯示集群信息

top 命令 :用於查看資源的cpu,內存磁碟等資源的使用率

cordon命令 :用於標記某個節點不可調度

uncordon命令 :用於標簽節點可以調度

drain命令 : 用於在維護期間排除節點。

taint命令 :用於給某個 Node 節點設置污點

describe命令 :顯示特定資源的詳細信息

logs命令 :用於在一個pod中列印一個容器的日誌,如果pod中只有一個容器,可以省略容器名

參數選項 :

exec命令 :進入容器進行交互,在容器中執行命令

命令選項 :

attach命令 :連接到一個正在運行的容器。

參數選項 :

cp命令 :拷貝文件或者目錄到pod容器中

用於 pod 和外部的文件交換,類似於 docker 的 cp ,就是將容器中的內容和外部的內容進行交換。

api-servions命令 :列印受支持的 api 版本信息

help命令 :用於查看命令幫助

config 命令 : 用於修改 kubeconfig 配置文件(用於訪問api,例如配置認證信息)

設置 kubectl 與哪個 Kubernetes 集群進行通信並修改配置信息。查看 使用 kubeconfig 跨集群授權訪問 文檔獲取詳情配置文件信息。

version 命令 :列印客戶端和服務端版本信息

plugin 命令 :運行一個命令行插件

apply命令 :通過文件名或者標准輸入對資源應用配置

通過文件名或控制台輸入,對資源進行配置。 如果資源不存在,將會新建一個。可以使用 JSON 或者 YAML 格式。

參數選項 :

patch命令 :使用補丁修改,更新資源的欄位,也就是修改資源的部分內容

replace命令 : 通過文件或者標准輸入替換原有資源

convert命令 :不同的版本之間轉換配置文件

要以特定格式將詳細信息輸出到終端窗口,可以將 -o 或 --output 參數添加到支持的 kubectl 命令。

Kubectl 日誌輸出詳細程度是通過 -v 或者 --v 來控制的,參數後跟了一個數字表示日誌的級別。 Kubernetes 通用的日誌習慣和相關的日誌級別在 這里 有相應的描述。

以上是 kubectl 一些基本命令操作,需要時方便查閱。

閱讀全文

與kubernetes命令相關的資料

熱點內容
吉里吉里2安卓模擬器怎麼用 瀏覽:818
編譯器將匯編代碼 瀏覽:681
電路板加密錯誤 瀏覽:21
java自動機 瀏覽:363
相機連拍解壓 瀏覽:31
linuxssh服務重啟命令 瀏覽:330
茂名氫氣隔膜壓縮機 瀏覽:47
程序員地鐵寫程序 瀏覽:330
java的switchenum 瀏覽:329
pdf瓷器 瀏覽:905
怎樣用adb命令刷機 瀏覽:962
蘋果手機怎麼買app 瀏覽:303
如何找到伺服器連接地址 瀏覽:776
重慶百望伺服器地址 瀏覽:227
python中range後的結果 瀏覽:101
編譯器管理的存儲有哪些 瀏覽:956
顯控觸摸屏與單片機通信 瀏覽:426
宅之便利店app怎麼使用輕應用 瀏覽:320
去外國怎麼下載外國app 瀏覽:269
linux開機啟動配置 瀏覽:367