kubectl常用

kubectl命令大全

kubectl命令大全

参考: kubectl实用技巧

参考: huaweicloud,kubectl常用命令


Linux配置kubectl命令补全

所有主机上运行

参考: https://kubernetes.io/zh-cn/docs/reference/kubectl/cheatsheet/

参考 https://kubernetes.io/zh/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/
在这里插入图片描述

# 安装bash-completion
## bash-completion-extras需要epelrepo源
yum install -y bash-completion bash-completion-extras

# 配置自动补全
source /usr/share/bash-completion/bash_completion

# 临时生效kubectl自动补全
source <(kubectl completion bash)

## 只在当前用户生效kubectl自动补全
echo 'source <(kubectl completion bash)' >>~/.bashrc

## 全局生效
echo 'source <(kubectl completion bash)' >/etc/profile.d/k8s.sh && source /etc/profile

# 生成kubectl的自动补全脚本
kubectl completion bash >/etc/bash_completion.d/kubectl

配置kubeadm自动补全

# 配置kubeadm自动补全
source /usr/share/bash-completion/bash_completion
source <(kubeadm completion bash)

## 只对当前用户生效
echo 'source <(kubeadm completion bash)' >>~/.bashrc

## 全局生效
echo 'source <(kubeadm completion bash)' >>/etc/profile.d/k8s.sh && source /etc/profile

# 生成kubeadm的自动补全脚本
kubeadm completion bash >/etc/bash_completion.d/kubeadm

windows配置kubectl命令补全

参考: https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-windows/

# Windows安装kubectl
choco install kubernetes-cli -y

# 当前shell生效自动补全
kubectl completion powershell | Out-String | Invoke-Expression

# 写入到 $PROFILE 文件中
kubectl completion powershell >> $PROFILE

Windows配置kubectl edit默认编辑器为vscode

添加一个系统变量KUBE_EDITOR,值设为code -w
在这里插入图片描述


kube-shell自动补全工具

项目地址: https://github.com/cloudnativelabs/kube-shell
在这里插入图片描述

# 安装
pip3 install kube-shell

# 进入kube-shell
kube-shell

# 然后可以在该shell中实现自动补全

查看kubectl配置

# 查看 kubectl 配置
kubectl config view

查看集群信息

# 查看集群kube-system内建服务列表
# 显示主控节点和服务的地址
kubectl cluster-info

# 查看集群事件
kubectl get events

# 查看集群组件状态
kubectl get cs

在这里插入图片描述


查看资源类型

官方文档: https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B

kubectl api-resources --namespaced=true      # 所有命名空间作用域的资源
kubectl api-resources --namespaced=false     # 所有非命名空间作用域的资源
kubectl api-resources -o name                # 用简单格式列举所有资源(仅显示资源名称)
kubectl api-resources -o wide                # 用扩展格式列举所有资源(又称 "wide" 格式)
kubectl api-resources --verbs=list,get       # 支持 "list" 和 "get" 请求动词的所有资源
kubectl api-resources --api-group=extensions # "extensions" API 组中的所有资源

# 查看kubectl命令行字段的简写
kubectl api-resources

## 查看services的缩写
[root@master ~]# kubectl api-resources|grep services
services  svc  v1  true   Service

# 查看集群支持的所有API资源及api版本
kubectl api-resources -o wide

# 获取集群支持的所有 API 版本
kubectl api-versions

查看api接口版本

[root@master ~]# kubectl api-versions 
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
crd.projectcalico.org/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
metrics.k8s.io/v1beta1
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

查询对应功能调用的接口

# 查询Deployment调用的接口
[root@master ~]# kubectl api-resources |grep deployment
deployments     deploy     apps/v1      true         Deployment

# 查询所有Api接口对应的资源类型
kubectl api-resources

kubectl添加注解

参考: 为什么我们要使用kubectl apply

--save-config参数会添加注解,老版的注解--record=true将被弃用.建议添加这个参数形成良好的习惯.
kubectl注解将在查询变更时非常有效.

# 执行kubectl时添加注解.
kubectl edit | kubectl patch --save-config

老版本的注解(变化注解)

--record=true会在升级记录中记录本条命令,建议使用新版注解参数--save-config

## 命令示例
kubectl set image deployment/应用名 -n 空间名 容器名=镜像名:版本号 --record=true

创建一个deployment

https://blog.csdn.net/omaidb/article/details/129527733


为deployment创建一个services

https://blog.csdn.net/omaidb/article/details/122112135


查看资源

