Kubernetes 之 kubectl 使用指南

kubectl 是 Kubernetes 自帶的客戶端,能夠用它來直接操做 Kubernetes 集羣。html

平常在使用 Kubernetes 的過程當中,kubectl 工具多是最經常使用的工具了,因此當咱們花費大量的時間去研究和學習 Kuernetes 的時候,那麼咱們就很是有必要去了解下如何高效的使用它了。node

從用戶角度來講,kubectl 就是控制 Kubernetes 的駕駛艙,它容許你執行全部可能的 Kubernetes 操做;從技術角度來看,kubectl 就是 Kubernetes API 的一個客戶端而已。mysql

Kubernetes API 是一個 HTTP REST API 服務,該 API 服務纔是 Kubernetes 的真正用到的用戶接口,因此 Kubernetes 經過該 API 進行實際的控制。這也就意味着每一個 Kubernetes 的操做都會經過 API 端點暴露出去,固然也就能夠經過對這些 API 端口進行 HTTP 請求來執行相應的操做。因此,kubectl 最主要的工做就是執行 Kubernetes API 的 HTTP 請求。nginx

工具使用參數git

get       #顯示一個或多個資源
describe  #顯示資源詳情
create    #從文件或標準輸入建立資源
update   #從文件或標準輸入更新資源
delete   #經過文件名、標準輸入、資源名或者 label 刪除資源
log       #輸出 pod 中一個容器的日誌
rolling-update  #對指定的 RC 執行滾動升級
exec  #在容器內部執行命令
port-forward #將本地端口轉發到 Pod
proxy   #爲 Kubernetes API server 啓動代理服務器
run     #在集羣中使用指定鏡像啓動容器
expose   #將 SVC 或 pod 暴露爲新的 kubernetes service
label     #更新資源的 label
config   #修改 kubernetes 配置文件
cluster-info #顯示集羣信息
api-versions #以」組/版本」的格式輸出服務端支持的 API 版本
version       #輸出服務端和客戶端的版本信息
help         #顯示各個命令的幫助信息
ingress-nginx  #管理 ingress 服務的插件(官方安裝和使用方式)

使用相關配置web

# Kubectl自動補全
$ source <(kubectl completion zsh)
$ source <(kubectl completion bash)

# 顯示合併後的 kubeconfig 配置
$ kubectl config view

# 獲取pod和svc的文檔
$ kubectl explain pods,svc

建立資源對象

分步驟建立sql

# yaml
kubectl create -f xxx-rc.yaml
kubectl create -f xxx-service.yaml

# json
kubectl create -f ./pod.json
cat pod.json | kubectl create -f -

# yaml2json
kubectl create -f docker-registry.yaml --edit -o json

一次性建立docker

kubectl create -f xxx-service.yaml -f xxx-rc.yaml

根據目錄下全部的 yaml 文件定義內容進行建立json

kubectl create -f <目錄>

使用 url 來建立資源api

kubectl create -f https://git.io/vPieo

查看資源對象

查看全部 Node 或 Namespace 對象

kubectl get nodes
kubectl get namespace

查看全部 Pod 對象

# 查看子命令幫助信息
kubectl get --help

# 列出默認namespace中的全部pod
kubectl get pods

# 列出指定namespace中的全部pod
kubectl get pods --namespace=test

# 列出全部namespace中的全部pod
kubectl get pods --all-namespaces

# 列出全部pod並顯示詳細信息
kubectl get pods -o wide
kubectl get replicationcontroller web
kubectl get -k dir/
kubectl get -f pod.yaml -o json
kubectl get rc/web service/frontend pods/web-pod-13je7
kubectl get pods/app-prod-78998bf7c6-ttp9g --namespace=test -o wide
kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}

# 列出該namespace中的全部pod包括未初始化的
kubectl get pods,rc,services --include-uninitialized

查看全部 RC 對象

kubectl get rc

查看全部 Deployment 對象

# 查看所有deployment
kubectl get deployment

# 列出指定deployment
kubectl get deployment my-app

查看全部 Service 對象

kubectl get svc
kubectl get service

查看不一樣 Namespace 下的 Pod 對象

kubectl get pods -n default
kubectl get pods --all-namespace

查看資源描述

顯示 Pod 詳細信息

kubectl describe pods/nginx
kubectl describe pods my-pod
kubectl describe -f pod.json

查看 Node 詳細信息

kubectl describe nodes c1

查看 RC 關聯的 Pod 信息

kubectl describe pods <rc-name>

更新修補資源

滾動更新

# 滾動更新 pod frontend-v1
kubectl rolling-update frontend-v1 -f frontend-v2.json

# 更新資源名稱並更新鏡像
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

# 更新 frontend pod 中的鏡像
kubectl rolling-update frontend --image=image:v2

# 退出已存在的進行中的滾動更新
kubectl rolling-update frontend-v1 frontend-v2 --rollback

# 強制替換; 刪除後從新建立資源; 服務會中斷
kubectl replace --force -f ./pod.json

# 添加標籤
kubectl label pods my-pod new-label=awesome

# 添加註解
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq

修補資源

# 部分更新節點
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

# 更新容器鏡像;spec.containers[*].name 是必須的,由於這是合併的關鍵字
kubectl patch pod valid-pod -p \
    '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
Scale 資源
# Scale a replicaset named 'foo' to 3
kubectl scale --replicas=3 rs/foo

# Scale a resource specified in "foo.yaml" to 3
kubectl scale --replicas=3 -f foo.yaml

# If the deployment named mysql's current size is 2, scale mysql to 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

# Scale multiple replication controllers
kubectl scale --replicas=5 rc/foo rc/bar rc/baz

刪除資源對象

基於 xxx.yaml 文件刪除 Pod 對象

# yaml文件名字按照你建立時的文件一致
kubectl delete -f xxx.yaml

刪除包括某個 label 的 pod 對象

kubectl delete pods -l name=<label-name>

刪除包括某個 label 的 service 對象

kubectl delete services -l name=<label-name>

刪除包括某個 label 的 pod 和 service 對象

kubectl delete pods,services -l name=<label-name>

刪除全部 pod/services 對象

kubectl delete pods --all
kubectl delete service --all
kubectl delete deployment --all

編輯資源文件

在編輯器中編輯任何 API 資源

# 編輯名爲docker-registry的service
kubectl edit svc/docker-registry

直接執行命令

在寄主機上,不進入容器直接執行命令

執行 pod 的 date 命令,默認使用 pod 的第一個容器執行

kubectl exec mypod -- date
kubectl exec mypod --namespace=test -- date

指定 pod 中某個容器執行 date 命令

kubectl exec mypod -c ruby-container -- date

進入某個容器

kubectl exec mypod -c ruby-container -it -- bash

查看容器日誌

直接查看日誌

# 不實時刷新
kubectl logs mypod
kubectl logs mypod --namespace=test

查看日誌實時刷新

kubectl logs -f mypod -c ruby-container

經常使用命令總結

!image.png

image.png

image.png

做者: Escape 連接: https//www.escapelife.site/posts/2b31e1a2.html

相關文章
相關標籤/搜索