kubernetes集羣管理-------kubectl命令行工具的使用

一、概述

Kubectl 是管理k8s集羣的命令行工具,通過生成的 json 格式傳遞給 apiserver 進行創建、查
看、管理的操作。

二、kubectl 語法

2.1、語法格式

可以使用–help來查詢語法格式

[ root@localhost bin ]# kubectl --help

在這裏插入圖片描述
kubectl 的語法格式:

kubectl [command] [TYPE] [NAME] [flags]

1、command

指定要在一個或多個資源進行的操作,例如create,apply,get,describe,delete。

2、TYPE

指定資源類型。資源類型不區分大小寫,可以指定單數,複數或縮寫形式。
在這裏插入圖片描述
3、NAME

  • 注意點:

名稱有大小寫的區分。
如果省略名稱,則顯示所有資源的詳細信息,如“kubectl get pods”。
在對多個資源執行操作時,我們可以按類型和名稱指定每個資源,或指定一個或多個文件

  • 要按類型和名稱指定資源:

  • 如果資源類型相同,則對資源進行分組

例:

kubectl get pod example-pod1 example-pod2
  • 分別指定多種資源類型

例:

kubectl get pod/example-pod1 replicationcontroller/example-rc1
  • 要使用一個或多個文件指定資源
-f file1 -f file2 -f file<#>
//注意使用YAML而不是JSON格式的文件,因爲YAML往往更加用戶友好,特別是對於配置文件。

例:
kubectl get pod -f ./pod.yaml

4、flags

指定的可選標誌,不過值得注意的是,使用命令行指定參數會覆蓋默認值以及相關的環境變量。
例如,我們可以使用-s或–server標誌來指定Kubernetes API服務器的地址和端口。

2.2、commond命令詳情瞭解

  • 基礎命令:
類型 命令 描述
基礎命令 create 通過文件名或標準輸入創建資源
expose 將一個資源公開爲一個新的Kubernetes Service
run 在集羣中運行一個指定的鏡像
set 爲 objects 設置一個指定的特徵
get 顯示一個或多個資源
explain 查看資源的文檔
edit 在服務器上編輯一個資源
delete 通過文件名、標準輸入、資源名稱或標籤選擇器來刪除資源
  • 部署命令:
類型 命令 描述
部署命令 rollout 管理資源的發佈
scale 爲Deployment,ReplicaSet,Replication Controller 或 Job設置一個新的副本數量
autoscale 自動調整一個Deployment,ReplicaSet,Replication Controller 或 Job的副本數量
  • 集羣管理命令:
類型 命令 描述
集羣管理命令 certificate 修改證書資源
cluster-info 顯示集羣信息
top 顯示資源(CPU/Memory/Storage)使用。需要Heapster運行
cordon 標記節點不可調度
uncordon 標記節點可調度
drain 驅逐節點上的應用,準備下線維護
taint 更新一個或多個node上的taint標記
  • 調試命令:
類型 命令 描述
調試命令 describe 顯示指定資源或資源組的詳細信息
logs 在一個Pod中打印一個容器日誌。如果Pod只有一個容器, 容器名稱是可選的
attach 附加到一個運行的容器
exec 執行命令到容器
port-forward 轉發一個或多個本地端口到一個pod
proxy 運行一個proxy到KubemetesAPIserver
cp 拷貝文件或目錄到容器中
auth 檢查授權

三、命令的使用

