-1 通過run命令創建資源
% kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
上述命令表示以gcr.io/google-samples/kubernetes-bootcamp:v1作為image,創建一個名字為kubernetes-bootcamp的replication controller,並在自動分配的node上創建pod,然后運行對應的container,container在node host上映射的端口為8080;
-2 通過通過yaml文件創建資源(其他還支持操作get|apply|delete)
% kubectl create -f resource.yaml
-3 對k8s cluster里指定的資源進行操作
針對資源
deployment / pod / service / nameSpace / network / replicationSet
可執行
get / describe / logs / exec / explain
動作
% kubectl get deployments
% kubectl get pods
% kubectl get services
列出每個pod運行的詳細信息,包含當前所在的node和ip,除了wide還有yaml和json格式的輸出
% kubectl get pods -o wide
根據標簽值篩選pod,列出標簽中env=prod並且app=front的pod
% kubectl get pod -l env=prod, app=front
kubectl get動作缺省時從default的namespace下獲取資源,namespace為不同的資源進行了大的分類,從而可提供如dev, test, prod, user, private, public等不同的區域;
$ kubectl label node {node-name}disk=ssd
除了pod可以添加標簽,其他資源如node也可以添加標簽;在創建DaemonSet類型的pod時,pod模板中nodeSelector指定具有期望label的node,調度的時候則DaemonSet僅在指定的node上運行;
1 apiVersion: V1 2 kind: DaemonSet 3 metadata: 4 name: ssd-monitor 5 spec: 6 selector: 7 matchLabels: 8 app: kubia 9 template: 10 spec: 11 nodeSelector: 12 disk: ssd
在指定命名空間下創建pod
% kubectl create namespace dev
% kubectl create -f front.yaml --namespace dev
-4 通過replication controller逐步替換的方式升級指定service(deployment)下的pod,從而實現不停機升級;
% kubectl rolling-update {rc-old} {rc-new} --image={new-image}
基於new-image和rc-old創建rc-new,逐步替換rc-old控制的pod,rc-new每創建一個新的pod,rc-old則刪除一個舊的pod,並切換流量,最終完全替換rc-old的pod;
但這樣的滾動升級方式是通過rc-old的kubectl調用master api server實現的擴容、縮容,一旦rc-old kubectl所在的node網絡出現問題,則rc-new可能處於中間狀態;因此推薦使用Deployment的方式進行pod的創建和狀態維護。
-5 將指定的deployment進行擴容,實際是修改replicationController的spec.replicas字段
% kubectl scale deployments/kubernetes-bootcamp --replicas=4
變更指定deployment的image,觸發內部pod的rolling-update
% kubectl set image deployment kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
查看deployment中pod當前的升級部署狀態,和歷史升級記錄
% kubectl rollout status deployment {deployment-name}
% kubectl rollout history deployment {deployment-name}
一旦新的image有問題則將pod的image回滾到指定版本
% kubectl rollout undo deployment {deployment-name} --to-version={#}
為deployment foo創建autoScaler,當cpu使用率達到80%時,replicaSet會至多創建5個pod提供擴容服務;
% kubectl autoscale deployment foo --min=2 --max=5 --cpu-percent=80
-6 service通過LabelSelector將多個pods組建成一個邏輯分組,pods通過endpoints提供連接service,並定義某種可expose到外網訪問的策略,邏輯分組內的pods可分布於不同的nods上,因此service需要處理當某個node意外下線后,利用ReplicaSet將一同下線的pods在其他node上進行重建,同時保證新建的pods外網可訪問;
% kubectl expose deployment kubernetes-bootcamp --type=LoadBalancer --port=8080
上述命令表示以名字kubernetes-bootcamp的deployment運行的pod為基礎創建一個service,並以LoadBalancer的方式對外進行暴露,container在node host上映射的端口為8080;
執行下屬命令可以進入到具體pod內,並執行命令:
% kubectl exec -it hello-node-67f857c88c-rfdls /bin/bash
針對指定的pod執行命令:
$ kubectl exec {pod-name} {cmd-to-exec}
獲取指定pod的環境變量,
$ kubectl exec {pod-name} env
pod的元數據可以通過env項提供,但一旦pod元數據被更新,env變量的值將不會同步更新,因此推薦通過綁定downwardAPI卷的形式,將指定的pod元數據掛載到指定目錄,並可進行同步更新,但僅限於單個pod的元數據,想要獲取整個k8s的元數據還是需要通過k8s API server處獲取;
獲取當前cluster的kube master,kube dns等運行信息
% kubectl cluster-info
獲取當前k8s支持的api版本信息,yaml文件中需要指定匹配的api version:
% kubectl api-versions
