Kubernetes運(yùn)維必掌握的12個(gè)Kubectl命令
Kubectl命令行工具是與Kubernetes交互的主要工具,你可以使用Kubectl在Kubernetes集群中創(chuàng)建、更新和管理資源,例如Pod,Service和Deployment等。接下來我們將了解Kubernetes運(yùn)維必須掌握的12個(gè)Kubectl命令。
1.kubectl cluster-info
使用以下命令提供有關(guān)Kubernetes集群當(dāng)前狀態(tài)信息,包括API服務(wù)器地址、集群狀態(tài)等信:
$ kubectl cluster-info
Kubernetes control plane is running at https://10.0.42.142:6443
metrics-server is running at https://10.0.42.142:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://10.0.42.142:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
2.kubectl version
使用以下命令顯示系統(tǒng)上當(dāng)前安裝的 kubectl 版本,以及它連接到的 Kubernetes 集群的版本:
$ kubectl version
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"24+", GitVersion:"v1.24.6-aliyun.1", GitCommit:"a45529632bcea0750cf04a1122c73f0fc97d26b0", GitTreeState:"clean", BuildDate:"2023-03-08T03:10:49Z", GoVersion:"go1.18.6", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.4
Server Version: version.Info{Major:"1", Minor:"24+", GitVersion:"v1.24.6-aliyun.1", GitCommit:"5296768e052ba56e92b5d5bf7b52d33973a34c6f", GitTreeState:"clean", BuildDate:"2023-04-19T06:36:28Z", GoVersion:"go1.18.6", Compiler:"gc", Platform:"linux/amd64"}
3.kubectl get
此命令將提供 Kubernetes 集群中可用資源的列表,常用資源列表如下:
- Namespace
- Deployment
- Pod
- Node
- Service
- ReplicaSets
使用以下命令查看當(dāng)前default命名空間的所有可用資源:
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/mysql-tnj2g 1/1 Running 0 37d
pod/oom-cb7dbb86d-tkw5d 1/1 Running 0 9d
NAME DESIRED CURRENT READY AGE
replicationcontroller/mysql 1 1 1 3y83d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 172.25.0.1 <none> 443/TCP 4y115d
service/oom-svc ClusterIP 172.25.14.133 <none> 8080/TCP 224d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/willie-oom 1/1 1 1 224d
NAME DESIRED CURRENT READY AGE
replicaset.apps/oom-55b85549b6 0 0 0 50d
replicaset.apps/oom-6b7cf75c98 0 0 0 9d
使用以下命令查看當(dāng)前default命名空間的deployment資源:
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
oom 1/1 1 1 224d
指定特定的命名空間:(-n 參數(shù)是指定特定命名空間 -namespace 的縮寫形式):
$ kubectl get deployments -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
ags-metrics-collector 1/1 1 1 3y111d
alibaba-log-controller 1/1 1 1 49d
alicloud-disk-controller 1/1 1 1 4y115d
查看指定資源的更多詳細(xì)信息:(-o參數(shù)是查看更多詳細(xì)信息):
$ kubectl get deployments -n kube-system -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
ags-metrics-collector 1/1 1 1 3y111d ags-metrics-collector registry.cn-hangzhou.aliyuncs.com/gene-aliyun/ags-metrics-collector:v1.0.0.2-cc3b2d6-aliyun app=ags-metrics-collector,owner=aliyun
alibaba-log-controller 1/1 1 1 49d alibaba-log-controller registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/log-controller:0.3.3.0-d37b3ff-aliyun k8s-app=alibaba-log-controller
4.kubectl create
Kubernetes 命令 kubectl create 用于向集群添加新資源。用戶可以使用此命令創(chuàng)建 Pod、Service和Deployment等資源。
使用以下命令,將使用 nginx 映像創(chuàng)建一個(gè)名為my-nginx 的新deployment:
$ kubectl create deployment my-nginx --image=nginx
deployment.apps/my-nginx created
使用以下命令創(chuàng)建新的 cronjob 的另一個(gè)示例:
$ kubectl create job my-cronjob --schedule="*/5 * * * *" --image=busybox -- command -- args="echo This is a cron job!"
命令參數(shù):
- --schedule 指定cron語法中任務(wù)計(jì)劃
- --image 指定運(yùn)行容器鏡像
- --command 執(zhí)行容器運(yùn)行的命令
5.kubectl edit
kubectl edit 命令,可以編輯集群中的現(xiàn)有資源對象。您可以使用 kubectl edit 直接修改資源的配置,這樣您就無需手動生成新的 YAML 文件。以下命令修改名為my-nginx的deployment的資源配置:
$ kubectl edit deployments my-nginx
deployment.apps/my-nginx edited
6.kubectl delete
Kubectl delete 命令將幫助您刪除 Kubernetes 集群中的任何資源,例如 pod、deployment、service、cornjob等資源。使用以下命令刪除名為my-nginx的deplyment資源:
$ kubectl delete deployments.apps my-nginx
deployment.apps "my-nginx" deleted
7.kubectl apply
kubectl apply命令使您能夠通過YAML編排文件,在集群中創(chuàng)建或修改資源:
$ kubectl apply -f deployment.yaml
8.kubectl config
在 Kubernetes 中,命令 kubectl config 允許您管理 kubectl 客戶端的配置。config 命令可用于查看、編輯或在多個(gè)集群配置之間切換,以及管理用戶憑據(jù)和上下文設(shè)置:
$ kubectl config set-context --current --namespace=NAMESPACE
kubectl config set-context 是 Kubernetes 中的一個(gè)命令,允許您修改 kubectl 配置的上下文。上下文定義了 kubectl 命令操作的集群、用戶和命名空間。在此示例中,此命令將當(dāng)前命名空間設(shè)置為“NAMESPACE”。
9.kubectl describe
kubectl describe 提供了一種快速方法來獲取有關(guān)資源的全面信息,從而更輕松地了解資源的當(dāng)前狀態(tài)并發(fā)現(xiàn)任何問題。它顯示有關(guān)資源狀態(tài)、事件和元數(shù)據(jù)的詳細(xì)信 使用以下命令可以查看Pod名稱為metrics-server-85bd976946-rlk6c的詳細(xì)信息:
$ kubectl describe -n kube-system pod metrics-server-85bd976946-rlk6c
Name: metrics-server-85bd976946-rlk6c
Namespace: kube-system
Priority: 2000001000
Priority Class Name: system-node-critical
Node: cn-shanghai.i-uf64cmp52ak0xgn2l0aa/10.0.41.110
Start Time: Mon, 08 May 2023 23:30:47 +0800
Labels: k8s-app=metrics-server
pod-template-hash=85bd976946
Annotations: kubernetes.io/psp: ack.privileged
Status: Running
IP: 172.24.3.211
IPs:
IP: 172.24.3.211
Controlled By: ReplicaSet/metrics-server-85bd976946
Containers:
metrics-server:
Container ID: containerd://aae2f389294e5000222e6e015df2df2283ffe91d5cd4243d2cf7a60479f7e666
Image: registry-vpc.cn-shanghai.aliyuncs.com/acs/metrics-server:v0.3.9-d554015-aliyun
Image ID: registry-vpc.cn-shanghai.aliyuncs.com/acs/metrics-server@sha256:c920f8733e79e06aaab201eb58a5d3ebdac5e87fe1cbb4ecb5b32af843d39a04
Port: <none>
Host Port: <none>
Command:
/metrics-server
--source=kubernetes.hybrid:''
--sink=socket:tcp://monitor.csk.cn-shanghai.aliyuncs.com:8093?clusterId=c76c5be3d8fe647699cc2a480bf870d5a&public=true
State: Running
Started: Tue, 06 Jun 2023 16:59:21 +0800
Last State: Terminated
Reason: Unknown
Exit Code: 255
Started: Tue, 06 Jun 2023 16:57:55 +0800
Finished: Tue, 06 Jun 2023 16:58:55 +0800
Ready: True
Restart Count: 3
Limits:
cpu: 4
memory: 8Gi
Requests:
cpu: 100m
memory: 200Mi
Liveness: tcp-socket :443 delay=0s timeout=1s period=10s #success=1 #failure=3
Readiness: tcp-socket :443 delay=0s timeout=1s period=10s #success=1 #failure=3
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-nx95f (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-nx95f:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>
10.kubectl logs
kubectl logs 獲取 pod 中容器的日志,可用于跟蹤容器的問題或解決容器的問題。執(zhí)行以下命令可以查看Pod名稱為metrics-server-85bd976946-rlk6c的日志:
$ kubectl logs -n kube-system metrics-server-85bd976946-rlk6c
I0714 08:49:52.202911 1 socket.go:39] Start ExportData 156 metrics.
I0714 08:49:52.206977 1 socket.go:175] Successful write 260741 bytes metrics to monitor server
I0714 08:49:52.410389 1 socket.go:175] Successful write 241216 bytes metrics to monitor server
I0714 08:49:52.613469 1 socket.go:175] Successful write 226287 bytes metrics to monitor server
I0714 08:49:52.816824 1 socket.go:175] Successful write 240725 bytes metrics to monitor server
11.kubectl exec
kubectl exec 在 pod 的正在運(yùn)行的容器中執(zhí)行命令。它對于調(diào)試、故障排除和監(jiān)視應(yīng)用程序的狀態(tài)很有幫助 執(zhí)行以下命令可以進(jìn)入Pod命令為metrics-server-85bd976946-rlk6c容器中:
$ kubectl exec -it -n kube-system metrics-server-85bd976946-rlk6c sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/go #
12.kubectl cp
kubectl cp 允許您在本地文件系統(tǒng)和 pod 中的容器之間或同一 pod 中的兩個(gè)容器之間復(fù)制文件和目錄。這對于在主機(jī)和容器之間傳輸文件,或者在 pod 內(nèi)的容器之間復(fù)制文件非常有用:
$ kubectl cp <local-file-path> <pod-name>:<container-destination-path>
參數(shù):
- kubectl cp 用于將本地文件復(fù)制到 pod 中的容器中。
- local-file-path 指定本地文件系統(tǒng)上文件的路徑。
- pod-name 和 container-destination-path 指定容器內(nèi)文件的目的地。