#常用語法:
kubectl run NAME --image=image [--env="key=value"參數] [--port=port端口] [--replicas=replicas副本集] [--dry-run=bool狀態] [--overrides=inline-json] [--command命令] -- [COMMAND] [args...] [options]`

例1:

//根據上面的格式創建一個名字爲nginx-deployment 的資源Pod,鏡像是nginx,端口是80,有三個副本數量。

[root@master1 ~]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3

kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-deployment created

[root@master1 ~]# kubectl get pods   #查看剛剛創建的Pod資源
NAME                                READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-r9gp4               1/1     Running   1          12h
nginx-deployment-5477945587-4rvlq   1/1     Running   0          2m53s
nginx-deployment-5477945587-kd9m8   1/1     Running   0          2m53s
nginx-deployment-5477945587-zsv7l   1/1     Running   0          2m53s

在這裏插入圖片描述

[root@master1 ~]# kubectl get pods -o wide   #查看3個副本所在的node節點

在這裏插入圖片描述

[root@master1 ~]# kubectl get all    #查看default空間內的所有資源

在這裏插入圖片描述
刪除Pod資源nginx-deployment

[root@master1 ~]# kubectl delete deploy/nginx-deployment

在這裏插入圖片描述

3.1、項目的生命週期

  • 創建->發佈->更新->回滾->刪除

3.1.1、創建nginx的Pod資源

[root@master1 ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created

[root@master1 ~]# kubectl get pods,deployment,replicaset
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7697996758-2cm9d   1/1     Running   0          2m54s
pod/nginx-7697996758-2vbqs   1/1     Running   0          2m54s
pod/nginx-7697996758-kst46   1/1     Running   0          2m54s

NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/nginx   3         3         3            3           2m54s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.extensions/nginx-7697996758   3         3         3       2m54s

//創建Pod資源的同時也創建了3個控制器和3個副本集

3.1.2、發佈nginx service提供LVS負載均衡的功能

#常用語法:
kubectl expose (-f FILENAME | TYPE NAME) [--port=port羣集之間內部通信的端口] [--protocol=TCP|UDP|SCTP] [--target-port對外暴露的端口=number-or-name] [--name=name指定名稱] [--external-ip=external-ip-of-service] [--type=type指定類型] [options]

[root@master1 ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

在這裏插入圖片描述
這裏的NodePort提供了一個負載均衡,也就是所有node節點的48656端口都可訪問nginx-service。

//查看網絡狀態詳細信息
[root@master1 ~]# kubectl get pods -o wide

在這裏插入圖片描述
或者查看後端提供負載均衡的節點

[root@master1 ~]# kubectl get endpoints

在這裏插入圖片描述

  • kubernetes裏kube-proxy支持三種模式,在v1.8之前我們使用的是iptables 以及 userspace兩種模式,在kubernetes 1.8之後引入了ipvs模式。所以所有的node節點都可安裝ipvsadmin工具,用於查看負載均衡的服務端口
    在這裏插入圖片描述
[root@node1 ~]# ipvsadm -L -n
[root@node2 ~]# ipvsadm -L -n
  • 在node1和node2節點上查看都有LVS負載均衡功能,說明服務發佈成功!通過任意node節點:端口48656都可以訪問。
    在這裏插入圖片描述
    在這裏插入圖片描述

在master節點查看Pod資源的日誌

[root@master1 ~]# kubectl get pods

在這裏插入圖片描述
接下來用瀏覽器訪問Pod資源,然後在查看相對應的日誌內容。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

3.1.3、更新nginx 爲1.14版本

首先在谷歌瀏覽器中打開開發者選項—>F5刷新訪問—>找到network-- ->點擊name —>找到headers頭部信息,就可以看到nginx版本信息。
在這裏插入圖片描述
在master1節點上

//通過set命令來獲取更新的修改模板

[root@master1 ~]# kubectl set --help

在這裏插入圖片描述

//更新nginx爲1.14版本
[root@master1 ~]# kubectl set image deployment/nginx nginx=nginx:1.14

//處於動態監聽狀態
[root@master1 ~]# kubectl get pods -w  

在這裏插入圖片描述
更新過程中變化:

1、容器資源更新過程中不能重啓

2、容器更新是先創建一個新的容器,再刪除一個原有的容器,完成更新。

3、更新過程中保證副本數量是3個

這個時候再次刷新並查看瀏覽器的nginx版本
在這裏插入圖片描述

3.1.4、業務回滾上一個版本

如果業務更新完,大量用戶訪問出現error問題,那麼就要業務回滾上一個版本。

#查看歷史版本
[root@master1 ~]# kubectl rollout history deployment/nginx

在這裏插入圖片描述

#執行回滾到上一次版本
[root@master1 ~]# kubectl rollout undo deployment/nginx

#檢查回滾狀態
[root@master1 ~]# kubectl rollout status deployment/nginx

在這裏插入圖片描述
//再次查看歷史版本,在瀏覽器中刷新查看版本
在這裏插入圖片描述
在這裏插入圖片描述

3.1.5、刪除業務

查看deployment資源的名稱

[root@master1 ~]# kubectl get deployment
NAME    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx   3         3         3            3           164m

1、刪除nginx項目的 deployment資源

[root@master1 ~]# kubectl delete deployment/nginx

在這裏插入圖片描述
2、刪除nginx的 service資源

[root@master1 ~]# kubectl get svc

在這裏插入圖片描述

3.2、其他的命令

  • 1、查看具體資源的詳細信息
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) Pod資源名稱

例:查看deployment資源的詳細信息

kubectl describe deployment/nginx
  • 2、進入相應pod中
kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
  • 3、查看生成的YAML格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml
  • 4、查看生成的JSON格式文件
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
  • 5、生成YAML 、 JSON文件導出
kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json(yaml) > test.json(yaml)
  • 6、將現有資源進行導出
kubectl get svc/nginx-svc --export -o yaml > nginx-svc.yaml
  • 7、測試命令正確性,不執行(類似shell腳本中的sh -n)
kubectl run nginx --image=nginx --port=80 --replicas=2 --dry-run
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章