1. 基础命令

// create

$ kubectl create -f demo-deployment.yaml

// delete

$ kubectl delete -f demo-deployment.yaml
$ kubectl delete pod <POD-NAME>

// get

$ kubectl get all
$ kubectl get --all-namespaces

$ kubectl get pod
$ kubectl get pod --show-labels
$ kubectl get pods -l app=example
$ kubectl get pod -o wide


$ kubectl get node
$ kubectl get node --show-labels

$ kubectl get ns
$ kubectl get namespaces

$ kubectl get rs
$ kubectl get deploy -o wide

// run

$ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80

// expose:创建一个service服务,并且暴露端口让外部可以访问

$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service

// set :配置应用的一些特定资源,也可以修改应用已有的资源

$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
$ 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

$ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
$ kubectl set image deployments,rc nginx=nginx:1.9.1 --all
$ kubectl set image daemonset abc *=nginx:1.9.1
$ kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

// explain:显示资源文档信息

$ kubectl explain rs

// edit:编辑资源信息

$ kubectl edit deployment nginx
$ kubectl edit service/nginx

2. 设置命令

// label:用于更新(增加、修改或删除)资源上的 label(标签)

$ kubectl label pods foo unhealthy=true        // 添加标签
$ kubectl label --overwrite pods foo status=unhealthy       // 修改标签
$ kubectl label  pods --all status=unhealthy    // 给所有名称空间的pod 添加标签
$ kubectl label pods foo status=unhealthy --resource-version=1    // 根据条件添加标签
$ kubectl label pods foo bar-

// annotate:更新一个或多个资源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作

$ kubectl annotate pods foo description='my frontend'   // foo pod 添加注解
$ kubectl annotate -f pod.json description='my frontend'  // 根据 pod.json 中的type和name更新pod的annotation
$ kubectl annotate --overwrite pods foo description='my frontend running nginx'
$ kubectl annotate pods --all description='my frontend running nginx'
$ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1
$ kubectl annotate pods foo description-

// completion:用于设置 kubectl 命令自动补全

$ source <(kubectl completion bash)           // 临时
$ echo "source <(kubectl completion bash)" >> ~/.bashrc       // 长久

$ source <(kubectl completion zsh)
$ echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc

3. 部署命令

// rollout:对资源进行管理

$ kubectl rollout undo deployment/abc
$ kubectl rollout status daemonset/foo

// rolling-update:执行指定ReplicationController的滚动更新。

$ kubectl rolling-update frontend-v1 -f frontend-v2.json
$ cat frontend-v2.json | kubectl rolling-update frontend-v1 -f -
$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2
$ kubectl rolling-update frontend --image=image:v2
$ kubectl rolling-update frontend-v1 frontend-v2 --rollback

// scale:扩容或缩容

$ kubectl scale --replicas=3 rs/foo
$ kubectl scale deploy/nginx --replicas=30

$ kubectl scale --replicas=3 -f foo.yaml
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  //如果当前为2,扩为3
$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz

// autoscale:自动伸缩

$ kubectl autoscale deployment foo --min=2 --max=10     // 使用默认自动伸缩策略
$ kubectl autoscale rc foo --max=5 --cpu-percent=80

4. 集群管理命令

// certificate:用于证书资源管理,授权等

# 例如,当有node节点要向master请求,那么是需要master节点授权的
$ kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18

// cluster-info

$ kubectl cluster-info

// top:查看 cpu 和内存资源

$ kubectl top pod --all-namespaces

// cordon:标记某个节点不可调度

// uncordon:标记标签节点可以调度

// drain:用于维护期间排除节点

// taint:给节点设置污点

5. 集群故障排查和调试

// describe

$ kubectl describe pod my-nginx

// log

$ kubectl logs nginx
$ kubectl logs -p -c ruby web-1   // -p 已经终止的容器
$ kubectl logs -f -c ruby web-1   // -f 实时输出
$ kubectl logs --tail=20 nginx
$ kubectl logs --since=1h nginx

// exec:进入容器进行交互,在容器中执行命令

$ kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash

// attach:连接到一个正在运行的容器

$ kubectl attach 123456-7890     //  获取正在运行中的pod 123456-7890的输出,默认连接到第一个容器
$ kubectl attach 123456-7890 -c ruby-container

# 切换到终端模式,将控制台输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台/
# 错误控制台的信息发送回客户端。
$ kubectl attach 123456-7890 -c ruby-container -i -t

// cp:拷贝文件或者目录到pod容器中

6. 高级命令

// apply:通过文件名或者标准输入对资源应用配置

$ kubectl apply -f ./pod.json
$ cat pod.json | kubectl apply -f -

// patch:使用补丁修改,更新资源的字段,也就是修改资源的部分内容

$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
$ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

// replace: 通过文件或者标准输入替换原有资源

$ kubectl replace -f ./pod.json
$ cat pod.json | kubectl replace -f -
$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
$ kubectl replace --force -f ./pod.json

// convert:不同的版本之间转换配置文件

$ kubectl convert -f pod.yaml
$ kubectl convert -f pod.yaml --local -o json
$ kubectl convert -f . | kubectl create -f -

// 格式化输出

kubectl -o 或 --output

// 日志输出

$ kubectl -v 或 --v

7. 其它命令

// config

$ kubectl config view
$ KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view  //使用多个 config,并查看
$  kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

$ kubectl config current-context
$ kubectl config use-context my-cluster-name
$ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
$ kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce
作者:jackzang  创建时间:2023-03-08 14:33
最后编辑:jackzang  更新时间:2024-09-13 13:53