使用kubectl進行增、刪、查、改等常用操作
查看kubectl命令幫助
- kubectl -h
kubectl controls the Kubernetes cluster manager. Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/ Basic Commands (Beginner): #基本命令集,適合新手 create Create a resource from a file or from stdin. expose 使用 replication controller, service, deployment 或者 pod 並暴露它作為一個 新的 Kubernetes Service run 在集群中運行一個指定的鏡像 set 為 objects 設置一個指定的特征 run-container 在集群中運行一個指定的鏡像. This command is deprecated, use "run" instead Basic Commands (Intermediate): #基本命令集,適合有一定基礎的人 get 顯示一個或更多 resources explain 查看資源的文檔 edit 在服務器上編輯一個資源 delete Delete resources by filenames, stdin, resources and names, or by resources and label selector Deploy Commands: #發布相關的命令集 rollout Manage the rollout of a resource rolling-update 完成指定的 ReplicationController 的滾動升級 scale 為 Deployment, ReplicaSet, Replication Controller 或者 Job 設置一個新的副本數量 autoscale 自動調整一個 Deployment, ReplicaSet, 或者 ReplicationController 的副本數量 Cluster Management Commands: #集群管理相關的命令集 certificate 修改 certificate 資源. cluster-info 顯示集群信息 top Display Resource (CPU/Memory/Storage) usage. cordon 標記 node 為 unschedulable uncordon 標記 node 為 schedulable drain Drain node in preparation for maintenance taint 更新一個或者多個 node 上的 taints Troubleshooting and Debugging Commands: #故障檢測及調試相關命令集 describe 顯示一個指定 resource 或者 group 的 resources 詳情 logs 輸出容器在 pod 中的日志 attach Attach 到一個運行中的 container exec 在一個 container 中執行一個命令 port-forward Forward one or more local ports to a pod proxy 運行一個 proxy 到 Kubernetes API server cp 復制 files 和 directories 到 containers 和從容器中復制 files 和 directories. auth Inspect authorization Advanced Commands: #高級命令集 apply 通過文件名或標准輸入流(stdin)對資源進行配置 patch 使用 strategic merge patch 更新一個資源的 field(s) replace 通過 filename 或者 stdin替換一個資源 convert 在不同的 API versions 轉換配置文件 Settings Commands: #設置相關的命令集 label 更新在這個資源上的 labels annotate 更新一個資源的注解 completion Output shell completion code for the specified shell (bash or zsh) Other Commands: #其他命令集 api-versions Print the supported API versions on the server, in the form of "group/version" config 修改 kubeconfig 文件 help Help about any command plugin Runs a command-line plugin version 輸出 client 和 server 的版本信息 Usage: #使用格式 kubectl [flags] [options] Use "kubectl <command> --help" for more information about a given command. #各個子命令如何獲取命令幫助 Use "kubectl options" for a list of global command-line options (applies to all commands). #查看命令的通用選項(所有命令)
可以看到,命令幫助很人性化的幫我們對各個命令做了划分,讓我們可以更好的學習和使用,下面我們開始使用kubectl命令在命令行下測試相關命令的用法
創建一個應用程序
1 創建一個應用程序,我們使用 "kubectl run " 命令,是 "kubectl run -h" 查看命令使用幫助,命令說明告訴我們這個命令可以創建一個deployment或者job的容器
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
2 查看一下deployment的信息,是否有當前創建的
kubectl get deployment
NAME(名稱) DESIRED(需要pod的個數) CURRENT(當前已經存在的個數) UP-TO-DATE(最新創建的pod個數) AVAILABLE(可用的pod個數) AGE(deployment存活的時間)
3 獲取pod的信息,-o wide 表示更詳細的顯示信息
訪問創建的 pod (nginx-deploy)
1 集群內訪問
curl 10.32.0.4
2 集群外部訪問
當我們在集群之外訪問是發現無法訪問,那么集群之外的客戶端如何才能訪問呢?這就需要我們的service服務了,下面我們就創建一個service,是外部客戶端可以訪問我們的pod
創建一個service
使用kubectl expose 可以創建一個service ,可以使用 kubectl expose -h命令查看命令幫助
kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --type=NodePort
查看我們service的詳細信息
kubectl get svc -o wide
使用集群外客戶端再一次訪問,需要使用集群任意節點的IP地址加上暴露的端口號
service服務有個特點,如果端口暴露類型為NodePort,那么可以通過集群內任意一台主機加暴露的端口進行訪問
對nginx-deploy這個deployment進行擴容和縮減操作
查看 deployment 信息
kubectl get deployment
擴容: 對名稱為nginx-deploy類型為deployment的對象進行擴容,有初始的1個擴容到五個
kubectl scale --replicas=5 deployment nginx-deploy
查看 pod 擴容的過程
kubectl get pod -w
縮減:
使用replicas指定我們想要的個數即可
kubectl scale --replicas=3 deployment nginx-deploy
現在我們對 nginx-deploy進行滾動升級及回滾操作,由1.14-alpine 升級到
1.15-alpine,並由1.15-alpine回滾到1.14-alpine版本(nginx在docker hub上版本信息:https://hub.docker.com/_/nginx/)
滾動升級:
kubectl set image deployment nginx-deploy nginx-deploy=nginx:1.15-alpine --record
觀察滾動升級的過程
查看任意一個pod的信息,看看鏡像是否升級
版本回滾:
--to-revision 參數可以指定回退的版本
查看任意一個pod的信息,看看鏡像是否回滾到1.14-alpine版本
服務發現
先創建一個新應用,叫myapp:
kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
運行一個客戶端Pod,在客戶端Pod內部通過service的名稱去訪問nginx服務
kubectl run client -it --image=busybox --replicas=1 --restart=Never
在busybox上測試訪問
wget -O - -q 10.32.0.5 wget -O - -q 10.32.0.8
為myapp創建一個service
kubectl expose deployment myapp --name=myapp --port=80 kubectl get svc
通過在busyboy上面訪問 myapp service 時隨機分發到不同的pod
對此也可以嘗試對 myapp(deployment) 做一些滾動升級,刪除修改通過在集群內部通過服務ip會自動的發現 myapp pod
如果想通過一個固定地址去訪問這個myapp,可以利用nginx做反向代理
這一篇筆記只是演示如何通過手動去創建、更新、回滾一個應用。這只是在使用K8S中,最簡單但是無法實現其全部功能 、全部定制的一種使用方式。而在真正使用K8S時,基本不會這樣去操作。我們使用K8s的常用方式,應該是基於YAML格式的配置文件來定義和創建資源
操作的命令做一個大致的總結
- kubectl run 創建一個deployment或job來管理創建的容器
- kubectl get 顯示一個或多個資源,可以使用標簽過濾,默認查看當前名稱空間的資源
- kubectl expose 將一個資源暴露為一個新的kubernetes的service資源,資源包括pod (po), service (svc), replicationcontroller (rc),deployment(deploy), replicaset (rs)
- kubectl describe 顯示特定資源或資源組的詳細信息
- kubectl scale 可以對Deployment, ReplicaSet, Replication Controller, 或者StatefulSet設置新的值,可以指定一個或多個先決條件 kubectl set #更改現有的應用程序資源
- kubectl rollout 資源回滾管理