命令行工具kubectl
实验环境
安装好k8s集群
Deployment、Pod、Service三者之间的逻辑关系:
Deployment:控制Pod副本预期
Pod:管理容器
Service:对外发布服务
Service定义了一个服务访问的入口地址,前端应用通过这个入口地址访问其背后的一组由POD副本组成的集群实例(容器)。
Service与其后端Pod副本集群之间则是通过Label Selector实现无缝对接的,Deployment实际上用于保证Service的服务能力和服务质量始终符合预期标准。
一、kubectl语法格式
kubectl [command] [TYPE] [NAME]
kubectl获取帮助
kubectl --help
查看具体某个操作的帮助
kubectl get --help
1、command
指定要对资源执行的操作,例如create、get、describe和delete
2、TYPE
指定资源类型,资源类型是大小写敏感的,开发者能够以单数,复数和缩略的形式。
例如:pod/deploy/svc
kubectl get pod pod的名称
kubectl get pods pod的名称
kubectl get po pod的名称
可以缩写资源类型,例如:
po 代表 pods。
deploy 代表 deployments。
svc 代表 services
3、指定资源的名称,名称也是大小写敏感的。如果省略名称,则会显示所有的资源。
获取所有 Pod
kubectl get pods
二、kubectl子命令使用分类
1、基础命令
create:创建资源
expose:发布一个新的服务
run:运行一个pod
set:在对象上设置特定的功能
get:获取资源信息
edit:编辑资源
delete:删除资源
2、部署命令
rollout:管理资源的滚动更新和版本控制
scale:调整资源的副本数量,动态扩展或缩减
3、集群管理命令
cluster-info:显示集群的基本信息
top:查看集群中节点(Node)或Pod的资源使用情况,包括 CPU 和内存的消耗
4、故障诊断和调试命令
describe:查看资源的详细信息
logs:查看 Pod 的日志
exec:在 Pod 中执行命令
cp:复制文件到容器
5、高级命令
apply:应用配置文件(创建或更新资源)
6、设置命令
label:更新资源上的标签
7、其他命令
api-versions: 打印受支持的api版本
三、常用子命令实例
查看k8s版本信息
kubectl version
查看节点信息
kubectl get nodes
查看群集信息
kubectl cluster-info
1、创建名为nginx的deployment
kubectl create deployment nginx --image=nginx:1.20
将名为 nginx 的 Deployment 暴露为一个 Service,并指定 Service 的名称为 nginx-svc,端口为 80,类型为 NodePor
kubectl expose deployment nginx --name=nginx-svc --port=80 --type=NodePort
2、查看
获取 Kubernetes 集群中所有资源的详细信息,并以宽格式(wide)显示
kubectl get all -o wide
获取 Kubernetes 集群中 Deployment、Pod、Service 和 ReplicaSet 的详细信息,并以 宽格式(wide) 显示
kubectl get deploy,pod,svc,rs -o wide
获取名为 nginx 的 Pod 的详细信息
kubectl describe pod nginx
3、删除
删除 Kubernetes 集群中名为 nginx-svc 的 Service
kubectl delete service nginx-svc
删除 Kubernetes 集群中名为 nginx 的 Deployment
kubectl delete deployment nginx
删除 Kubernetes 集群中所有的 Deployment
kubectl delete deployment --all
删除 Kubernetes 集群中所有的 Service
kubectl delete service --all
删除 Kubernetes 集群中所有的资源,包括 Pod、Service、Deployment、ReplicaSet
kubectl delete all --all
4、服务扩容与缩容
kubectl create deployment nginx --image=nginx:1.20
将名为 nginx 的 Deployment 的副本数量扩展到 5 个
kubectl scale deployment nginx --replicas=5
获取 Kubernetes 集群中所有 Pod 的详细信息,并以宽格式(wide)显示
kubectl get pod -o wide
Pod的数量扩展为5个
编辑名为 nginx 的 Deployment 的配置
kubectl edit deployment nginx
修改:
获取 Kubernetes 集群中所有 Pod 的详细信息,并以宽格式(wide)显示
kubectl get pod -o wide
Pod的数量缩小为3个
5、服务升级(变更镜像)与回滚
(1)创建名为web的deployment并将名为 web 的 Deployment 暴露为一个 Service
kubectl create deployment web --image=nginx:1.20
kubectl expose deployment web --port=80 --type=NodePort
获取 Kubernetes 集群中所有 Deployment 的详细信息,并以宽格式(wide) 显示
kubectl get deployment -o wide
输出内容解析:
NAME:Deployment 的名称。
READY:当前 Ready 的副本数 / 期望的副本数。
UP-TO-DATE:已更新到最新版本的副本数。
AVAILABLE:当前可用的副本数。
AGE:Deployment 的创建时间。
CONTAINERS:Deployment 中使用的容器镜像。
IMAGES:容器镜像的名称。
SELECTOR:Deployment 使用的标签选择器。
更新名为 web 的 Deployment 中 nginx 容器的镜像为 httpd:latest,并记录本次更新的历史记录
kubectl set image deployment web nginx=httpd:latest --record
--record:记录此次更新,将其添加到 Deployment 的注解中,便于后续查看历史记录
获取 Kubernetes 集群中所有 Deployment 的详细信息,并以宽格式(wide) 显示
kubectl get deployment -o wide
查看集群IP并访问网页
kubectl get svc -o wide
curl 10.110.54.156
(2)回滚名为 web 的 Deployment 到上一个版本
kubectl rollout undo deployment web
获取 Kubernetes 集群中所有 Deployment 的详细信息
kubectl get deployment -o wide
(3)回滚到指定版本
查看名为 web 的 Deployment 的 更新历史记录
kubectl rollout history deployment web
将名为 web 的 Deployment 回滚到指定的历史版本2
kubectl rollout undo deployment web --to-revision=2
(4)使用kubectl cp给web的pod写入网页
kubectl get pod -o wide
echo "apache" > index.html
kubectl cp index.html web-77f47b4598-h6hxf:/usr/local/apache2/htdocs/
查看集群IP并访问网页
kubectl get svc -o wide
curl 10.110.54.156
或
curl 192.168.10.11:30278
常用命令集合
kubectl ceate 创建一个deployment或job来管理创建的容器
kubectl get 显示一个或多个资源,默认查看当前名称空间的资源 -A所有名称空间
kubectl expose 将一个资源暴露为service服务
kubectl describe 显示特定资源的详细信息
kubectl scale 扩容/缩容
kubectl set 更改现有的应用程序资源
kubectl rollout 资源回滚管理
kubectl delete 删除某个资源 强制删除:--force
Kubectl logs 查看 Pod 或容器的日志