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
最后编辑:jackzang 更新时间:2024-09-13 13:53