目录
1、K8S集群控制命令
基础通用语法:
kubectl [command] [TYPE] [NAME] [flags] 参数详解: [command]: 指操作动作get/create/delete/describe/apply/logs/exec; [TYPE]: 指资源类型pod/deployment/service/namespace/node; [NAME]: 指资源名称,省略则列出全部资源; [flags]: 可选参数,命名空间、输出格式、过滤等。 通用高频参: -n/--namespace <命名空间名称>: 指定命名空间,不写默认是t命名空间"defaul"; -A/--all-namespaces: 查看所有命名空间资源; -o wide: 宽格式输出,显示更多信息(节点、IP); -o yaml: 输出yaml格式资源定义; -o json: 输出json格式; --dry-run=client: 客户端模拟执行,不真正创建资源,调试用; --help: 查看该命令完整帮助。
(1)、集群&节点
查看集群版本信息
root@controller:~# kubectl version
查看集群节点信息
root@controller:~# kubectl get nodes
root@controller:~# kubectl get nodes -o wide
查看集群某个节点详细信息
root@controller:~# kubectl describe node controller
此处controller为集群节点名称。
查看K8S可操作的API资源
root@controller:~# kubectl api-resources
(2)、命名空间
获取所有命名空间
root@controller:~# kubectl get namespace
创建命名空间
root@controller:~# kubectl create namespace test
test是命名空间的名称,可以自定义。
删除命名空间
root@controller:~# kubectl delete namespace test
此处删除名称为test的命名空间
(3)、Pod操作
查看指定命名空间下的所有pod
查看简要信息
root@controller:~# kubectl get pods --namespace test-ns
此处查看命名空间test-ns下的所有pod输出更多信息
root@controller:~# kubectl get pods --namespace test-ns -o wide
此处查看命名空间test-ns下的所有pod
查看指定pod的详细信息
方式一
root@controller:~# kubectl describe pod tomcat-deployment-54655d9bd7-bdtrn --namespace test-ns
此处查看的是命名空间test-ns下的pod名称为tomcat-deployment-54655d9bd7-bdtrn的详细信息。方式二
root@controller:~# kubectl get pod nginx-deployment-9fdcf75b8-gsffc --namespace test-ns -o yaml
此处查看的是命名空间test-ns下的pod名称为nginx-deployment-9fdcf75b8-gsffc的详细信息。需要重点关注的是最后的Events事件,主要输出pod的报错事件,如镜像拉取失败、调度失败、CrashLoopBackOff 等都会在这里记录。
查看指定pod的日志
root@controller:~# kubectl logs -f --tail=10 tomcat-deployment-54655d9bd7-w6hmf --namespace test-ns
参数说明:
-f: 实时跟踪日志流(类似tail -f);
--tail=10: 只取最后10行日志;
tomcat-deployment-54655d9bd7-w6hmf: 此处查询的pod名称;
-c <容器名>: 一个pod有多个容器时,指定查看日志的容器。
进入pod容器内部
root@controller:~# kubectl exec -it nginx-deployment-9fdcf75b8-gsffc -c nginx --namespace test-ns -- /bin/bash
参数说明:
-i: 保持标准输入打开;
-t: 分配伪终端;
nginx-deployment-9fdcf75b8-gsffc: 指定的pod名称;
-c: 当pod中有多个容器时,后面跟的是pod中指定容器的名称,即spec.containers.name的值,此处是nginx;通过kubectl get pod nginx-deployment-9fdcf75b8-gsffc -n test-ns -o yaml命令可以查看到;
--: 分割符,后面是容器内执行的命令,此处是/bin/bash;部分轻量镜像没有bash,可以用/bin/sh
删除指定pod
root@controller:~# kubectl delete pod tomcat-deployment-54655d9bd7-bdtrn --namespace test-ns
根据pod名称tomcat-deployment-54655d9bd7-bdtrn删除pod如果pod属于deployment控制器,删除pod会被控制器自动重建。
(4)、Ddeployment操作
查询当前所有的deployment
输出简要信息
root@controller:~# kubectl get deployment --namespace test-ns
输出详细信息
root@controller:~# kubectl get deployment --namespace test-ns -o wide
查看指定deployment的详细信息
root@controller:~# kubectl describe deployment nginx-deployment --namespace test-ns
创建deployment
root@controller:~# kubectl create deployment mysql-deployment --image=mysql:8.4 --replicas=1 --namespace test-ns
参数说明:
kubectl: k8s命令行客户端工具,用来和apiserver交互;
create: 资源创建子命令,新建k8s资源对象;
deployment: 指创建的资源类型,此处创建Deployment控制器,用来管理Pod,实现副本维持、滚动更新等,Pod 挂掉会自动重建;
mysql-deployment: 自定义的Deployment资源名称,后续删除、查询都用这个名称;
--image=mysql:8.4: 指定容器的镜像,mysql是指镜像名,8.4是指镜像标签(版本);
--replicas=1: 指副本数,启动1个mysql Pod实例,mysql-deployment会保证始终运行1个Pod。
-namespace: 指将该deployment资源放到命名空间test-ns下。
删除指定deployment
root@controller:~# kubectl delete deployment mysql-deployment --namespace test-ns
此处删除mysql-deployment
调整指定deployment的副本数
root@controller:~# kubectl scale deployment tomcat-deployment --replicas=3 --namespace test-ns
此处将tomcat-deployment的副本调整为3个。
更新deployment镜像版本
root@controller:~# kubectl set image deployment nginx-deployment nginx=nginx:1.28 --namespace test-ns
将nginx-deployment的镜像版本更新为nginx:1.28nginx-deployment更新前镜像版本为nginx:1.26
nginx-deployment更新后镜像版本为nginx:1.28
(5)、service操作
查看所有service
root@controller:~# kubectl get service --namespace test-ns
查看命名空间test-ns下的所有service
将deployment暴露为Service(即创建service)
将nginx-deployment暴露为Service
root@controller:~# kubectl expose deployment nginx-deployment --name=nginx-service --type=NodePort --port=80 --target-port=80 --namespace test-ns
参数说明:
expose: 将Deployment后端Pod封装为Service,实现负载均衡、统一访问入口;
deployment: 指定要暴露的资源类型;
nginx-deployment: 指定要暴露的deployment的名称;
--name=nginx-service: 指定Service的名称,不指定默认和deployment同名;
--type=NodePort: 指定Service的类型;每个节点监听一个端口,节点IP+NodePort访问业务;
--port=80: 指定Service服务的端口(集群内部访问service的端口);
--target-port=80: 指定容器内部的端口,此处指定nginx容器内部监听80端口,流量转发到Pod容器的这个80端口;
-namespace: 指将该service资源放到命名空间test-ns下。将外部访问端口更新为30080
root@controller:~# kubectl patch service nginx-service --namespace test-ns -p '{"spec":{"ports":[{"port":80,"targetPort":80,"nodePort":30080}]}}'
删除指定service
root@controller:~# kubectl delete service tomcat-service --namespace test-ns
删除命名空间test-ns下的tomcat-service
2、crictl工具常用命令
crictl工具用于对本机节点的镜像、Pod、业务容器等资源进行相关操作。
(1)、信息与状态相关内容
查看crictl工具版本
root@node01:~# crictl version
查询containerd运行时信息
root@node01:~# crictl info
监控容器资源使用情况
root@node01:~# crictl stats
(2)、镜像相关操作
列出本地镜像
root@node01:~# crictl images
拉取镜像到本地
root@node01:~# crictl pull docker.io/library/httpd:2.4
此处拉取httpd的镜像。由上可见,已经成功拉取httpd:2.4镜像到本地。
删除本地镜像
根据镜像名称删除镜像
root@node01:~# crictl rmi docker.io/library/nginx:1.26
此处删除镜像docker.io/library/nginx:1.26根据镜像ID删除镜像
root@node01:~# crictl rmi 17aba4293f3b5
此处删除镜像17aba4293f3b5删除本地没有使用的镜像
root@node01:~# crictl rmi --prune
(3)、Pod沙箱操作(pause容器)
查询所有的Pod沙箱
列出所有pod沙箱
root@node01:~# crictl pods
根据指定的命名空间列出pod沙箱
root@node01:~# crictl pods --namespace test-ns
删除指定Pod沙箱
root@node01:~# crictl rmp 6dd6a58f81394
删除Pod ID为6dd6a58f81394的沙箱。
(4)、业务容器操作
列出所有运行中的容器
列出所有正在运行的容器
root@node01:~# crictl ps
列出所有容器,包括已停止的
root@node01:~# crictl ps -a
列出指定命名空间下的容器
root@node01:~# crictl ps --namespace test-ns
查看指定容器的详细信息
root@node01:~# crictl inspect 0e42ee9ae774a
此处查看容器ID为0e42ee9ae774a的详细信息。
查看指定容器的日志信息
查看指定容器的日志
root@node01:~# crictl logs 0e42ee9ae774a
实时查看指定容器的日志
root@node01:~# crictl logs -f 0e42ee9ae774a
查看指定容器最后10行日志
root@node01:~# crictl logs --tail 10 0e42ee9ae774a
进入指定容器内部命令行
进入容器0e42ee9ae774a内部命令行
root@node01:~# crictl exec -it 0e42ee9ae774a /bin/bash
参数说明:
-i: 保持标准输入打开;
-t: 分配伪终端;
/bin/bash: 此处也可以使用/bin/sh
3、containerd原生工具ctr常用命令
ctr是containerd自带的原生客户端工具,用于与containerd服务进行交互。ctr是containerd原生工具,没有 Pod 概念。K8s集群的镜像和容器放在"k8s.io"命名空间,操作k8s集群相关的资源时必须带上命名空间"--namespace k8s.io"。
(1)、命名空间操作
列出所有命名空间
root@controller:~# ctr namespace list
(2)、镜像管理images(简写i)
列出命名空间k8s.io下的本地镜像
root@node01:~# ctr --namespace k8s.io images ls
ctr不会读取/etc/containerd/config.toml镜像加速器。crictl走CRI配置,会读取config.toml里面的mirror加速器。ctr(原生containerd命令)完全忽略CRI镜像加速配置,直接硬连docker.io官方地址,国内环境极易超时。ctr命令拉取镜像必须写完整镜像地址
root@node01:~# ctr --namespace k8s.io images pull docker.io/library/nginx:1.26 若是私有http仓库,需要追加"--plain-http"参数
给镜像打标签
打标签
root@node01:~# ctr --namespace k8s.io images tag docker.io/library/nginx:1.27 mynginx:1.0
查询镜像
root@node01:~# ctr --namespace k8s.io images ls | grep "mynginx:1.0"
删除镜像
root@node01:~# ctr --namespace k8s.io images rm mynginx:1.0
此处删除镜像mynginx:1.0
将本地镜像导出为tar包(离线使用)
root@node01:~# ctr --namespace k8s.io images export nginx_1_26.tar docker.io/library/nginx:1.26
root@node01:~# ll nginx_1_26.tar
导出离线tar包
root@node01:~# ctr --namespace k8s.io images import nginx_1_26.tar mynginx:1.26
校验本地镜像完整性
root@node01:~# ctr --namespace k8s.io images check
(3)、实战小示例
# 1.拉取nginx镜像
ctr --namespace k8s.io images pull docker.io/library/nginx:1.27
# 2.创建容器定义
ctr --namespace k8s.io container create docker.io/library/nginx:1.27 test-nginx
# 3.启动task
ctr --namespace k8s.io task start -d test-nginx
# 4.查看运行task
ctr --namespace k8s.io task ls
# 5.进入容器
ctr --namespace k8s.io task exec --exec-id mysh -t test-nginx /bin/sh
# 6.退出后,停止、清理
ctr --namespace k8s.io task kill test-nginx
ctr --namespace k8s.io container rm test-nginx
ctr --namespace k8s.io images rm docker.io/library/nginx:1.27












































