kubectl详解

文章目录

  • kubectl详解
    • 一、陈述式管理
      • 1、陈述式资源管理方法
      • 2、k8s相关信息查看
        • 2.1 查看版本信息
          • 2.1.1 查看资源对象简写
          • 2.1.2 查看集群信息
          • 2.1.3 配置kubectl自动补全
          • 2.1.4 查看日志
        • 2.2 基本信息查看
          • 2.2.1 查看集群状态
          • 2.2.2 查看命名空间
        • 2.3 命名空间操作
          • 2.3.1 查看default命名空间的所有资源
          • 2.3.2 创建命名空间luck
          • 2.3.3 删除命名空间luck
        • 2.4 deployment/pod操作
          • 2.4.1 在命名空间kube-public创建副本控制器(deployment)来启动Pod(nginx-xx)
          • 2.4.2 显示某个资源的详细信息
          • 2.4.3 查看命名空间kube-public中pod信息
          • 2.4.4 登录容器
          • 2.4.5 删除(重启)pod资源
          • 2.4.6 若无法删除,总是处于terminate状态,则要强行删除pod
          • 2.4.7 扩缩容
            • 2.4.7.1 扩容
            • 2.4.7.2 缩容
          • 2.4.8 删除副本控制器
        • 2.5 增加/删除label
          • 2.5.1 增加label
          • 2.5.2 删除label
      • 3、K8S模拟项目
        • 3.1 项目的生命周期
        • 3.2 创建kubectl run命令
        • 3.3 发布kubectl expose命令
          • 3.3.1 Service的作用
          • 3.3.2 Service的类型
          • 3.3.3 查看Pod网络状态详细信息和Service暴露的端口
          • 3.3.4 查看关联后端的节点
          • 3.3.5 查看service的描述信息
          • 3.3.6 查看负载均衡端口
          • 3.3.7 访问查看
          • 3.3.8 自定义访问页面,查看访问结果
          • 3.3.9 查看访问日志
        • 3.4 更新kubectl set
          • 3.4.1 获取修改模板
          • 3.4.2 查看版本更新策略
          • 3.4.3 查看当前nginx版本并更新
          • 3.4.4 监听pod状态
          • 3.4.5 查看pod的ip变化
          • 3.4.6 重新查看nginx版本信息
        • 3.5 回滚kubectl rollout
          • 3.5.1 查看历史版本
          • 3.5.2 执行回滚到上一个版本
          • 3.5.3 执行回滚到指定版本
          • 3.5.4 检查回滚状态
        • 3.6 删除kubectl delete
          • 3.6.1 删除副本控制器
          • 3.6.2 删除service
      • 4、金丝雀发布/灰度发布(Canary Release)
        • 4.1 金丝雀发布简介
        • 4.2 更新deployment的版本,并配置暂停deployment
          • 4.2.1 创建pods
          • 4.2.2 发布服务
          • 4.2.3 查看nginx版本
          • 4.2.4 更新nginx版本并配置暂停
          • 4.2.5 观察更新状态
          • 4.2.6 监控更新的过程
          • 4.2.7 查看nginx版本
          • 4.2.8 resume继续更新
          • 4.2.9 查看最后的更新情况
    • 二、声明式管理
      • 1、声明式管理方法
      • 2、查看资源配置清单
      • 3、解释资源配置清单
      • 4、修改资源配置清单并应用
        • 4.1 离线修改
        • 4.2 在线修改
      • 5、删除资源配置清单
        • 5.1 陈述式删除
        • 5.2 声明式删除

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
#查看集群节点信息

image-20240517100237064

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

image-20240517100436460

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

image-20240517100544608

2.1.3 配置kubectl自动补全
source <(kubectl completion bash)
#配置kubectl自动补全(只在当前生效,可以放在~/.bashrc文件中)

[root@master ~]# source <(kubectl completion bash)

image-20240517100906950

2.1.4 查看日志
journalctl -u kubelet -f
#查看日志

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的资源
--------------------------------------------------------------------------------------------------------
2.2.1 查看集群状态
kubectl get componentstatuses
kubectl get cs
#查看集群状态

image-20240517103107233

2.2.2 查看命名空间
kubectl get namespace
kubectl get ns
#查看命名空间

