本文记录k8s实践时使用的命令。

一些记录

强烈建议安装命令补齐,可以查询到各种命令名称、资源名称,减少操作。
默认空间有 default 和 kube-system。
似乎很多获取信息类的命令都可加-o json-o wide-o yaml。等继续验证。
多副本一般平均分配,如2节点,2个rc,各一个,但通过扩容、缩容后,可能会2个rc跑1个节点,如果删除1个rc,重新启动的rc,会分配另一节点,始终还是平均。此为不做配置情况下的结论。
yaml 文件中的冒号:后需一个空格,否则语法错误。

一些疑问

记录在实践中的一些疑问。
如果pod过多,如何过滤?即指定某一个类型或关键字,暂时不考虑命令空间。
只在master主机,如何查看从主机上的镜像?可能从主机存在多个镜像版本,要查询。
不同的k8s版本,apiVersion与相应的资源怎么对应起来?
exec 时,执行busybox容器的cd命令出错,但如ls、date等正常,不知何故。

命令补齐

执行如下命令安装 bash-completion:

# apt install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)

注:实践发现,经常性出现不能补齐的情况,于执行source的2条命令即可。

示例:

# kubectl get n  // 输入n,按2次Tab键,输出:
namespaces   nodes
networkpolicies.networking.k8s.io

kubectl 命令可匹配一些缩写,如获取节点命令,如下均等效:

kubectl get no
kubectl get node
kubectl get nodes

命令技巧

可通过get输出yaml格式,添加--export,重定向到文件中,再修改。此可得一个yaml模板。

# kubectl get pod mysql-ds-m4rh8 -o yaml --export

查看集群信息:

# kubectl cluster-info

查看组件状态:
kubectl get componentstatuses 

命令经验

创建:kubectl apply -f <xxx.yaml>
查看各种资源,如kubectl get pv kubectl get pod kubectl get svc
如果出错,则查看:kubectl describe pod <pod名称>
查看pod日志:kubectl logs <pod名称> -c <容器名称>

重启pod或重新创建,可删除配置文件,再创建,也可直接删除出错的pod,k8s会自动重建。(适用于deployment、ds、rs等)

命令

命令较多,结合实践,慢慢整理。主要有:集群相关,创建/删除,各种细分命令,某个功能的命令。

集群相关

初始化集群:

kubeadm init 

加入集群:

kubeadm join <服务器IP端口> --token <token> --discovery-token-ca-cert-hash <hash值>

查看加入集群命令:

kubeadm token create --print-join-command

创建/删除:

kubectl create -f <xx.yaml>
kubectl apply -f <xx.yaml>

kubectl delete -f <xx.yaml>

kubectl delete <资源名> <对象名>

删除 pod:

kubectl delete pod <pod 名称> -n <命名空间>

直接用kubectl delte pod xxx 无法真正删除pod,要删除deployment,先查看:

kubectl get deployment 

再删除:

kubectl delete deployment xxx

如果资源由yaml创建,执行kubectl delete -f <xx.yaml>可删除。如果不是,则要指定资源对象,如pod、rc、pvc,等等。可以直接用--all删除所有的资源。
强制删除pod:

kubectl delete pod <pod 名称> -n <命名空间> --force --grace-period=0

获取/查看/确认资源get

get可针对不同资源对象获取不同的信息。其形式:

kubectl get <对象名> <资源名> <选项>

选项有:

--show-labels: 显示标签(较多资源时,用于过滤)
-l app=example: 指定标签为app=example
--all-namespaces: 所有命名空间,也可用--all-namespaces=true,简写为-A
-n kube-system: 指定kube-system命名空间
-o wide -o yaml -o json:以不同格式输出,也可写为 -owide -oyam -ojson

查看节点状态:
kubectl get nodes 

显示node节点的标签信息
kubectl get node --show-labels

查看pod列表
kubectl get pod

显示pod节点的标签信息
kubectl get pod --show-labels

根据指定标签匹配到具体的pod
kubectl get pods -l app=example

查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
kubectl get svc

获取所有资源信息:
kubectl get all

查看命名空间
kubectl get ns

查看所有pod所属的命名空间
kubectl get pod --all-namespaces

查看所有pod所属的命名空间并且查看都在哪些节点上运行
kubectl get pod --all-namespaces  -o wide

查看指定命名空间的 pod: 
# kubectl get pods -n kube-system

查看详情 describe

查看某个pod日志:

kubectl describe pod xxx

执行命令 exec

kubectl exec mypod date  # 默认第一个容器(如果有多个的话)
kubectl exec mypod -c ruby-container date # 指定pod,指定容器

kubectl exec mypod -i -t -- ls -t /usr

如果使用run,需要指定镜像,如:

新运行并进入busybox容器,退出后删除
kubectl run -it --image latelee/busybox dns-test --restart=Never --rm /bin/sh

编辑edit

编辑 ConfigMap:

kubectl edit cm coredns -n kube-system

节点标签

# 获取节点的标签
kubectl get nodes --show-labels

# 添加节点的标签
kubectl label nodes edge-node ntype=hello

# 删除节点的标签
kubectl label nodes edge-node ntype-

问题记录

Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply

用create创建,用apply更新,即产生此警告。实践发现可忽略。用apply创建,再用apply更新,无此警告。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