• kubectl详解


    文章目录

    kubectl详解

    一、陈述式管理

    1、陈述式资源管理方法

    • 通过命令额方式语句来实现对资源的管理,即通过一条命令来实现

    • kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口

    • kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径

    • kubectl的命令大全

      • kubectl --help
      • k8s官方中文文档:http://docs.kubernetes.org.cn/683.html
    • 对资源的增、删、查操作比较容易,但对改的操作就不容易了

    2、k8s相关信息查看

    2.1 查看版本信息
    kubectl version
    #查看版本信息
    
    kubectl get nodes
    #查看集群节点信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517100237064

    2.1.1 查看资源对象简写
    kubectl api-resources
    #查看资源对象简写
    
    • 1
    • 2

    image-20240517100436460

    2.1.2 查看集群信息
    kubectl cluster-info
    #查看集群信息
    
    • 1
    • 2

    image-20240517100544608

    2.1.3 配置kubectl自动补全
    source <(kubectl completion bash)
    #配置kubectl自动补全(只在当前生效,可以放在~/.bashrc文件中)
    
    [root@master ~]# source <(kubectl completion bash)
    
    • 1
    • 2
    • 3
    • 4

    image-20240517100906950

    2.1.4 查看日志
    journalctl -u kubelet -f
    #查看日志
    
    • 1
    • 2

    image-20240517101029970

    2.2 基本信息查看
    kubectl get <resource> [-o wide|json|yaml] [-n namespace]
    
    --------------------------------------------------------------------------------------------------------
    获取资源的相关信息,
    -n指定命名空间
    -o指定输出格式
    resource可以是具体资源名称,如"pod nhinx-xxx";也可以是资源类型,如“pod,node,svc,deploy”多种资源使用逗号间隔;或者all(仅展示几种核心资源,并不完整)
    --all-namespaces或-A:表示显示所有命名空间
    --show-labels:显示所有标签
    -l app:仅显示标签为app的资源
    -l app=nginx:仅显示包含app标签,且值为nginx的资源
    --------------------------------------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2.2.1 查看集群状态
    kubectl get componentstatuses
    kubectl get cs
    #查看集群状态
    
    • 1
    • 2
    • 3

    image-20240517103107233

    2.2.2 查看命名空间
    kubectl get namespace
    kubectl get ns
    #查看命名空间
    
    • 1
    • 2
    • 3

    image-20240517103205277

    2.3 命名空间操作
    2.3.1 查看default命名空间的所有资源
    kubectl get all [-n default]
    #由于deafult为缺省空间,当不指定命名空间时默认查看default命名空间
    
    kubectl get all
    #查看空间的所有资源
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517103527444

    2.3.2 创建命名空间luck
    kubectl create ns luck
    #创建命名空间luck
    
    kubectl get ns
    #显示所有命名空间
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517142633128

    2.3.3 删除命名空间luck
    kubectl delete ns luck
    #删除命名空间luck(谨慎使用,会清空luck命名空间下的所有资源)
    
    kubectl get ns
    #显示所有命名空间信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517142842725

    2.4 deployment/pod操作
    2.4.1 在命名空间kube-public创建副本控制器(deployment)来启动Pod(nginx-xx)
    kubectl create deployment nginx-xx --image=nginx -n kube-public
    #在 kube-public 命名空间中创建一个名为 nginx-xx 的 Deployment,该 Deployment 将运行 nginx 镜像
    
    --------------------------------------------------------------------------------------------------------
    deployment:要创建的资源类型是 Deployment。Deployment 是 Kubernetes 中用于管理无状态应用(如 web 服务器)的资源。
    nginx-xx:为新的 Deployment 指定的名称。
    --image:指定要在 Deployment 中运行的容器镜像。
    -n 或 --namespace:指定要在哪个 Kubernetes 命名空间中创建 Deployment。
    kube-public:这是 Kubernetes 中的一个预定义命名空间,通常用于存储可以由集群中所有用户访问的公共对象。
    --------------------------------------------------------------------------------------------------------
    
    kubectl get deploy -n kube-public
    #显示Deployment 资源的列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    image-20240517145018593

    2.4.2 显示某个资源的详细信息
    kubectl describe <资源类型>  <资源名称>  [-n 命名空间]
    #显示某个资源的详细信息
    --------------------------------------------------------------------------------------------------------
    <资源类型>
    #描述的资源的类型,比如 pod、service、deployment、statefulset 等。
    <资源名称>
    #你想要描述的资源的名称。
    [-n 命名空间]
    #可选参数,指定资源所在的命名空间。不指定则为当前默认命名空间,通常是default。
    --------------------------------------------------------------------------------------------------------
    
    kubectl describe deployment nginx-xx -n kube-public
    #显示nginx-xx的deployment资源的详细信息(显示副本信息)
    
    kubectl describe pod nginx-xx -n kube-public
    #显示nginx-xx的pod资源的详细信息(可以详细显示某个pod调度失败的原因)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    image-20240517145809555

    image-20240517150351876

    image-20240517150435971

    2.4.3 查看命名空间kube-public中pod信息
    kubectl get pods -n kube-public
    #显示命名空间kube-public中pod信息
    
    • 1
    • 2

    image-20240517150740708

    2.4.4 登录容器
    #kubectl exec可以跨主机登录容器,docker exec只能在容器所在主机登录
    
    kubectl exec -it nginx-xx-55f6c96849-vjsnm bash -n kube-public
    #登录容器
    
    • 1
    • 2
    • 3
    • 4

    image-20240517151353794

    2.4.5 删除(重启)pod资源
    #由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来kubectl delete pod nginx-test-65c98cd596-nq9cq -n kube-public
    
    kubectl delete pod nginx-xx-55f6c96849-vjsnm -n kube-public
    #删除pod资源
    
    kubectl get pods -n kube-public
    #显示命名空间kube-public中pod信息(使用delpoyment启动的pod实例,直接去删除pod是无法删除的)
    
    这是因为delpoyment控制器,是一种pod控制器,它建立在ReplicaSet之上的控制器,用于管理无状态应用,同时管理和控制Pod与ReplicaSet,确保pod实例,一直保持在replicaset设置的预期值上,想要删除pod实例,只能通过删除控制器来删除它管理的pod实例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20240517151852516

    2.4.6 若无法删除,总是处于terminate状态,则要强行删除pod
    #kubectl delete pod -n --force --grace-period=0
    #grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅的退出,0表示立即终止pod
    
    #在删除命名空间之前,请确保该命名空间中没有正在运行的重要应用程序,以免影响集群的稳定性和可用性。
    
    #有些命名空间可能是由Kubernetes系统自动生成的,不允许被删除。在删除之前,请确认命名空间是否允许被删除。
    
    #在执行删除操作之前,请确保已经备份了必要的数据和配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2.4.7 扩缩容
    kubectl scale <资源类型> <资源名称> --replicas=num [-n ns]
    
    • 1
    2.4.7.1 扩容
    kubectl scale deployment nginx-xx --replicas=3 -n kube-public
    #创建3个副本
    
    kubectl get pods -n kube-public
    #显示pod资源信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517153143179

    2.4.7.2 缩容
    kubectl scale deployment nginx-xx --replicas=1 -n kube-public
    #缩容,只留一个副本
    
    kubectl get pods -n kube-public
    #显示pod资源信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517153320700

    2.4.8 删除副本控制器
    kubectl delete deployment/nginx-xx -n kube-public
    #删除副本控制器
    
    kubectl get deployment -n kube-public
    #显示deployment资源信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240517153838260

    2.5 增加/删除label
    kubectl get <资源类型> [-n 命名空间] --show-labels
    #查看指定的某个资源的标签
    
    • 1
    • 2
    2.5.1 增加label
    kubectl get deploy --show-labels
    #获取集群中所有 Deployment 资源的列表,并显示它们的标签(labels)。
    
    kubectl label deploy nginx-deployment version=nginx1.15
    #添加标签
    
    kubectl get deploy --show-labels
    #显示deploy资源列表,并显示标签
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240517160936696

    2.5.2 删除label
    kubectl get deploy --show-labels
    #显示deploy资源列表,并显示标签
    
    kubectl label deploy nginx-deployment version-
    #删除标签
    
    kubectl get deploy --show-labels
    #显示deploy资源列表,并显示标签
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240517161221935

    3、K8S模拟项目

    3.1 项目的生命周期
    • 创建–>发布–>更新–>回滚–>删除
    3.2 创建kubectl run命令
    • 创建并运行一个或多个容器镜像
    • 创建一个deployment或job来管理容器

    kubectl run --help查看使用帮助

    kubectl run nginx --image=nginx --port=80 --replicas=3
    #启动nginx实例,暴露容器端口80,设置副本数3
    
    kubectl get pods
    #显示pods信息
    
    kubectl get all
    #显示空间所有资源
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240517172611544

    3.3 发布kubectl expose命令
    • 将资源暴露为新的Service
    kubectl expose --help查看使用帮助
    
    kubectl expose deployment nginx-deployment --port=80 --target-port=80 --name=nginx-service --type=NodePort
    #为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
    
    --------------------------------------------------------------------------------------------------------
    --port=80
    #指定了Service的端口,即集群内部其他Pods可以通过这个端口访问Service
    --target-port=80
    #指定了Service将流量转发到的目标端口,即Pods上实际运行的服务的端口。
    #--target-port和--port可以是相同的,但也可以不同,具体取决于部署配置。
    --name=nginx-service
    #指定了新创建的Service的名称
    --type=NodePort
    #指定了Service 的类型。NodePort类型意味着Service会在集群的每个节点上打开一个特定的端口(称为 NodePort,端口范围为30000-32767之间的一个随机数),这样外部流量就可以通过该端口访问Service。这是将服务暴露给集群外部的一种方式。
    --------------------------------------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    image-20240517173158399

    3.3.1 Service的作用
    • Kubernetes之所以需要Service,一方面是因为Pod的IP不是固定的(Pod可能会重建),另一方面是因为一组Pod实例之间总会有负载均衡的需求。
    • Service通过Label Selector实现的对一组的Pod的访问。
    • 对于容器应用而言,Kubernetes提供了基于VIP(虚拟IP)的网桥的方式访问Service,再由Service重定向到相应的Pod。
    3.3.2 Service的类型
    • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(Service默认类型)
    • NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过NodeIP:NodePort的方式
    • LoadBalancer:通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
    3.3.3 查看Pod网络状态详细信息和Service暴露的端口
    kubectl get pods,svc -o wide
    #查看Pod网络状态详细信息和Service暴露的端口
    
    • 1
    • 2

    image-20240521171509438

    3.3.4 查看关联后端的节点
    kubectl get endpoints
    #查看失联后端的节点
    
    • 1
    • 2

    image-20240521171529327

    3.3.5 查看service的描述信息
    kubectl describe svc nginx
    #查看service的描述信息
    
    • 1
    • 2

    image-20240521171546684

    curl 192.168.10.11:32056
    curl 192.168.10.12:32056
    curl 192.168.10.13:32056
    #使用任意节点ip访问
    
    • 1
    • 2
    • 3
    • 4

    image-20240521171608427

    image-20240521171622964

    image-20240521171634614

    3.3.6 查看负载均衡端口
    • 在node01节点上操作
    yum install -y ipvsadm.x86_64
    #安装服务
    
    ipvsadm -Ln
    #显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240521171821055

    image-20240521172727050

    • 在node02节点上操作
    yum install -y ipvsadm.x86_64
    #安装服务
    
    ipvsadm -Ln
    #显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240521172907754

    image-20240521173131320

    3.3.7 访问查看
    curl 10.96.18.173
    curl 192.168.10.12:32056
    curl 192.168.10.13:32056
    #访问查看
    
    • 1
    • 2
    • 3
    • 4

    image-20240521173924101

    image-20240521173936472

    image-20240521173952210

    3.3.8 自定义访问页面,查看访问结果
    kubectl exec -it nginx-deployment-6975c5dffc-h228n bash
    kubectl exec -it nginx-deployment-6975c5dffc-mdn4g bash
    kubectl exec -it nginx-deployment-6975c5dffc-mhc6m bash
    #登录容器,自定义访问页面
    
    curl 10.96.18.173
    #验证访问
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20240521180618015

    image-20240521180648336

    3.3.9 查看访问日志
    kubectl logs nginx-deployment-6975c5dffc-mhc6m
    #查看访问日志
    
    • 1
    • 2

    image-20240521174058489

    3.4 更新kubectl set
    • 更改现有应用资源一些信息。
    kubectl set --help
    #查看使用帮助
    
    • 1
    • 2

    image-20240521222321402

    3.4.1 获取修改模板
    kubectl set image --help
    #查看修改模板
    
    • 1
    • 2

    image-20240521224651477

    3.4.2 查看版本更新策略
    kubectl describe deployments.apps nginx
    #查看版本更新策略
    
    --------------------------------------------------------------------------------------------------------
    RollingUpdateStrategy 
    #Deployment资源的一个字段,它用于定义滚动更新的策略。
    #滚动更新允许你逐步替换Pod,以确保在更新过程中服务的高可用性
    
    maxUnavailable
    #这是一个可选字段,用于指定在滚动更新过程中可以有多少个Pod处于不可用状态。
    #这个值可以是一个整数(表示具体的Pod数量)或者一个百分比
    #例如,25%的maxUnavailable意味着在更新过程中,可以有最多25%的Pod处于不可用状态。
    
    maxSurge 
    #这也是一个可选字段,用于指定在滚动更新过程中可以有多少个额外的Pod同时运行。
    #这个值也可以是一个整数或百分比。例如25%的maxSurge意味着在更新过程中,
    #可以比期望的Pod数量多运行最多25%的Pod。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image-20240521225842222

    3.4.3 查看当前nginx版本并更新
    kubectl get pod,svc -owide -n luck
    #查看指定命名空间(luck)资源类型(pod,svc)的详细信息
    
    curl -I 10.244.2.37
    #查看当前nginx版本
    
    kubectl set image deployment/nginx nginx=nginx:1.22 -n luck
    #将nginx版本更新为1.22版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240522001348356

    3.4.4 监听pod状态
    kubectl get pods -w
    #监听pod状态
    
    #处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后以此类推
    #更新规则可通过“kubetl describe deployment nginx”的“RollingUpdateStrategy”查看,默认配置为“25% max unavailable, 25% max surge”,即按照25%的比例进行滚动更新。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.4.5 查看pod的ip变化
    kubectl get pod -owide -n luck
    #查看pod详细信息ip变化
    
    #pod更新后,ip改变
    
    • 1
    • 2
    • 3
    • 4

    image-20240522001513197

    3.4.6 重新查看nginx版本信息
    curl -I 10.244.2.47
    curl -I 10.96.131.20
    curl -I 192.168.10.13:31808
    #查看nginx版本信息
    
    • 1
    • 2
    • 3
    • 4

    image-20240522001653676

    3.5 回滚kubectl rollout
    • 对资源进行回滚管理
    kubectl rollout --help
    #查看使用帮助
    
    • 1
    • 2

    image-20240522001833839

    3.5.1 查看历史版本
    kubectl rollout history deployment/nginx -n luck
    #查看历史版本
    
    ----------------------------------------------------------------------------------------------------------
    REVISION
    #显示历史中的每个版本,最多记录三次
    CHANGE-CAUSE
    #显示触发该版本变更的原因。显示为 ,表示没有明确的变更原因被记录
    ----------------------------------------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20240522002151251

    3.5.2 执行回滚到上一个版本
    kubectl rollout undo deployment/nginx -n luck
    #回滚到上一个版本
    
    kubectl get pod -owide -n luck
    #查看pod的ip变化(回滚后ip再次改变)
    
    curl -I 10.244.1.52
    #查看当前nginx版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240522003524436

    3.5.3 执行回滚到指定版本
    kubectl rollout history deployment/nginx -n luck
    #查看历史版本
    
    kubectl rollout undo deployment/nginx --to-revision=5 -n luck
    #回到revision5版本
    
    kubectl get pod -owide -n luck
    #查看pod的ip变化,回滚后ip发生改变
    
    curl -I 10.244.1.56
    #查看当前nginx版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20240522004757980

    image-20240522004924517

    3.5.4 检查回滚状态
    kubectl rollout status deployment/nginx -n luck
    #检查回滚状态
    
    • 1
    • 2

    image-20240522005050624

    3.6 删除kubectl delete
    3.6.1 删除副本控制器
    kubectl get deploy
    #显示副本控制器
    
    kubectl delete deployment/nginx
    #删除deploy副本控制器
    
    kubectl get deploy
    #显示副本控制器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20240522005916206

    3.6.2 删除service
    kubectl get svc
    #显示svc资源类型信息
    
    kubectl delete svc/nginx-service
    #删除svc
    
    kubectl get svc
    #显示svc资源类型信息
    
    kubectl get all
    #显示所有信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20240522010311134

    4、金丝雀发布/灰度发布(Canary Release)

    4.1 金丝雀发布简介
    • Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,在筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
    4.2 更新deployment的版本,并配置暂停deployment
    4.2.1 创建pods
    kubectl create deployment nginx-xx --image=nginx:1.18 --replicas=3
    #创建pod资源信息
    
    kubectl get pod
    #显示pod信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522021745352

    4.2.2 发布服务
    kubectl expose deployment nginx-xx --port=80 --target-port=80 --name=nginx-svc --type=NodePort
    #暴露端口,对外提供服务
    
    kubectl get svc -owide
    #查看svc详细信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522021859357

    4.2.3 查看nginx版本
    curl -I 192.168.10.12:30555
    #查看nginx版本信息
    
    • 1
    • 2

    image-20240522022022228

    4.2.4 更新nginx版本并配置暂停
    kubectl set image deploy/nginx-xx nginx-xx=nginx:1.20 && kubectl rollout pause deploy/nginx-xx
    #更新nginx版本为1.20版本,并暂停更新
    
    • 1
    • 2

    image-20240522023337946

    4.2.5 观察更新状态
    kubectl rollout status deploy/nginx-xx
    #查看更新状态
    
    • 1
    • 2
    4.2.6 监控更新的过程
    • 可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
    kubectl get pod
    #显示pod信息
    
    • 1
    • 2

    image-20240522023600700

    4.2.7 查看nginx版本
    kubectl get svc -owide
    #显示svc详细信息
    
    curl -I 192.168.10.12:32056
    #查看nginx版本
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522024016052

    4.2.8 resume继续更新
    • 测试新版本没问题继续更新
    kubectl rollout resume deploy/nginx-xx
    #新版本没问题之后继续更新
    
    • 1
    • 2

    image-20240522024322325

    4.2.9 查看最后的更新情况
    kubectl get pods
    #显示pod信息
    
    curl -I 192.168.10.12:32056
    #查看nginx版本信息
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522024447572

    image-20240522024535956

    二、声明式管理

    1、声明式管理方法

    • 适合于对资源的修改操作
    • 声明式资源管理方法依赖于资源配置清明文件对资源进行管理
    • 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
    • 对资源的观念里,是通过实现定义在同一资源配置清单内,再通过陈述式命令应用到k8s集群里
    • 语法格式:kubectl create/apply/delete -f -o yaml

    2、查看资源配置清单

    #以yaml格式查看 nginx-xx 的 Deployment 资源的详细信息
    [root@master ~]#kubectl get deployment/nginx-xx -o yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "2"
      creationTimestamp: "2024-05-21T18:16:27Z"
      generation: 4
      labels:
        app: nginx-xx
      managedFields:
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:labels:
              .: {}
              f:app: {}
          f:spec:
            f:progressDeadlineSeconds: {}
            f:replicas: {}
            f:revisionHistoryLimit: {}
            f:selector: {}
            f:strategy:
              f:rollingUpdate:
                .: {}
                f:maxSurge: {}
                f:maxUnavailable: {}
              f:type: {}
            f:template:
              f:metadata:
                f:labels:
                  .: {}
                  f:app: {}
              f:spec:
                f:containers:
                  k:{"name":"nginx"}:
                    .: {}
                    f:imagePullPolicy: {}
                    f:name: {}
                    f:resources: {}
                    f:terminationMessagePath: {}
                    f:terminationMessagePolicy: {}
                f:dnsPolicy: {}
                f:restartPolicy: {}
                f:schedulerName: {}
                f:securityContext: {}
                f:terminationGracePeriodSeconds: {}
        manager: kubectl-create
        operation: Update
        time: "2024-05-21T18:16:27Z"
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:
          f:spec:
            f:template:
              f:spec:
                f:containers:
                  k:{"name":"nginx"}:
                    f:image: {}
        manager: kubectl-set
        operation: Update
        time: "2024-05-21T18:32:26Z"
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:annotations:
              .: {}
              f:deployment.kubernetes.io/revision: {}
          f:status:
            f:availableReplicas: {}
            f:conditions:
              .: {}
              k:{"type":"Available"}:
                .: {}
                f:lastTransitionTime: {}
                f:lastUpdateTime: {}
                f:message: {}
                f:reason: {}
                f:status: {}
                f:type: {}
              k:{"type":"Progressing"}:
                .: {}
                f:lastTransitionTime: {}
                f:lastUpdateTime: {}
                f:message: {}
                f:reason: {}
                f:status: {}
                f:type: {}
            f:observedGeneration: {}
            f:readyReplicas: {}
            f:replicas: {}
            f:updatedReplicas: {}
        manager: kube-controller-manager
        operation: Update
        time: "2024-05-21T18:42:13Z"
      name: nginx-xx
      namespace: default
      resourceVersion: "22223"
      uid: b59db034-330c-4b1b-b032-8e47d821538a
    spec:
      progressDeadlineSeconds: 600
      replicas: 3
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: nginx-xx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: nginx-xx
        spec:
          containers:
          - image: nginx:1.20
            imagePullPolicy: IfNotPresent
            name: nginx
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    status:
      availableReplicas: 3
      conditions:
      - lastTransitionTime: "2024-05-21T18:16:29Z"
        lastUpdateTime: "2024-05-21T18:16:29Z"
        message: Deployment has minimum availability.
        reason: MinimumReplicasAvailable
        status: "True"
        type: Available
      - lastTransitionTime: "2024-05-21T18:41:29Z"
        lastUpdateTime: "2024-05-21T18:42:13Z"
        message: ReplicaSet "nginx-xx-857b968668" has successfully progressed.
        reason: NewReplicaSetAvailable
        status: "True"
        type: Progressing
      observedGeneration: 4
      readyReplicas: 3
      replicas: 3
      updatedReplicas: 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151

    image-20240522195439847

    #以yaml格式查看 nginx-svc 的 service 资源的详细信息
    [root@master ~]#kubectl get service/nginx-svc -o yaml
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: "2024-05-21T18:17:54Z"
      labels:
        app: nginx-xx
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:labels:
              .: {}
              f:app: {}
          f:spec:
            f:externalTrafficPolicy: {}
            f:ports:
              .: {}
              k:{"port":80,"protocol":"TCP"}:
                .: {}
                f:port: {}
                f:protocol: {}
                f:targetPort: {}
            f:selector:
              .: {}
              f:app: {}
            f:sessionAffinity: {}
            f:type: {}
        manager: kubectl-expose
        operation: Update
        time: "2024-05-21T18:17:54Z"
      name: nginx-svc
      namespace: default
      resourceVersion: "20089"
      uid: ff2ed757-d49d-4436-b2b9-8666d70935e5
    spec:
      clusterIP: 10.96.137.140
      clusterIPs:
      - 10.96.137.140
      externalTrafficPolicy: Cluster
      ports:
      - nodePort: 32056
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx-xx
      sessionAffinity: None
      type: NodePort
    status:
      loadBalancer: {}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    image-20240522195418047

    3、解释资源配置清单

    kubectl explain deployment.metadata
    #解释资源配置清单
    
    kubectl explain service.metadata
    #解释资源配置清单
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522195748353

    image-20240522195729713

    4、修改资源配置清单并应用

    4.1 离线修改
    • 修改yaml文件:并用kubectl apply -f xxxx.yaml文件使之生效
    • 注意:当apply不生效时,先使用delete清除资源,再apply创建资源
    kubectl get service nginx-svc -o yaml > nginx-svc.yaml
    #将查询的yaml结果输出到nginx-svc.yaml文件中
    
    vim nginx-svc.yaml
    #编辑修改yaml文件
    
    kubectl delete -f nginx-svc.yaml
    #删除资源
    
    kubectl apply -f nginx-svc.yaml
    #新建资源
    
    kubectl get svc
    #查看service资源
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    image-20240522200923412

    4.2 在线修改
    • 直接使用kubectl edit service nginx-service在线编辑配置资源清单并保存退出即时生效(如port: 888)

    • 此修改方式不会对yaml文件内容修改

    kubectl edit service nginx-service
    #修改配置资源清单
    
    kubectl get svc
    #查看service资源
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522201142234

    image-20240522201235807

    5、删除资源配置清单

    5.1 陈述式删除
    kubectl delete service/nginx
    #陈述式删除
    
    kubectl get svc
    #查看service资源
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522201516216

    5.2 声明式删除
    kubectl delete -f nginx-svc.yaml
    #声明式删除
    
    kubectl get svc
    #查看service资源
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20240522201831697

  • 相关阅读:
    Iocomp ActiveX v5 SP6 带OPC -Crack
    c入门第二十四篇: 学生成绩管理系统优化(可执行文件传参)
    Linux期末总复习( 详解 )
    MySQL高级语句(一)
    docker和anaconda使用基础
    el7升级Apache模块编译
    MySQL - 深入理解 MySQL 的事务和隔离级别
    【图论】Floyd
    java计算机毕业设计用户行为自动化书籍推荐系统源码+系统+mysql数据库+lw文档+部署
    手动部署 OceanBase 集群
  • 原文地址:https://blog.csdn.net/2301_81272194/article/details/139128730