kubernetes 應用快速入門


使用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  資源回滾管理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM