# Kubernetes常用命令
# 基础命令
命令 | 描述 |
---|---|
create | 通过文件名或标准输入创建资源 |
expose | 为Deployment,Pod创建Service |
run | 在集群中运行一个特定的镜像 |
set | 在对象上设置特定的功能 |
explain | 文档参考资料 |
get | 显示一个或多个资源 |
edit | 使用系统编辑器编辑一个资源。 |
delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源。 |
# 部署类命令
命令 | 描述 |
---|---|
rollout | 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等) |
rolling-update | 滚动升级,仅限ReplicationController |
scale | 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量 |
autoscale | 为Deploy, RS, RC配置自动伸缩规则(依赖metrics-server和hpa) |
# 集群管理命令
命令 | 描述 |
---|---|
certificate | 修改证书资源 |
cluster-info | 显示集群信息 |
top | 查看资源利用率(依赖metrics-server) |
cordon | 标记节点不可调度 |
uncordon | 标记节点可调度 |
drain | 驱逐节点上的应用,准备下线维护 |
taint | 修改节点taint标记 |
# 命令补全【重要且方便】
# 下载依赖包
yum install bash-completion
source <(kubectl completion bash)
# 让补全生效
bash
source <(kubectl completion bash)
# 查看类命令
- kubectl cluster-info ---- 查看集群信息
- kubectl -s http://localhost:8080 get componentstatuses ---- 查看各组件信息
- kubectl get pods ---- 列出当前所有的pod
- kubectl get pods -o wide ---- 查看pods所在的运行节点
- kubectl get pods -o yaml ---- 查看pods定义的详细信息
- kubectl get pods [可选pod名称] -w ---- 实时跟踪pod状态
- kubectl get pods --show-labels ---- 查看pods有哪些标签
- kubectl get pods -l key:value ---- 根据标签查询含有标签的资源
- kubectl get pod -o wide ---- 查看pod被分配到了哪个节点上
- kubectl describe pods [pod名称] ---- 根据标签查询含有标签的资源
- kubectl get rc ---- 查看Replication Controller信息
- kubectl get service ---- 查看service的信息
- kubectl get nodes ---- 查看节点信息
- kubectl describe nodes [node名称] ---- 查询node节点配置
- kubectl get pod --selector name=redis ---- 按selector名来查找pod
- kubectl exec [pod] env ---- 查看运行的pod的环境变量
- kubectl get deployment ---- 查看所有控制器
- kubectl get ep ---- 查看deployment的pod列表
- kubectl describe node <node名称> ---- 查询node的资源占用情况和已分配情况
# 操作类命令
kubectl create -f 文件名 ---- 创建
kubectl replace -f 文件名 [--force] ---- 重建
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete deployment deployment名 ---- 删除指定控制器
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all
kubectl delete deployments mybusybox ---- 删除创建的pod
kubectl run mybusybox --image=busybox ---- 启动一个pod
kubectl run mybusybox --image=busybox --replicas=5 ---- 启动多个pod
kubectl run mynginx --image=nginx --port=80 --hostport=8000 ---- 创建带有端口映射的pod
kubectl run -i --tty busybox --image=busybox ---- 创建带有终端的pod
kubectl edit svc service名称 ---- 编辑service
kubectl label nodes <node名称> key=value ---- 给node打标签
kubectl get node --show-labels ---- 查询node的所有标签
kubectl get node -l key=value ---- 根据标签筛选node
kubectl taint node [node名称] key=value:[effect] ---- 设置污点
kubectl taint node [node名称] key=value:[effect]- ---- 移除污点
其中effect的可选值
- NoSchedule: 一定不能被调度
- PreferredNoSchedule: 尽量不要调度
- NoExecute: 不仅不会被调度,还会驱逐node上的pod
# 示例
# 通过命令生成一个带有基本格式的yaml文件(以nginx为例)
- 格式:kubectl run [pod名称] --image=[镜像名称] --dry-run=client -o yaml > [生成的yaml文件名称前缀].yaml
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# 导出镜像
docker save -o xx.tar nginx:latest
- xx.tar 导出的jar名称
- nginx:latest 镜像:tag, 这里以nginx最新的镜像为例
# 导入镜像
- docker
docker load -i xx.tar
- containerd
ctr image import xx.tar
- 导入镜像后, 自动识别镜像名称和tag信息
# 修改镜像
在k8s重新部署的过程中, 我遇到了一个问题,就是修改镜像源后,registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0找不到,阿里云上面没有这个镜像。折腾了半天,下载了1.7.0的镜像,导出,导入,一顿操作猛如虎,结果切换容器引擎到containerd之后,这种方式居然不工作。 就想找一找有没有更简单的方式修改镜像,因为registry.aliyuncs.com/google_containers/coredns:1.7.0这个镜像是有的,也是可使用的。期间有人建议我修改kubelet的二进制文件,想想就很麻烦, 就想找一个更简单的方式,果然遇事不决找度娘就很好。
kubectl -n kube-system edit deploy/coredns
执行这个命令后,就会在image栏发现我们要修改的镜像名称,改成registry.aliyuncs.com/google_containers/coredns:1.7.0即可,退出后自动生效。
....
spec:
containers:
- args:
- -conf
- /etc/coredns/Corefile
image: registry.aliyuncs.com/google_containers/coredns:1.7.0
....