image-20240517103205277

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

kubectl get all
#查看空间的所有资源

image-20240517103527444

2.3.2 创建命名空间luck
kubectl create ns luck
#创建命名空间luck

kubectl get ns
#显示所有命名空间

image-20240517142633128

2.3.3 删除命名空间luck
kubectl delete ns luck
#删除命名空间luck(谨慎使用,会清空luck命名空间下的所有资源)

kubectl get ns
#显示所有命名空间信息

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 资源的列表

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调度失败的原因)

image-20240517145809555

image-20240517150351876

image-20240517150435971

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

image-20240517150740708

2.4.4 登录容器
#kubectl exec可以跨主机登录容器,docker exec只能在容器所在主机登录

kubectl exec -it nginx-xx-55f6c96849-vjsnm bash -n kube-public
#登录容器

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实例

image-20240517151852516

2.4.6 若无法删除,总是处于terminate状态,则要强行删除pod
#kubectl delete pod -n --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅的退出,0表示立即终止pod

#在删除命名空间之前,请确保该命名空间中没有正在运行的重要应用程序,以免影响集群的稳定性和可用性。

#有些命名空间可能是由Kubernetes系统自动生成的,不允许被删除。在删除之前,请确认命名空间是否允许被删除。

#在执行删除操作之前,请确保已经备份了必要的数据和配置
2.4.7 扩缩容
kubectl scale <资源类型> <资源名称> --replicas=num [-n ns]
2.4.7.1 扩容
kubectl scale deployment nginx-xx --replicas=3 -n kube-public
#创建3个副本

kubectl get pods -n kube-public
#显示pod资源信息

image-20240517153143179

2.4.7.2 缩容
kubectl scale deployment nginx-xx --replicas=1 -n kube-public
#缩容,只留一个副本

kubectl get pods -n kube-public
#显示pod资源信息

image-20240517153320700

2.4.8 删除副本控制器
kubectl delete deployment/nginx-xx -n kube-public
#删除副本控制器

kubectl get deployment -n kube-public
#显示deployment资源信息

image-20240517153838260

2.5 增加/删除label
kubectl get <资源类型> [-n 命名空间] --show-labels
#查看指定的某个资源的标签
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资源列表,并显示标签

image-20240517160936696

2.5.2 删除label
kubectl get deploy --show-labels
#显示deploy资源列表,并显示标签

kubectl label deploy nginx-deployment version-
#删除标签

kubectl get deploy --show-labels
#显示deploy资源列表,并显示标签

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
#显示空间所有资源

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。这是将服务暴露给集群外部的一种方式。
--------------------------------------------------------------------------------------------------------

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暴露的端口

image-20240521171509438

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

image-20240521171529327

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

image-20240521171546684

curl 192.168.10.11:32056
curl 192.168.10.12:32056
curl 192.168.10.13:32056
#使用任意节点ip访问

image-20240521171608427

image-20240521171622964

image-20240521171634614

3.3.6 查看负载均衡端口
  • 在node01节点上操作
yum install -y ipvsadm.x86_64
#安装服务

ipvsadm -Ln
#显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)

image-20240521171821055

image-20240521172727050

  • 在node02节点上操作
yum install -y ipvsadm.x86_64
#安装服务

ipvsadm -Ln
#显示当前的 IPVS 表(查看已配置的虚拟服务和后端服务器)

image-20240521172907754

image-20240521173131320

3.3.7 访问查看
curl 10.96.18.173
curl 192.168.10.12:32056
curl 192.168.10.13:32056
#访问查看

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
#验证访问

image-20240521180618015

image-20240521180648336

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

image-20240521174058489

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

image-20240521222321402

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

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。

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版本

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%的比例进行滚动更新。
3.4.5 查看pod的ip变化
kubectl get pod -owide -n luck
#查看pod详细信息ip变化

#pod更新后,ip改变

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版本信息

image-20240522001653676

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

image-20240522001833839

3.5.1 查看历史版本
kubectl rollout history deployment/nginx -n luck
#查看历史版本

