kubectl
kubectl是kubernetes的管理工具.
https://kubernetes.io/docs/tasks/tools/#kubectl
https://github.com/cloudnativelabs/kube-shell
https://github.com/jonmosco/kube-ps1
https://github.com/ahmetb/kubectx
在master上通过kubectl命令管理集群.
kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.24 版本的客户端能与 v1.23、 v1.24 和 v1.25 版本的控制面通信。 用最新兼容版的 kubectl 有助于避免不可预见的问题。
Options
kubectl options # 查看所有命令可用选项
--kubeconfig
kubectl --kubeconfig=$HOME/.kube.config (default)
-n/--namespace
basic command
create:
# 通过yaml或json文件创建资源
$ kubectl create -f FILENAME [options]
options:
-f/--filename
kubectl create secret tls kubernetes-dashboard-tls --key ca.key --cert ca.crt -n kubernetes-dashboard
// 输出一个资源的yaml格式.
kubectl create deployment <name> --image=<img-name> --dry-run=client --output=yaml
delete:
// 删除资源
$ kubectl delete (-f FILENAME | -k DICT | TYPE [(NAME|-l label|--all)]) [optiions]
options:
-f/--filename
--all
--all-namespaces
--force
$ kubectl delete pods --all
$ kubectl delete pod <name>
// 删除指定ns下所有资源.
$ kubectl delete all --all -n {namespace}
删除带有finalizers字段的对象,对象实际被更新了,没有真的被删除。可以通过patch来删除。
删除带有ownerReferences字段的对象,删除父对象默认会删除所有子对象,通过–cascade=false只删除父对象。
expose:
# 创建serivce:
$ kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=...] [--name=...] [--external-ip=...] [--type=type] [options]
# 创建service,并且使用NodePort
# nodeport可以使用任意节点的IP访问.
$ kubectl expose deployment hello-world --type=NodePort --name=example-service
// 获取service的yaml
kubectl expose deployment <deploy-name> --type=LoadBalancer --port=80 --dry-run=client --output=yaml
run:
# 创建pod/container(docker run):
$ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
set:
$ kubectl set SUBCOMMAND [options]
// 更新镜像
$ kubectl set image deployment.v1.apps/<deploy-name> <container-name>=<image:tag>
get:
// 获取resource信息(docker ps)
$ kubectl [-n <namespace>] get [resource] [flags] [options]
options:
-A/--all-namespaces
-f/--filename
-o/--output json/yaml/json/wide/name/...
-w/--watch
--watch-only
kubectl get nodes --show-labels
kubectl get nodes/no # 获取node节点信息
kubectl get namespace/ns # 获取namespace信息
kubectl get componentstatuses/cs
kubectl get all --all-namespaces
kubectl -n kube-system get all
kubectl get pod/pods/po
kubectl get po -w/--watch
kubectl get po -o wide
kubectl get deployment/deployments/deploy
kubectl get service/services/svc
explain:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/
// 查看资源解析
$ kubectl explain RESOURCE [options]
kubectl explain deploy.spec
edit:
// 在线修改资源,直接生效.
$ kubectl edit
advanced commands
apply:
$ kubectl apply
diff:
$ kubectl diff
patch
$ kubectl patch
// 删除terminating状态的resource
$ kubectl patch persistentvolumeclaim/storage -p '{"metadata":{"finalizers":null}}' -n <ns>
$ kubectl replace
$ kubectl wait
$ kubectl kustomize
deploy command
scale:
$ kubectl scale
$ kubectl scale deployment <deploy-name> -n <ns> --replicas=0
autoscale:
$ kubectl autoscale
rollout:
// 回滚
$ kubectl rollout
// 暂停/恢复/重启 deployment.
kubectl rollout pause/resume/restart deploy/katib-mysql -n kubeflow
debug&troubleshoot
describe:
// like docker inspect
$ kubectl describe (-f FILENAME | TYPE ... | TYPE/NAME) [options]
options:
-A/--all-namespaces
-f/--filename
// 查看node信息
$ kubectl describe nodes <name>
//查看pod详细信息
$ kubectl describe pods <name>
// 获取k8s-dashboard的token
$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
logs:
# like docker logs
$ kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]
options:
--all-containers
-f/--follow
-p/--previous
// 查看pod中指定container log
kubectl logs -f <pod> -c <container> -n <ns>
exec:
# like docker exec
$ kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]
options:
-c/--container
-i/--stdin
-t/--tty
$ kubectl exec -it <pod> -n <ns> -- /bin/bash
port-forward:
由于已知的限制,目前的端口转发仅适用于 TCP 协议.
只能通过运行转发命令的IP/FQDN访问。
$ kubectl port-forward
// 转发本地端口到deploy/rs/svc/pod
$ kubectl port-forward svc/redis-service 6379:6379 -n redis
$ kubectl port-forward --address 0.0.0.0 -n kubernetes-dashboard service/kubernetes-dashboard 8080:443
proxy:
$ kubectl proxy
// 通过proxy可以访问默认的clusterIP服务.
attach:
$ kubectl attach
cp:
$ kubectl cp
auth:
$ kubectl auth
debug:
$ kubectl debug
// debug node -- 直接进入node的shell,log在/host/var/log
kubectl debug node/<name> -it --image=ubuntu
cluster management
top:
$ kubectl top
$ kubectl cluster-info
$ kubectl certificate
// 节点变成unschedulable
$ kubectl cordon
// 节点变成schedulable
$ kubectl uncordon
// 安全下线节点:Ready,SchedulingDisabled
$ kubectl drain
kubectl drain <node> --delete-emptydir-data --ignore-daemonsets
//定义污点
$ kubectl taint
kubectl taint nodes <node> <key>=<value>:NoSchedule-
Settings Commands
label
label Update the labels on a resource
kubectl label nodes <your-node-name> disktype=ssd
annotate:
annotate Update the annotations on a resource
completion:
completion Output shell completion code for the specified shell (bash or zsh)
others
api-resources:
// api-resources Print the supported API resources on the server.
kubectl api-resources
api-versions:
// api-versions Print the supported API versions on the server, in the form of "group/version".
kubectl api-versions
config:
// 参考kubectx
config Modify kubeconfig files.
plugin:
// 参考krew
plugin Provides utilities for interacting with plugins.
// 查看安装的plugin
$ kubectl plugin list
version:
version Print the client and server version information.
shell-auotcompletion
bash/zsh 自动补全工具.
https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion
$ kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
krew
https://github.com/kubernetes-sigs/krew
安装kubectl plugin的工具
// 下载插件列表
$ kubectl krew update
// 查找插件
$ kubectl krew search
// 安装插件
$ kubectl krew install <name>
// 升级插件
$ kubectl krew upgrade
// 卸载插件
$ kubectl krew uninstall <name>
kubectx
https://github.com/ahmetb/kubectx
在cluster和namespace之间切换的命令行工具.
包括kubectx 和 kubedns
通过krew安装,作为kubectl的plugin:
$ kubectl krew install ctx
$ kubectl krew install ns
circtl
用于对node调试.
https://github.com/kubernetes-sigs/cri-tools
https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/
nerdctl
调试node。
https://github.com/containerd/nerdctl
telepresence
用于本地调试集群上的服务.