目录
[创建 kubectl create](#创建 kubectl create)
[发布 kubectl expose](#发布 kubectl expose)
[更新 kubectl set](#更新 kubectl set)
[回滚 kubectl rollout](#回滚 kubectl rollout)
[删除 kubectl delete](#删除 kubectl delete)
基本操作
查看版本的信息
[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
        查看