----------------------------------------------------------------------------------------------------------
REVISION
#显示历史中的每个版本,最多记录三次
CHANGE-CAUSE
#显示触发该版本变更的原因。显示为 <none>,表示没有明确的变更原因被记录
----------------------------------------------------------------------------------------------------------

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版本

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版本

image-20240522004757980

image-20240522004924517

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

image-20240522005050624

3.6 删除kubectl delete
3.6.1 删除副本控制器
kubectl get deploy
#显示副本控制器

kubectl delete deployment/nginx
#删除deploy副本控制器

kubectl get deploy
#显示副本控制器

image-20240522005916206

3.6.2 删除service
kubectl get svc
#显示svc资源类型信息

kubectl delete svc/nginx-service
#删除svc

kubectl get svc
#显示svc资源类型信息

kubectl get all
#显示所有信息

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信息

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详细信息

image-20240522021859357

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

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版本,并暂停更新

image-20240522023337946

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

image-20240522023600700

4.2.7 查看nginx版本
kubectl get svc -owide
#显示svc详细信息

curl -I 192.168.10.12:32056
#查看nginx版本

image-20240522024016052

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

image-20240522024322325

4.2.9 查看最后的更新情况
kubectl get pods
#显示pod信息

curl -I 192.168.10.12:32056
#查看nginx版本信息

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

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: {}

image-20240522195418047

3、解释资源配置清单

kubectl explain deployment.metadata
#解释资源配置清单

kubectl explain service.metadata
#解释资源配置清单

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资源

image-20240522200923412

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

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

kubectl edit service nginx-service
#修改配置资源清单

kubectl get svc
#查看service资源

image-20240522201142234

image-20240522201235807

5、删除资源配置清单

5.1 陈述式删除
kubectl delete service/nginx
#陈述式删除

kubectl get svc
#查看service资源

image-20240522201516216

5.2 声明式删除
kubectl delete -f nginx-svc.yaml
#声明式删除

kubectl get svc
#查看service资源

image-20240522201831697

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/633200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CDN用户平台安装说明

CDN用户平台安装说明 登录管理员系统 在”系统设置” – “高级设置” – “用户节点”中点击”添加节点” 如果所示&#xff1a; 节点名称 - 可以任意填写 进程监听端口 - 启动用户节点后&#xff0c;进程所监听的端口&#xff0c;通常是HTTP 80或者HTTPS 443&#xff0c;…

html 段落与排版标记 Web前端开发技术、详细文章(例如)

段落与排版标记 网页的外观是否美观&#xff0c;很大程度上取决于其排版。在页面中出现大段的文字&#xff0c;通常采用分段进行规划&#xff0c;对换行也有极其严格的划分。本节从段落的细节设置入手&#xff0c;利用段落与排版标记自如地处理大段的文字。 段落p标记 在HTM…

Spring Cloud Gateway 网关

一. 什么是网关&#xff08;Gateway&#xff09; 网关就是一个网络连接到另一个网络的关口。 在同一个项目或某一层级中&#xff0c;存在相似或重复的东西&#xff0c;我们就可以将这些相似重复的内容统一提取出来&#xff0c;向前或向后抽象成单独的一层。这个抽象的过程就是…

Linux磁盘高级操作

RAID RAID存储系统是一种数据存储虚拟化技术&#xff0c;它将多个物理磁盘驱动器组合成一个或多个逻辑单元&#xff0c;以提供数据冗余和/或提高性能。 1. RAID 0 无奇偶校验与冗余&#xff08;磁盘容错&#xff09;的条带存储&#xff08;带区卷/条带卷&#xff09; 由两块…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…

简单快捷的图片格式转换工具:认识webp2jpg-online

经常写博客或记笔记的朋友们可能会碰到图床不支持的图片格式或图片太大需要压缩的情况。通常&#xff0c;我们会在浏览器中搜索在线图片格式转换器&#xff0c;但这些转换器往往伴有烦人的广告或要求登录&#xff0c;并且支持的转换格式有限。最近&#xff0c;我在浏览 GitHub …

java8总结

java8总结 java8新特性总结1. 行为参数化2. lambda表达式2.1 函数式接口2.2 函数描述符 3. Stream API3.1 付诸实践 java8新特性总结 行为参数化lambda表达式Stream Api 1. 行为参数化 定义&#xff1a;行为参数化&#xff0c;就是一个方法接受多个不同的行为作为参数&#x…

