kubernetes基礎與常用命令
原文地址
https://blog.csdn.net/footless_bird/article/details/125798691
官方文件
安裝工具
在 Linux 系統中安裝並設定 kubectl
-
用 curl 在 Linux 系統中安裝 kubectl
-
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
-
如需下載某個指定的版本,請用指定版本號替換該命令的這一部分: $(curl -L -s https://dl.k8s.io/release/stable.txt)。
-
例如,要在 Linux 中下載 v1.25.0 版本,請輸入:
-
驗證該可執行檔案(可選步驟)
-
下載 kubectl 校驗和檔案:
-
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
-
基於校驗和檔案,驗證 kubectl 的可執行檔案:
- echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
-
下載的 kubectl 與校驗和檔案版本必須相同。
-
-
-
安裝 kubectl
-
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
-
說明:
- 即使你沒有目標系統的 root 許可權,仍然可以將 kubectl 安裝到目錄 ~/.local/bin 中:
- chmod +x kubectl
- mkdir -p ~/.local/bin
- mv ./kubectl ~/.local/bin/kubectl
-
之後將 ~/.local/bin 附加(或前置)到 $PATH
-
-
執行測試,以保障你安裝的版本是最新的:
- kubectl version --client
-
-
用原生包管理工具安裝
-
基於debian的發行版(apt)
-
更新 apt 包索引,並安裝使用 Kubernetes apt 倉庫所需要的包:
- sudo apt-get update
- sudo apt-get install -y ca-certificates curl
-
如果你使用 Debian 9(stretch)或更早版本,則你還需要安裝 apt-transport-https:
- sudo apt-get install -y apt-transport-https
-
下載 Google Cloud 公開簽名秘鑰:
- sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
-
新增 Kubernetes apt 倉庫:
- echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
更新 apt 包索引,使之包含新的倉庫並安裝 kubectl:
- sudo apt-get update
- sudo apt-get install -y kubectl
-
-
基於redhat發行版(rpm)
-
官方(會超時)
- cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
- enabled=1
- gpgcheck=1
- gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- EOF
- sudo yum install -y kubectl
-
使用阿里雲映象安裝
-
前置步驟
-
安裝docker
-
設定主機名稱
-
檢視Linux核心版本
- uname -r
-
或者使用 uname -a
-
設定主機名稱為k8s-master,重新連線顯示生效
- hostnamectl --static set-hostname k8s-master
-
檢視主機名稱
- hostname
-
-
禁用SELinux
-
永久禁用SELinux
- vim /etc/sysconfig/selinux
- SELINUX=disabled
-
臨時 禁用SELinux,讓容器可以讀取主機檔案系統
- setenforce 0
-
-
關閉系統Swap
-
關閉sawp分割槽 (可以不關閉,使用引數--ignore-preflight-errors=swap)
-
臨時關閉
-
swapoff -a
-
vi /etc/fstab
-
註釋掉swap分割槽
-
/dev/mapper/centos-swap swap
-
-
-
-
配置docker國內映象加速
-
修改daemon.json 檔案,沒有就建立一個
-
vim /etc/docker/daemon.json
- {
"registry-mirrors" : ["https://q5bf287q.mirror.aliyuncs.com", "https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries":["192.168.1.5"]
}
- {
-
-
重新載入配置
- systemctl daemon-reload
-
重啟docker
- systemctl restart docker
-
-
-
如果遇到此錯誤
-
failure: repodata/repomd.xml from kubernetes: [Errno 256] No more mirrors to try.
-
cat <
/etc/yum.repos.d/kubernetes.repo - [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
- enabled=1
- gpgcheck=0
- repo_gpgcheck=0
- gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
-
-
-
-
-
-
用其他包管理工具安裝
-
如果你使用的 Ubuntu 或其他 Linux 發行版,內建支援 snap 包管理工具, 則可用 snap 命令安裝 kubectl。
- snap install kubectl --classic
- kubectl version --client
-
如果你使用 Linux 系統,並且裝了 Homebrew 包管理工具, 則可以使用這種方式安裝 kubectl。
- brew install kubectl
- kubectl version --client
-
-
驗證 kubectl 配置
-
透過獲取叢集狀態的方法,檢查是否已恰當的配置了 kubectl:
- kubectl cluster-info
-
-
kubectl 的可選配置和外掛
-
啟用 shell 自動補全功能
-
kubectl 為 Bash、Zsh、Fish 和 PowerShell 提供自動補全功能,可以為你節省大量的輸入。
-
bash
-
kubectl 的 Bash 補全指令碼可以用命令 kubectl completion bash 生成。 在 Shell 中匯入(Sourcing)補全指令碼,將啟用 kubectl 自動補全功能。
-
補全指令碼依賴於工具 bash-completion
-
可以用命令 type _init_completion 檢查 bash-completion 是否已安裝
-
安裝 bash-completion
- sudo apt-get install bash-completion
- yum install bash-completion
-
依據包管理工具的實際情況,你需要在 ~/.bashrc 檔案中手工匯入此檔案
- source /usr/share/bash-completion/bash_completion
-
-
-
fish
-
kubectl 透過命令 kubectl completion fish 生成 Fish 自動補全指令碼。 在 shell 中匯入(Sourcing)該自動補全指令碼,將啟動 kubectl 自動補全功能。
-
kubectl completion fish
-
為了在所有的 shell 會話中實現此功能,請將下面內容加入到檔案 ~/.config/fish/config.fish
- kubectl completion fish | source
-
-
zsh
-
kubectl completion zsh
-
為了在所有的 shell 會話中實現此功能,請將下面內容加入到檔案 ~/.zshrc 中。
- source <(kubectl completion zsh)
-
如果你收到 2: command not found: compdef 這樣的錯誤提示,那請將下面內容新增到 ~/.zshrc 檔案的開頭:
- autoload -Uz compinit
- compinit
-
-
-
安裝 kubectl convert 外掛
-
一個 Kubernetes 命令列工具 kubectl 的外掛,允許你將清單在不同 API 版本間轉換。 這對於將清單遷移到新的 Kubernetes 發行版上未被廢棄的 API 版本時尤其有幫助
-
用以下命令下載最新發行版:
- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert"
-
驗證該可執行檔案(可選步驟)
-
下載 kubectl-convert 校驗和檔案:
- curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256"
-
基於校驗和,驗證 kubectl-convert 的可執行檔案:
- echo "$(cat kubectl-convert.sha256) kubectl-convert" | sha256sum --check
-
-
安裝 kubectl-convert
- sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
-
驗證外掛是否安裝成功
- kubectl convert --help
-
-
mac os上安裝
windows上安裝
kubeadm、kubelet 和 kubectl
-
安裝
-
ubuntu
- apt-get install kubeadm kubectl kubelet
-
centos
- yum -y install kubeadm kubectl kubelet
-
-
kubeadm:用來初始化叢集的指令。
-
kubelet:在叢集中的每個節點上用來啟動 Pod 和容器等。
-
kubectl:用來與叢集通訊的命令列工具。
-
kubeadm 不能幫你安裝或者管理 kubelet 或 kubectl, 所以你需要確保它們與透過 kubeadm 安裝的控制平面的版本相匹配
-
kubelet 的版本不可以超過 API 伺服器的版本
- 1.7.0 版本的 kubelet 可以完全相容 1.8.0 版本的 API 伺服器,反之則不可以
解決kubeadm init報錯
安裝minikube
注意事項
-
wsl不支援systemctl命令,可以使用service命令代替
-
例子
- 執行sudo systemctl start docker報錯
- 使用sudo service docker start即可
- 或者使用sudo /etc/init.d/docker start
-
-
wsl啟動docker返回成功,但是服務未啟動
Minikube
Minikube是一種輕量化的Kubernetes叢集,是Kubernetes社群為了幫助開發者和學習者能夠更好學習和體驗k8s功能而推出的
使用 Minikube 和 Katacoda 在 Kubernetes 上執行一個應用示例
centos安裝kubectl kubeadm kubelet
-
安裝指定版本的kubectl kubeadm kubelet(需要安裝1.23.6及以下版本,最新版k8s不支援docker)
-
解決yum拉取阿里雲映象報錯
-
解決kubeadm init 失敗
-
解決kubelet start失敗
在ubuntu上安裝minikube
-
https://blog.csdn.net/weixin_45540609/article/details/119536817
-
啟動服務
- minikube start --cpus 2 --memory 2000M --nodes 1 --image-mirror-country='cn' -p mininode-demo
解決kubelet 啟動報錯
解決kubeadm init報錯
詳細部署文件-這個文件最完整
-
解決kubectl get pods提示connection localhost:8080 was refused
-
解決kubectl apply -f calico.yaml
報錯: no matches for kind “PodDisruptionBudget“ in version “policy/v1“
刪除啟動時自動生成的大量ip
一、command操作命令
常用操作引數分類
子主題 2
二、pod相關常用命令
# 檢視pod列表
-
$ kubectl get pod [-o wide] [-n NAMESPACE | -A]
-
-o wide :檢視pod執行在哪個節點上以及ip地址資訊
-
-n NAMESPACE :指定名稱空間
-
--all-namespaces : 所有名稱空間
-
--include-uninitialized : 包括未初始化的
-
# 檢視指定pod的資訊
- $ kubectl get pod POD
# 顯示pod節點的標籤資訊
- $ kubectl get pod --show-labels
# 根據指定標籤匹配到具體的pod
- $ kubectl get pod -l app=example(標籤鍵值對)
# 檢視某pod的描述
- $ kubectl describe pod POD [-n NAMESPACE]
# 輸出一個單容器pod POD的日誌到標準輸出
- $ kubectl logs podName
# 持續輸出一個單容器pod POD的日誌到標準輸出
- $ kubectl logs -f podName
# 持續輸出一個單容器pod POD的日誌到標準輸出,從最新100行開始
- $ kubectl logs -f -n namespace --tail 100 podName
# 指定時間段輸出日誌
- $ kubectl logs podName --since=1h
# 指定時間戳輸出日誌
- $ kubectl logs podName --since-time=2018-11-01T15:00:00Z
# 檢視執行pod的環境變數
- $ kubectl exec podName env
# 擴容
- $ kubectl scale deployment DEPLOYMENT --replicas=8
logs #查詢POD的logs日誌資訊
- kubectl logs nginx-86546d6646-fdcd9
cp #複製檔案到POD或者從POD複製檔案到本地
-
複製檔案到pod容器
- kubectl cp index.html nginx-86546d6646-h7m2l:/usr/share/nginx/html/
-
從POD的容器裡拷出來
- kubectl cp nginx-86546d6646-h7m2l:/usr/share/nginx/html/ index.html
-
注:
- 有些POD無法使用CP,可能是沒有安裝tar,須要進入容器,設定YUM源,安裝後,可以使用。
attach #實時監控相關POD資料,相當於tail -F
-
實時檢視
- kubectl attach nginx-86546d6646-fdcd9
三、基礎命令
create/apply:建立資源
-
格式:
- $ kubectl create -f xxx.yaml # 不建議使用,無法更新,必須先delete
-
建立Deployment和Service資源
- $ kubectl create -f demo-deployment.yaml
- $ kubectl create -f demo-service.yaml
-
建立+更新,可以重複使用
- $ kubectl apply -f xxx.yaml
-
應用資源,該目錄下的所有 .yaml, .yml, 或 .json 檔案都會被使用
- $ kubectl apply -f
- $ kubectl apply -f
-
建立名稱空間
- $ kubectl create namespace test-demo
get:獲得資源資訊
-
檢視預設名稱空間中所有的資源資訊(pod、service、deployment、replicaset)
- $ kubectl get all [-A | -n {名稱空間名稱}]
-
檢視指定命令空間下面的pod/svc/deployment
-
$ kubectl get pod/svc/deployment [-o wide] -n NAMESPACE
-
-o wide:選項可以檢視存在哪個對應的節點
-
-
-
檢視所有namespace下面的pod/svc/deployment
- $ kubectl get pod/svc/deployment --all-namespaces
- $ kubectl get pod/svc/deployment -A
-
檢視node節點列表
- $ kubectl get node
-
顯示node節點的標籤資訊
- $ kubectl get node --show-labels
-
檢視服務的詳細資訊,顯示了服務名稱,型別,叢集ip,埠,時間等資訊
- $ kubectl get service # 檢視預設名稱空間的服務
- $ kubectl get svc
- $ kubectl get svc [-A | -n {名稱空間名稱}]
-
檢視名稱空間
- $ kubectl get namespaces
- $ kubectl get ns
-
檢視目前所有的replica set,顯示了所有的pod的副本數,以及他們的可用數量以及狀態等資訊
- $ kubectl get rs
-
檢視已經部署了的所有應用,可以看到容器,以及容器所用的映象,標籤等資訊
- $ kubectl get deployments
- $ kubectl get deploy [-o wide]
delete:刪除資源
-
根據yaml檔案刪除對應的資源,但是yaml檔案並不會被刪除,這樣更加高效
- $ kubectl delete -f demo-deployment.yaml
- $ kubectl delete -f demo-service.yaml
-
根據deployment資源來進行刪除,會同時刪除deployment、pod和service資源
- $ kubectl delete deployment DEPLOYMENT [-n NAMESPACE]
-
根據label刪除
-
$ kubectl delete pod -l app=APP [-n NAMESPACE]
-
-l app=APP :使用標籤(label),且標籤內容為”app=APP“
-
-
-
強制立即刪除某pod。注:無法刪除對應的應用,因為存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來
-
$ kubectl delete pod POD --grace-period=0 --force [-n NAMESPACE]
-
--force :強制
-
--grace-period=0 :延遲0秒。預設未設定的情況下會等待30s
-
-
$ kubectl delete pod podName --now [-n NAMESPACE]
-
-
刪除所有pod
- $ kubectl delete pods --all
run:建立並執行容器
-
在叢集中建立並執行一個或多個容器
- run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
-
示例:執行一個名稱為nginx,副本數為3,標籤為app=example,映象為nginx:1.10,埠為80的容器例項
- $ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
-
示例:執行一個名稱為nginx,副本數為3,標籤為app=example,映象為nginx:1.10,埠為80的容器例項,並繫結到k8s-node1上
- $ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'
expose:建立service服務
-
建立一個service服務,並且暴露埠讓外部可以訪問
-
指定deployment、service、replica set、replication controller或pod,並使用該資源的選擇器作為指定埠上新服務的選擇器。deployment 或 replica set只有當其選擇器可轉換為service支援的選擇器時,即當選擇器僅包含matchLabels元件時才會作為暴露新的Service。
-
資源包括(不區分大小寫):
- pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)
-
語法
- kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
-
示例:建立一個nginx服務並且暴露埠讓外界可以訪問
-
$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
-
--port :本地埠
-
--target-port :容器埠
-
-
-
為RC的nginx建立service,並透過Service的80埠轉發至容器的8000埠上
- kubectl expose rc nginx --port=80 --target-port=8000
-
由“nginx-controller.yaml”中指定的type和name標識的RC建立Service,並透過Service的80埠轉發至容器的8000埠上
- kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000
set:修改應用的資源
-
配置應用的一些特定資源,也可以修改應用已有的資源
-
使用 kubectl set --help檢視,它的子命令,env,image,resources,selector,serviceaccount,subject。
-
語法:
- resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
-
set resources
-
kubectl set resources 命令:這個命令用於設定資源的一些範圍限制。
-
資源物件中的Pod可以指定計算資源需求(CPU-單位m、記憶體-單位Mi),即使用的最小資源請求(Requests),限制(Limits)的最大資源需求,Pod將保證使用在設定的資源數量範圍。
-
可用資源物件包括(支援大小寫):replicationcontroller、deployment、daemonset、job、replicaset。
-
將deployment的nginx容器cpu限制為“200m”,將記憶體設定為“512Mi”
- $ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
-
設定所有nginx容器中 Requests和Limits
- $ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
-
刪除nginx中容器的計算資源值
- $ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
-
-
set selector
-
kubectl set selector 命令
- 設定資源的 selector(選擇器)。如果在呼叫"set selector"命令之前已經存在選擇器,則新建立的選擇器將覆蓋原來的選擇器。
-
要求
- 必須以字母或數字開頭,最多包含63個字元
- 可使用:字母、數字、連字元" - " 、點".“和下劃線” _ "。
- 如果指定了–resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
-
注意:
- 目前 selector 命令只能用於 Service 物件。
-
語法:
- selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]
-
-
set image
-
kubectl set image 命令:用於更新現有資源的容器映象。
-
可用資源物件包括:
- pod (po)
- replicationcontroller (rc)
- deployment (deploy)
- daemonset (ds)
- job
- replicaset (rs)
-
語法:
-
image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
-
將deployment中的nginx容器映象設定為“nginx:1.9.1”
- $ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
-
所有deployment和rc的nginx容器映象更新為“nginx:1.9.1”
- $ kubectl set image deployments,rc nginx=nginx:1.9.1 --all
-
將daemonset abc的所有容器映象更新為“nginx:1.9.1”
- $ kubectl set image daemonset abc *=nginx:1.9.1
-
從本地檔案中更新nginx容器映象
- $ kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml
-
-
explain:顯示資源文件資訊
- $ kubectl explain rs
edit:編輯資源資訊
-
編輯Deployment nginx的一些資訊
- $ kubectl edit deployment nginx
-
編輯service型別的nginx的一些資訊
- $ kubectl edit service/nginx
設定命令
-
label:更新資源上的標籤
-
用於更新(增加、修改或刪除)資源上的 label(標籤)
- label 必須以字母或數字開頭,可以使用字母、數字、連字元、點和下劃線,最長63個字元。
- 如果 --overwrite 為 true,則可以覆蓋已有的label,否則嘗試覆蓋label將會報錯。
- 如果指定了–resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
-
語法:
-
label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
-
給名為foo的Pod新增label unhealthy=true
- $ kubectl label pods POD名稱 unhealthy=true
-
給名為foo的Pod修改label 為 'status' / value 'unhealthy',且覆蓋現有的value
- $ kubectl label pods POD名稱 status=unhealthy --overwrite
-
給 namespace 中的所有 pod 新增 label
- $ kubectl label pods --all status=unhealthy
-
僅當resource-version=1時才更新 名為foo的Pod上的label
- $ kubectl label pods POD名稱 status=unhealthy --resource-version=1
-
刪除名為“bar”的label 。(使用“ - ”減號相連)
- $ kubectl label node NODE名稱 bar-
-
-
-
annotate:更新註解資訊
-
更新一個或多個資源的Annotations資訊。也就是註解資訊,可以方便的檢視做了哪些操作。
- Annotations由key/value組成。
- Annotations的目的是儲存輔助資料,特別是透過工具和系統擴充套件操作的資料。
- 如果–overwrite為true,現有的annotations可以被覆蓋,否則試圖覆蓋annotations將會報錯。
- 如果設定了–resource-version,則更新將使用此resource version,否則將使用原有的resource version
-
語法:
- annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
-
更新Pod“foo”,設定annotation “description”的value “my frontend”,如果同一個annotation多次設定,則只使用最後設定的value值
- $ kubectl annotate pods foo description='my frontend'
-
更新Pod"foo",設定annotation“description”的value“my frontend running nginx”,覆蓋現有的值
- $ kubectl annotate --overwrite pods foo description='my frontend running nginx'
-
根據“pod.json”中的type和name更新pod的annotation
- $ kubectl annotate -f pod.json description='my frontend'
-
更新 namespace中的所有pod
- $ kubectl annotate pods --all description='my frontend running nginx'
-
只有當resource-version為1時,才更新pod 'foo'
- $ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
-
透過刪除名為“description”的annotations來更新pod 'foo'。
-
不需要 -overwrite flag。
- $ kubectl annotate pods foo description-
-
-
部署命令
-
rollout:管理資源
-
用於對資源進行管理
-
可用資源包括:deployments,daemonsets。
-
子命令:
- history(檢視歷史版本)
- pause(暫停資源)
- resume(恢復暫停資源)
- status(檢視資源狀態)
- undo(回滾版本)
-
語法
-
kubectl rollout SUBCOMMAND
-
回滾到之前的deployment
- $ kubectl rollout undo deployment DEPLOYMENT
-
檢視daemonet的狀態
- $ kubectl rollout status daemonset NAME
-
檢視歷史版本
- $ kubectl rollout history deployment DEPLOYMENT
-
-
-
rolling-update:滾動更新資源
-
執行指定ReplicationController的滾動更新。
-
該命令建立了一個新的RC, 然後一次更新一個pod方式逐步使用新的PodTemplate,最終實現Pod滾動更新,new-controller.json需要與之前RC在相同的namespace下。
-
語法:
- rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC)
-
使用frontend-v2.json中的新RC資料更新frontend-v1的pod
- $ kubectl rolling-update frontend-v1 -f frontend-v2.json
-
使用JSON資料更新frontend-v1的pod
- $ cat frontend-v2.json | kubectl rolling-update frontend-v1 -f -
-
基於 stdin 輸入的 JSON 替換 pod
- $ cat pod.json | kubectl replace -f -
-
更新frontend資源的映象
- $ kubectl rolling-update frontend --image=image:v2
-
更新frontend-v1資源名稱為frontend-v2並更新映象
- $ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
-
退出已存在的進行中的滾動更新
- $ kubectl rolling-update frontend-v1 frontend-v2 --rollback
-
-
scale:擴容或縮容(pod數)
-
擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量
-
scale也可以指定多個前提條件,如:當前副本數量或 --resource-version ,進行伸縮比例設定前,系統會先驗證前提條件是否成立。這個就是彈性伸縮策略。
-
語法:
- kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
-
將名為foo中的pod副本數設定為3。
-
$ kubectl scale --replicas=3 rs/foo
-
輸出
- kubectl scale deploy/nginx --replicas=30
-
-
將由“foo.yaml”配置檔案中指定的資源物件和名稱標識的Pod資源副本設為3
- $ kubectl scale --replicas=3 -f foo.yaml
-
如果當前副本數為2,則將其擴充套件至3。
- $ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
-
設定多個RC中Pod副本數量
- $ kubectl scale --replicas=5 rc/foo rc/bar rc/baz
-
-
autoscale:自動擴容或縮容
-
這個比scale更加強大,也是彈性伸縮策略 ,它是根據流量的多少來自動進行擴充套件或者縮容。
-
指定Deployment、ReplicaSet或ReplicationController,並建立已經定義好資源的自動伸縮器。使用自動伸縮器可以根據需要自動增加或減少系統中部署的pod數量。
-
語法:
- kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
-
使用 Deployment “foo”設定,使用預設的自動伸縮策略,指定目標CPU使用率,使其Pod數量在2到10之間
- $ kubectl autoscale deployment foo --min=2 --max=10
-
使用RC“foo”設定,使其Pod的數量介於1和5之間,CPU使用率維持在80%
- $ kubectl autoscale rc foo --max=5 --cpu-percent=80
-
-
叢集管理命令:certificate,cluster-info,top,cordon,uncordon,drain,taint
-
certificate命令:用於證書資源管理,授權等
-
當有node節點要向master請求,那麼是需要master節點授權的
- $ kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18
-
-
檢視叢集資訊
- $ kubectl cluster-info
-
將當前叢集狀態輸出到 stdout
- $ kubectl cluster-info dump
-
將當前叢集狀態輸出到 /path/to/cluster-state
- $ kubectl cluster-info dump --output-directory=/path/to/cluster-state
-
檢測核心元件狀態【如果你的叢集執行不正常,這是一個很好的、進行第一次診斷檢查的機會】
- $ kubectl get componentstatuses
- $ kubectl get cs
-
檢視node/pod的資源使用情況。需要heapster 或metrics-server支援
- $ kubectl top node/pod -A
-
檢視日誌:
- $ journalctl -u kubelet -f
-
設為不可排程狀態:
- $ kubectl cordon node1
-
解除不可排程狀態
- $ kubectl uncordon node1
-
將pod從NODE-1節點趕到其他節點:
-
$ kubectl drain NODE-1
-
-
taint命令:用於給某個Node節點設定汙點
-
master執行pod
- $ kubectl taint nodes master.k8s node-role.kubernetes.io/master-
-
-
master不執行pod
- $ kubectl taint nodes master.k8s node-role.kubernetes.io/master=:NoSchedule
-
檢視kubelet程式啟動引數
- $ ps -ef | grep kubelet
-
叢集故障排查和除錯命令
-
describe:顯示特定資源的詳細資訊
-
檢視my-nginx pod的詳細狀態
- $ kubectl describe po my-nginx
-
-
logs:列印日誌
-
logs命令:用於在一個pod中列印一個容器的日誌,如果pod中只有一個容器,可以省略容器名
-
語法
- $ kubectl logs [-f] [-p] POD [-c CONTAINER]
-
引數選項:
- -c, --container=“”:容器名。
- -f, --follow[=false]:指定是否持續輸出日誌(實時日誌)。
- –interactive[=true]:如果為true,當需要時提示使用者進行輸入。預設為true。
- –limit-bytes=0:輸出日誌的最大位元組數。預設無限制。
- -p, --previous[=false]:如果為true,輸出pod中曾經執行過,但目前已終止的容器的日誌。
- –since=0:僅返回相對時間範圍,如5s、2m或3h,之內的日誌。預設返回所有日誌。只能同時使用since和since-time中的一種。
- –since-time=“”:僅返回指定時間(RFC3339格式)之後的日誌。預設返回所有日誌。只能同時使用since和since-time中的一種。
- –tail=-1:要顯示的最新的日誌條數。預設為-1,顯示所有的日誌。
- –timestamps[=false]:在日誌中包含時間戳。
- ————————————————
- 版權宣告:本文為CSDN博主「墨鴉_Cormorant」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
- 原文連結:https://blog.csdn.net/footless_bird/article/details/125798691
-
返回僅包含一個容器的pod nginx的日誌快照
- $ kubectl logs nginx
-
持續輸出pod MyPod中的日誌
- $ kubectl logs -f MyPod
-
持續輸出pod MyPod中的容器web-1的日誌
- $ kubectl logs -f MyPod -c web-1
-
僅輸出pod nginx中最近的20條日誌
- $ kubectl logs --tail=20 nginx
-
輸出pod nginx中最近一小時內產生的所有日誌
- $ kubectl logs --since=1h nginx
-
指定時間戳輸出日誌
- $ kubectl logs MyPod --since-time=2018-11-01T15:00:00Z
-
返回pod MyPod中已經停止的容器web-1的日誌快照
- $ kubectl logs -p MyPod -c web-1
-
-
exec:進入容器進行互動
-
exec命令:進入容器進行互動,在容器中執行命令
-
語法
- kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
-
引數
- -c, --container="" 容器名。如果省略,則預設選擇第一個 pod。
- -p, --pod="" Pod名。
- -i, --stdin[=false] 將控制檯輸入傳送到容器。
- -t, --tty[=false] 將標準輸入控制檯作為容器的控制檯輸入。
-
在pod 123456-7890的容器ruby-container中執行“date”並獲取輸出
- kubectl exec 123456-7890 -c ruby-container date
-
預設在pod 123456-7890的第一個容器中執行“date”並獲取輸出
- kubectl exec 123456-7890 -- date
-
切換到終端模式,將控制檯輸入傳送到pod 123456-7890的ruby-container的“bash”命令,並將其輸出到控制檯/
-
錯誤控制檯的資訊傳送回客戶端。
- kubectl exec 123456-7890 -c ruby-container -it -- bash -il
-
-
-
attach:連線到一個正在執行的容器
-
kubectl attach POD [-c CONTAINER]
-
引數選項:
-
-c, --container=“”: 容器名。如果省略,則預設選擇第一個 pod。
-
-i, --stdin[=false]: 將控制檯輸入傳送到容器。
-
-t, --tty[=false]: 將標準輸入控制檯作為容器的控制檯輸入。
-
獲取正在執行中的pod 123456-7890的輸出,預設連線到第一個容器
- $ kubectl attach 123456-7890
-
獲取pod 123456-7890中ruby-container的輸出
- $ kubectl attach 123456-7890 -c ruby-container
-
切換到終端模式,將控制檯輸入傳送到pod 123456-7890的ruby-container的“bash”命令,並將其輸出到控制檯
- $ kubectl attach 123456-7890 -c ruby-container -i -t
-
-
-
其他命令:api-servions,config,help,plugin,version
-
api-servions命令:列印受支援的api版本資訊
-
列印當前叢集支援的api版本
- $ kubectl api-versions
-
-
help命令:用於檢視命令幫助
-
顯示全部的命令幫助提示
- $ kubectl --help
-
具體的子命令幫助,例如
- $ kubectl create --help
-
-
config 命令:用於修改kubeconfig配置檔案(用於訪問api,例如配置認證資訊)
-
設定 kubectl 與哪個 Kubernetes 叢集進行通訊並修改配置資訊。檢視 使用 kubeconfig 跨叢集授權訪問 文件獲取詳情配置檔案資訊。
-
示例
-
顯示合併的 kubeconfig 配置
- $ kubectl config view
-
檢視配置的摘要(上下文、名稱空間)
- $ kubectl config get-contexts
-
同時使用多個 kubeconfig 檔案並檢視合併的配置
- $ KUBECONFIG=/.kube/config:/.kube/kubconfig2 kubectl config view
-
獲取 e2e 使用者的密碼
- $ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
-
檢視當前使用的上下文
- $ kubectl config current-context
-
設定預設的上下文
- $ kubectl config use-context 上下文名稱
-
使用特定的使用者名稱和名稱空間新增一個上下文,並設定為預設的上下文。
- $ kubectl config set-context 上下文名稱 \
- --user=cluster-admin \
- --namespace=NAMESPACE \
- && kubectl config use-context 上下文名稱
-
更改當前上下文的名稱空間
- $ kubectl config set-context --current --namespace=NAMESPACE
- $ kubectl config set-context $(kubectl config current-context) --namespace=NAMESPACE
-
恢復到預設名稱空間
- $ kubectl config set-context
- $(kubectl config current-context) --namespace=
-
刪除指定的上下文
- $ kubectl config delete-context CLUSTER
-
新增新的叢集配置到 kubeconf 中,使用 basic auth 進行鑑權
- $ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
-
-
-
version 命令:列印客戶端和服務端版本資訊
-
列印客戶端和服務端版本資訊
- $ kubectl version
-
-
plugin 命令:執行一個命令列外掛
-
高階命令:apply,patch,replace,convert
-
apply命令:透過檔名或者標準輸入對資源應用配置
-
透過檔名或控制檯輸入,對資源進行配置。 如果資源不存在,將會新建一個。可以使用 JSON 或者 YAML 格式。
-
語法
- kubectl apply -f FILENAME
-
引數選項:
- -f, --filename=[]:包含配置資訊的檔名,目錄名或者URL。
- –include-extended-apis[=true]:如果為true,則透過呼叫API伺服器來包含新API的定義。預設為true
- -o, --output=“”:輸出模式。"-o name"為快捷輸出(資源/name).
- –record[=false]:在資源註釋中記錄當前 kubectl 命令。
- -R, --recursive[=false]:遞迴處理 -f, --filename 中使用的目錄。當您希望管理組織在同一目錄中的相關清單時很有用。
- –schema-cache-dir=“~/.kube/schema”:非空則將API schema快取為指定檔案,預設快取到’$HOME/.kube/schema’
- –validate[=true]:如果為true,在傳送到服務端前先使用schema來驗證輸入。
-
將pod.yaml中的配置應用到pod
- $ kubectl apply -f ./pod.yaml
-
將控制檯輸入的Yaml配置應用到Pod
- $ cat pod.yaml | kubectl apply -f -
-
-
patch命令:使用補丁修改,更新資源的欄位,也就是修改資源的部分內容
-
語法:
- kubectl patch (-f FILENAME | TYPE NAME) -p PATCH
-
使用策略合併補丁部分更新節點
- $ 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"}]}}'
-
-
replace命令: 透過檔案或者標準輸入替換原有資源
-
語法:
- kubectl replace -f FILENAME
-
使用pod.yaml中的資料替換一個pod
- $ kubectl replace -f ./pod.yaml
-
根據傳遞到標準輸入的YAML替換一個pod。
- $ cat pod.yaml | kubectl replace -f -
-
將單容器pod的映象的版本(標記)更新為v4
- $ kubectl get pod mypod -o yaml | sed 's/(image: myimage):.*$/\1:v4/' | kubectl replace -f -
-
強制替換、刪除然後重新建立資源
- $ kubectl replace --force -f ./pod.yaml
-
-
convert命令:轉換配置檔案為不同的API版本,支援YAML和JSON格式。
-
該命令將配置檔名,目錄或URL作為輸入,並將其轉換為指定的版本格式,如果目標版本未指定或不支援,則轉換為最新版本。
-
預設輸出將以YAML格式列印出來,可以使用- o選項改變輸出格式。
-
語法:
- kubectl convert -f FILENAME
-
將檔案'pod.yaml'轉換為最近版本並列印到標準輸出
- $ kubectl convert -f pod.yaml
-
將“pod.yaml”指定的資源的實時狀態轉換為最新版本,並以json格式列印到標準輸出
- $ kubectl convert -f pod.yaml --local -o yaml
-
將當前目錄下的所有檔案轉換為最新版本,並將其全部建立
- $ kubectl convert -f . | kubectl create -f -
-
輸出選項
-
格式化輸出
-
所有kubectl命令的預設輸出格式是人類可讀的純文字格式。
- 要將詳細資訊以特定的格式輸出到終端視窗,可以將 -o 或 --output標識新增到受支援的kubectl命令中。
- kubectl [command] [TYPE] [NAME] -o <output_format>
-
-
匯出配置檔案
-
匯出proxy的配置為yaml檔案
- kubectl get ds -n kube-system -l k8s-app=kube-proxy -o yaml > kube-proxy-ds.yaml
-
匯出kube-dns的deployment和services的配置為yaml檔案
- kubectl get deployment -n kube-system -l k8s-app=kube-dns -o yaml > kube-dns-dp.yaml
- kubectl get services -n kube-system -l k8s-app=kube-dns -o yaml > kube-dns-services.yaml
-
匯出所有 configmap
- kubectl get configmap -n kube-system -o wide -o yaml > configmap.yaml
-
四、實戰
執行應用
-
https://kubernetes.io/zh-cn/docs/tasks/run-application/
- 當前伺服器配置太低,執行不了,考慮使用虛擬機器實現
給應用注入資料
監控、日誌、除錯
配置pods和容器
訪問叢集中的應用程式
擴充套件 Kubernetes
五、實用技巧
1.更方便的更新pod配置
-
檢視、編輯某個pod的配置
-
kubectl -n ns get cm pod-config -o yaml
-
kubectl -n ns edit cm pod-config
-
輸出的內容格式為configMap(因為壓縮了內容所以更利於網路傳輸,但是可讀性就):
[{"src":"xap:resources/fa3740f76ce3a4f420ec1cf2ed4faf52e4e8809ba747bd1b9aa334228bcfc802.png","width":225,"height":70}] -
現在你需要修改這個配置,比如加幾個key,你可能會怒砸螢幕鍵盤,那麼如何更優雅的修改配置呢
-
開局一張圖,剩下的就全靠編了
[{"src":"xap:resources/b75f46ce17ec875daf362aa3880c92988b93e234d231b97e1d368712eb9cc28e.png","width":213,"height":133}] -
完整的操作
-
1.開啟後端服務找到config.yaml檔案,當然也可能是其他名字
-
2.修改內容變成你需要的樣子,然後使用cv大法
-
3.在服務端上新建一個yaml檔案
-
4.編寫yaml內容
-
注意事項:後端服務裡面的confi.yaml複製出來的內容不一定完整,不完整的內容需要自己手動衝突
-
這裡著重介紹一個|-符號:
-
1.使用“|-”處理多行文字,詳細解釋:
-
在 YAML 檔案中,符號 |- 是一個摺疊標記(Folded Block Style),它用於指示如何處理多行字串。使用該標記時,會忽略所有換行符,並將文字塊中的所有行連線成一個單獨的字串。
-
例如,以下 YAML 程式碼段中:
-
description: |
This is a long
description that spans
multiple lines. -
使用 |- 標記後,字串將被摺疊為:
- This is a long description that spans multiple lines.
-
請注意,在使用 |- 標記時,每一行末尾的空格都將被保留。如果您不希望保留這些空格,則可以使用 |+ 標記,它表示保留所有空格,包括行末尾的空格
-
-
-
2.縮排的時候不要使用\t,改用空格代替
-
-
例如:我現在這個專案:後端服務的config.yaml其實只是k8s的一個key的內容,data.yaml
- 剩餘的內容找到你要你要修改的pod獲取到
- kubectl -n ns get cm pod-config -o yaml
-
一個完整的k8s配置檔案(來自chatgpt的回答):
- apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- apiVersion: v1
-
-
-
-
name: example-container
image: nginx
ports:- containerPort: 80
volumeMounts: - name: data-volume
mountPath: /usr/share/nginx/html
volumes:
- containerPort: 80
-
name: data-volume
configMap:
name: example-configmap
- 這個配置檔案定義了一個名為 example-pod 的 Pod。它包含一個名為 example-container 的容器,使用 nginx 映象,並在容器內部暴露了 80 埠。此外,該容器還掛載了一個名為 data-volume 的捲到 /usr/share/nginx/html 目錄下。
- 在這個配置檔案中,我們使用了一個 ConfigMap 來定義卷的內容,如下所示:
-
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
index.html: "
Hello, Kubernetes!
"- 這個 ConfigMap 定義了一個名為 example-configmap 的 ConfigMap,其中包含了一個名為 index.html 的鍵值對,值為
Hello, Kubernetes!
,可以被掛載到 Pod 中作為卷使用。 - 5.讓pod應用修改後的配置
- kubectl -n ns apply -f config_target.yaml
- 6.重啟pod
- kubectl -n ns delete pod pod_name
- 7.查詢pod status是否正常
- kubectl -n ns get pod pod_name
- 8.查詢pod config是否是更新後的配置
- kubectl -n ns get cm pod_config_map -o yaml
2.配合xargs命令更方便的操作pod
-
首先來個套娃命令
- kubectl -n app get pod|grep portal|grep -v grep|awk '{print $1}'|xargs kubectl -n app get pod
-
xargs介紹(來自chatgpt回答)
-
在Linux中,xargs命令是一個非常有用的命令。它可以將一個命令的輸出作為另一個命令的引數,並將其傳遞給該命令。這對於處理大量檔案或目錄等物件時非常有用。
-
下面是一些xargs命令的例子:
-
將檔名作為引數傳遞給另一個命令
- ls | xargs rm
- 這個命令將所有檔名作為引數傳遞給rm命令,從而刪除當前目錄下的所有檔案。
-
將多個引數組合成一條命令
- echo "hello world" | xargs echo
- 這個命令將echo "hello world"作為引數傳遞給echo命令,從而輸出hello world。
-
限制引數數量
- ls | xargs -n 1 rm
- 這個命令將每個檔名作為單獨的引數傳遞給rm命令,從而逐個刪除當前目錄下的所有檔案。
-
從檔案中讀取引數
- cat file.txt | xargs -n 1 echo
- 這個命令將file.txt檔案中的每行文字作為單獨的引數傳遞給echo命令,從而逐行輸出檔案中的內容。
-
-
總之,xargs命令可以使我們更加高效地處理命令列中的引數,特別是在處理大量檔案或目錄時非常有用。
-
-
順帶介紹linux三劍客
-
Linux三劍客指的是grep、sed和awk,它們都是常用的文字處理工具。
-
grep(全稱Global Regular Expression Print):是一個用於在檔案中搜尋給定文字模式的命令列工具。grep可以查詢檔案內容中符合特定條件的行,並將它們輸出到控制檯或者其他檔案中。例如,我們可以使用grep 'apple' file.txt來查詢file.txt中包含“apple”的行。
-
grep是一個非常有用的命令列工具,它可以用來查詢文字檔案中的匹配項。除了最基本的用法(例如在檔案中查詢單詞或短語),grep還有一些高階用法,可以讓您更加準確地查詢所需的內容。
-
以下是一些grep的高階用法:
-
使用正規表示式:grep支援使用正規表示式進行模式匹配。這意味著您可以使用各種萬用字元和元字元來更精確地定義您要查詢的內容。
- 例如,如果您要查詢所有以大寫字母開頭的單詞,可以使用以下命令:
- grep '<[A-Z][a-z]*>' filename.txt
-
查詢多個模式:grep允許你同時查詢多個模式。例如,如果您要查詢包含單詞“apple”或“orange”的行,可以使用以下命令:
- grep -E 'apple|orange' filename.txt
-
搜尋多個檔案:grep可以搜尋多個檔案並將匹配的行列印出來。例如,如果您要在目錄下的所有.txt檔案中查詢單詞“banana”,可以使用以下命令:
- grep 'banana' *.txt
-
反向搜尋:預設情況下,grep只顯示匹配的行。但是,您也可以使用-v選項來反向搜尋,即顯示不匹配的行。
- 例如,如果您要查詢所有不包含單詞“pear”的行,可以使用以下命令:
- grep -v 'pear' filename.txt
-
-
這些是grep的一些高階用法。它們可以大大提高您在文字檔案中查詢內容的效率和準確性。
-
-
sed(全稱Stream Editor):是一個非互動式的流編輯器。sed可以對文字進行一系列操作,如替換、刪除、插入等等。它透過讀取輸入流並對其進行處理,然後將結果輸出到標準輸出或指定檔案中。例如,我們可以使用sed 's/apple/orange/' file.txt來將file.txt中所有的“apple”替換為“orange”。
- sed(Stream Editor)是一個非互動式的流編輯器,它可以對文字進行一系列的操作。主要應用場景如下:
-
替換字串:使用s命令替換檔案中指定字串。例如,我們可以使用sed 's/old/new/' file.txt來將file.txt中所有的“old”替換為“new”。
刪除行:使用d命令刪除檔案中匹配特定模式的行。例如,我們可以使用sed '/pattern/d' file.txt來刪除file.txt中所有匹配模式“pattern”的行。
插入、追加和修改行:使用i、a和c命令在檔案的指定位置插入或修改行。例如,我們可以使用sed '3i new line' file.txt來在file.txt的第三行前插入新行。
處理特定行範圍:使用數字或模式匹配限制sed的處理範圍。例如,我們可以使用sed '2,4d' file.txt來刪除file.txt中第二行到第四行的內容。
格式化輸出:使用p命令列印檔案中指定行的內容。例如,我們可以使用sed -n '2,4p' file.txt來列印file.txt中第二行到第四行的內容。
總之,sed可以對文字進行各種複雜的操作,包括搜尋、替換、刪除、插入、追加、格式化等,非常適用於批次處理文字檔案的場景。同時,它也是一種強大的文字程式設計工具,支援變數、條件語句、迴圈等高階特性,可以完成複雜的文字轉換和處理任務。
- awk:是一種強大的文字處理語言,它可以完成比grep和sed更復雜的文字操作。awk支援多種內建函式、邏輯判斷、迴圈等高階程式設計功能。與grep和sed不同,awk可以將資料分解成欄位,並按照需要對每個欄位進行操作。例如,我們可以使用awk '{print $3}' file.txt來輸出file.txt中每行的第三個欄位。
- awk是一種文字處理工具,可以用來對結構化文字進行過濾、操作和格式化。它最初由Al Aho、Peter Weinberger和Brian Kernighan在1977年設計,並以他們的姓氏命名(A、W、K)。awk可以讀取文字檔案中的每一行,並將其分解成欄位。然後,透過應用使用者定義的規則和指令,可以從這些欄位中提取資訊並執行各種操作。
- awk的基本語法結構為:awk 'pattern { action }' file。其中,pattern是一個正規表示式,用於匹配需要處理的文字行;action是要執行的操作,可以是列印、計算、條件判斷等等。如果沒有指定檔名,則awk預設從標準輸入讀取資料。
- awk有很多內建變數和函式,例如$0表示整個文字行,NF表示當前行的欄位數量,print函式用於輸出文字等等。此外,awk還支援陣列、迴圈、條件語句等高階程式設計功能,使得它成為處理大型結構化文字檔案的強大工具。
- 總之,awk是一種非常實用的文字處理工具,可以幫助我們快速而方便地處理大量資料,並方便地生成報告或者其他需要的輸出格式。
- 三劍客工具的組合可以完成各種文字處理任務,而且它們都是Linux系統自帶的工具,無需安裝額外軟體即可使用
-
配合awk一鍵查詢指定pod的配置
-
kubectl -n app get pod|grep user|awk '{print $1}'|xargs kubectl -n app logs --tail 50 -f
-
沒用他之前可能需要兩個命令
-
查詢pod
- kubectl -n app get pod|grep user
-
根據輸出的pod查詢日誌
- kubectl -n app logs --tail 50 -f pod_name
-
-
-
配合awk一鍵重啟指定pod
-
kubectl -n app get pod|grep user|awk '{print $1}'|xargs kubectl -n app delete pod
-
沒用他之前可能需要兩個命令
-
查詢pod
- kubectl -n app get pod|grep user
-
根據輸出的pod,在刪除他
- kubectl -n app delete pod_name
-
-
-
配合awk一鍵重啟指定kill程式程式
-
ps -ef|grep filter_condition|grep -v grep|awk '{print $2}'|xargs sudo kill -9
-
沒用他之前可能需要兩個命令
-
查詢指定程式
-
ps -ef|grep filter_condition|grep -v grep
-
grep -v grep
- 反選輸出的結果,這裡的作用是過濾輸出的grep程式
-
-
kill查詢出來的程式
- sudo kill -9 pid
-
-