# 查看pod
kubect get pods

# 查看deploy,rc,svc,node
kubectl get deploy,rc,svc,node

查看资源的labels(标签)

# 查看pod的标签
kubectl get pods --show-labels

# 查看指定serice选择的标签
kubectl get service tomcatdemo --show-labels

# 通过yaml方式查看service选择的标签
[root@master ~]# kubectl get service tomcatdemo -o yaml|grep -A 2 selector
  selector:
    app: tomcatdemo
  sessionAffinity: None

查看资源对象的详细信息

定位问题时经常使用

kubectl describe nodes <node-name>
kubectl describe pod <pod-name>
kubectl describe <rc-name>

指定标签查询资源

# 指定标签查询pod
## 查询ns=kube-system 标签: k8s-app=kube-dns的pod
kubectl get po -n kube-system -l k8s-app=kube-dns
## 同时显示资源的标签信息
kubectl get po -n kube-system -l k8s-app=kube-dns --show-labels

查看运行中资源的镜像

# 查看集群中运行着的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'

# 列举 default 名字空间中运行的所有镜像,按 Pod 分组
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"

# 除 "k8s.gcr.io/coredns:1.6.2" 之外的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image'

# 输出 metadata 下面的所有字段,无论 Pod 名字为何
kubectl get pods -A -o=custom-columns='DATA:metadata.*'

将资源端口转发到本地端口

参考: 使用端口转发来访问集群中的应用

# 将6000端口转发到本地的5000端口
## 默认是转发pod
kubectl port-forward my-pod 5000:6000

# 转发到本地的随机端口
kubectl port-forward pod/my-pod :6000

删除资源


强制删除资源

kubectl delete 资源类型 资源名 --force

删除terminating状态的namespace

# 删除terminating状态的namespace
kubectl get namespace "stucked-namespace" -o json \ | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \ | kubectl replace --raw /api/v1/namespaces/stucked-namespace/finalize -f -

删除pod和service

# 删除在 pod.json 中指定的类型和名称的 Pod
kubectl delete -f ./pod.json

# 删除名称为 "baz" 和 "foo" 的 Pod 和服务
kubectl delete pod,service baz foo

# 删除包含 name=myLabel 标签的 pods 和服务
kubectl delete pods,services -l name=myLabel

# 删除在 my-ns 名字空间中全部的 Pods 和服务
kubectl -n my-ns delete pod,svc --all

# 删除所有与 pattern1 或 pattern2 awk 模式匹配的 Pods
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs  kubectl delete -n mynamespace pod

删除deployment

kubectl -n my-ns delete deployment.apps 应用名

删除污点

#添加 尽量不调度 PreferNoSchedule 
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:PreferNoSchedule
#去除污点NoSchedule,最后一个"-"代表删除
kubectl taint nodes k8s-master02 node-role.kubernetes.io/master:NoSchedule-

删除node节点

kubectl drain <node name> --delete-emptydir-data --force --ignore-daemonsets
kubectl delete 资源类型 资源名称

# 删除名为test的pod
kubectl delete pods test

# 使用资源清单删除资源
kubectl delete -f 资源清单.yaml

# 删除所有包含某个标签的pod和service
kubectl delete pods,services –l name=<label-name>

# 删除所有的Pod
kubectl delete pods –all

标记节点为不可调度

参考: https://kubernetes.io/zh/docs/concepts/architecture/nodes/

# 标记指定的node为不可调度
kubectl cordon $NODENAME

# 取消指定node节点的不可调度
kubectl uncordon $NODENAME

# 查看所有节点的状态
kubectl get nodes

# 节点排水(驱逐节点上的所有pod)
# 忽略节点上不能杀死的特定系统Pod,例如:CNI插件,daemonSet
kubectl drain $NODENAME

查看资源的日志

# 查看pod日志
kubect logs pod名

# 持续pod中的容器日志
kubectl logs -f pod名 -c 容器名 

查看服务账户的token

参考: https://blog.csdn.net/u010859650/article/details/89555413

# 查看token
kubectl -n 命名空间 get secrets

# 获取用户token方法1
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/ {print $1}')

# 获取用户token方法2
kubectl -n kube-system get secret $(kubectl -n kube-system get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

扩缩容

# 将副本数量调整为2个
kubectl scale deploy 应用名 --replicas=2

# 或者修改对应yamal文件中的replicas值,apply一下即可

滚动更新

# 滚动更新
kubectl set image deployments/应用名 容器名=镜像名:v镜像版本号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值