HiWoo Box边缘计算网关

​在数字化浪潮汹涌的今天&#xff0c;边缘计算网关成为了连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。HiWoo Box&#xff0c;作为一款功能强大的边缘计算网关&#xff0c;不仅具备了传统网关的基本功能&#xff0c;更在数据采集、处理、传输等方面展现出了卓越…

岛屿问题刷题

200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numIslands(char[][] grid) {int n grid.length;//grid行数int m grid[0].length;//grid列数int res 0;for(int r 0;r<n;r){for(int c0;c<m;c){if(grid[r][c]1){dfs(grid,r,c);res…

Web Server项目实战3-Web服务器简介及HTTP协议

Web Server&#xff08;网页服务器&#xff09; 一个 Web Server 就是一个服务器软件&#xff08;程序&#xff09;&#xff0c;或者是运行这个服务器软件的硬件&#xff08;计算机&#xff09;。其主要功能是通过 HTTP 协议与客户端&#xff08;通常是浏览器&#xff08;Brow…

面试八股之MySQL篇5——主从同步原理篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

CSS transform 三大属性 rotate、scale、translate

transform 浏览器支持定义和用法translate位移函数rotate旋转函数scale缩放函数 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。 定义和用法 transform 属性向元素应用 2D…

音视频安卓主板记录仪手持终端定制开发_基于MT6762平台解决方案

音视频安卓主板采用了基于MT6762高性能处理器芯片的设计&#xff0c;其中包括4个主频高达2.0GHz的Cortex-A53核心和4个主频1.5GHz的Cortex-A53高效聚焦核心&#xff0c;可提供无比流畅的体验。搭载Android 12操作系统&#xff0c;系统版本进行了全新的优化&#xff0c;进一步确…

新火种AI|净利润上升628%,英伟达财报说明AI热潮还将持续

作者&#xff1a;一号 编辑&#xff1a;美美 AI大潮仍未放缓&#xff0c;英伟达再次超越预期。 今天凌晨&#xff0c;全球AI算力芯片龙头&#xff0c;被称为“AI时代卖铲人”的英伟达&#xff0c;正式公布了截至2024年4月28日的2025财年第一财季财报&#xff0c;其中第一财季…

Linux:top命令的每一列的具体含义

Linux&#xff1a;top命令的每一列的具体含义 文章目录 Linux&#xff1a;top命令的每一列的具体含义图片显示top命令的概念语法显示字段的含义顶部字段第二行第三行第四行第五行每列字段的含义 图片显示 top命令的概念 top命令上一个常用的Linux命令行工具&#xff0c;用于实…

医院是自建档案室还是档案寄存好呢

医院可以选择自建档案室或档案寄存&#xff0c;具体选择取决于医院的需求和资源。 自建档案室意味着医院会拥有自己的档案空间和设施&#xff0c;可以更方便地管理和保管档案。这种方式可以确保医院对档案的访问和控制有更多的自主权&#xff0c;同时也能够根据医院的需求进行档…

是做软件开发,还是软件测试,哪个职业更好,全方位对比

文章目录 前言一、市场需求二、技能需求三、工作强度四、行业趋势总结 前言 在IT行业中&#xff0c;软件开发和软件测试这两个职业长期共存&#xff0c;相爱相杀。很多人都纠结过是做软件开发还是做软件测试&#xff0c;本篇文章将进行全方位对比分析&#xff0c;供各位读者参…

小程序-收货地址管理模块实现

页面结构代码&#xff1a; address-form.vue --->新建地址和修改地址页面 <template><view class"content"><form><!-- 表单内容 --><view class"form-item"><text class"label">收货人</text>…

Chatgpt人工智能对话系统:引领的智能交互新时代 附带完整的源代码以及搭建教程

系统概述 在人工智能技术日新月异的今天&#xff0c;对话式AI系统正逐步成为连接人与信息、服务乃至情感的桥梁。其中&#xff0c;ChatGPT作为新一代人工智能对话系统的杰出代表&#xff0c;凭借其卓越的自然语言处理能力、个性化交互体验和广泛的应用场景&#xff0c;正在引领…