K8S基本命令操作
基本操作
查看版本的信息
[root@master opt]# kubectl version
Client Version: v1.28.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.2
查看资源对象
[root@master opt]# kubectl api-resources
集群的信息
[root@master opt]# kubectl cluster-info
添加补全功能
echo "source <(kubectl completion bash)" >> /etc/profile# 之后再生效
source /etc/profile
node节点查看日志
[root@master opt]# journalctl -u kubelet.service -f
-- Logs begin at 六 2025-09-13 16:16:57 CST. --
10月 10 15:25:07 master kubelet[33470]: E1010 15:25:07.626530 33470 kubelet.go:2477] "Housekeeping took longer than expected" err="housekeeping took too long" expected="1s" actual="1.605s"
10月 10 15:25:11 master kubelet[33470]: E1010 15:25:10.307088 33470 kubelet.go:2477] "Housekeeping took longer than expected" err="housekeeping took too long" expected="1s" actual="1.497s"
10月 10 15:25:13 master kubelet[33470]: E1010 15:25:13.660376 33470 kubelet.go:2477] "Housekeeping took longer than expected" err="housekeeping took too long" expected="1s" actual="1.841s"
10月 10 15:25:17 master kubelet[33470]: I1010 15:25:17.158414 33470 trace.go:236] Trace[323703093]: "iptables ChainExists" (10-Oct-2025 15:25:14.759) (total time: 2399ms):
master节点
[root@master opt]# kubectl get componentstatuses
查看命令空间
[root@master opt]# kubectl get namespaces
查看命名空间的所有资源
[root@master opt]# kubectl get all
[root@master opt]# kubectl get all -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8h
service/nginx NodePort 10.96.3.38 <none> 80:30769/TCP 32m
查看以kubernetes-dashboard命名的所有空间
[root@master opt]# kubectl get all -n kubernetes-dashboard
创建命名空间
[root@master opt]# kubectl create ns app
namespace/app created
[root@master opt]# kubectl get ns app
NAME STATUS AGE
app Active 10s
删除命名空间
[root@master opt]# kubectl delete namespace app
namespace "app" deleted
[root@master opt]# kubectl get ns app
Error from server (NotFound): namespaces "app" not found
启动pod(nginx-wl)
[root@master opt]# kubectl create deployment nginx-wl --image=nginx -n kube-public
注意这里我使用了华为云的镜像
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com","https://registry-1.docker.io"]
大概在219行,把原先的代码删除换成这个代码,要注意格式哦
描述某个资源的详细信息
[root@master opt]# kubectl describe deployments.apps nginx-wl -n kube-public
[root@master opt]# kubectl describe pod nginx-wl-67cc67cb89-dxtwn -n kube-public
产看空间kube-public的pod节点信息
[root@master opt]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-wl-67cc67cb89-dxtwn 1/1 Running 0 95m
登录容器
kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
[root@master opt]# kubectl exec -it nginx-wl-67cc67cb89-dxtwn -n kube-public bash
删除容器
[root@master opt]# kubectl delete pod nginx-wl-67cc67cb89-dxtwn -n kube-public
这时候会发现一个问题,nginx容器仍然在运行,只是换了一个名字
这是因为存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
若pod无法删除,总是处于terminate状态,则要强行删除pod
[root@master opt]# kubectl delete pod nginx-wl-67cc67cb89-7xjm2 -n kube-public --force --grace-period=0
Warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "nginx-wl-67cc67cb89-7xjm2" force deleted
grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
扩容和缩容
# 扩容
[root@master opt]# kubectl scale deployment nginx-wl -n kube-public --replicas=3
deployment.apps/nginx-wl scaled
# 缩容
[root@master opt]# kubectl scale deployment nginx-wl --replicas=1 -n kube-public
deployment.apps/nginx-wl scaled
删除副本及控制器
[root@master opt]# kubectl delete deployments.apps nginx-wl -n kube-public
deployment.apps "nginx-wl" deleted
项目的生命周期
创建-->发布-->更新-->回滚-->删除
创建 kubectl create
kubectl create --help
启动 nginx
暴露端口为80,设置副本为3
发布 kubectl expose
为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
[root@master opt]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
service/nginx-service exposed
service 的 type 类型:
●ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)
●NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
每个端口只能是一种服务,端口范围只能是 30000-32767。
●LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。 SLB 公网地址 一般会使用公有云
●externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。 tgc.benet.com
查看
pod网络状态详细信息和 Service暴露的端口
[root@master opt]# kubectl get pods,svc -o wide
//查看关联后端的节点
kubectl get endpoints//查看 service 的描述信息
kubectl describe svc nginx
更新 kubectl set
在两个node节点里面运行
yum install ipvsadm -y
ipvsadm -Ln
查看当前nginx的版本
[root@master opt]# curl -I http://192.168.10.150:30769
[root@master opt]# curl -I http://192.168.10.160:30769
版本升级
[root@master opt]# kubectl set image deployment/nginx nginx=nginx:1.15
deployment.apps/nginx image updated
查看版本
[root@master opt]# curl -I http://192.168.10.150:30769
[root@master opt]# curl -I http://192.168.10.160:30769
回滚 kubectl rollout
查看历史版本
kubectl rollout history deployment/nginx
执行回到上一个版本
[root@master opt]# kubectl rollout undo deployment/nginx
deployment.apps/nginx rolled back
//执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1
//检查回滚状态
kubectl rollout status deployment/nginx
删除 kubectl delete
# 删除nginx
[root@master opt]# kubectl delete deployment/nginx
deployment.apps "nginx" deleted
# 删除service
[root@master opt]# kubectl delete svc/nginx-service
service "nginx-service" deleted
# 检查节点
[root@master opt]# kubectl get pods,svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13h <none>
service/nginx NodePort 10.96.3.38 <none> 80:30769/TCP 6h1m app=nginx
金丝雀
更新
更新deployment的版本,并配置暂停deployment
[root@master opt]# kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx
deployment.apps/nginx paused
监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
[root@master opt]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-56496f7bdd-9txrk 0/1 ImagePullBackOff 0 8m4s
nginx-56496f7bdd-fb2xq 1/1 Running 0 8m4s
nginx-56496f7bdd-vqz5d 1/1 Running 0 8m4s
nginx-56496f7bdd-9txrk 0/1 ErrImagePull 0 8m12s
nginx-56496f7bdd-9txrk 0/1 ImagePullBackOff 0 8m25s
查看节点
升级
[root@master opt]# kubectl set image deployment/nginx nginx=nginx:1.15
deployment.apps/nginx image updated