kubectl详解

kubectl详解

码农世界 2024-05-23 后端 63 次浏览 0个评论

文章目录

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

                                              2.2 基本信息查看
                                              kubectl get  [-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
                                              #查看集群状态
                                              

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

                                              2.3.2 创建命名空间luck
                                              kubectl create ns luck
                                              #创建命名空间luck
                                              kubectl get ns
                                              #显示所有命名空间
                                              

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

                                              kubectl详解

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

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

                                              kubectl详解

                                              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资源列表,并显示标签
                                              

                                              kubectl详解

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

                                              kubectl详解

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

                                                  kubectl详解

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

                                                    kubectl详解

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

                                                        kubectl详解

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

                                                        kubectl详解

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

                                                        kubectl详解

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

                                                        kubectl详解

                                                        kubectl详解

                                                        kubectl详解

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

                                                          kubectl详解

                                                          kubectl详解

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

                                                            kubectl详解

                                                            kubectl详解

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

                                                            kubectl详解

                                                            kubectl详解

                                                            kubectl详解

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

                                                            kubectl详解

                                                            kubectl详解

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

                                                            kubectl详解

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

                                                              kubectl详解

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

                                                              kubectl详解

                                                              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。
                                                              

                                                              kubectl详解

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

                                                              kubectl详解

                                                              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改变
                                                              

                                                              kubectl详解

                                                              3.4.6 重新查看nginx版本信息
                                                              curl -I 10.244.2.47
                                                              curl -I 10.96.131.20
                                                              curl -I 192.168.10.13:31808
                                                              #查看nginx版本信息
                                                              

                                                              kubectl详解

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

                                                                kubectl详解

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

                                                                kubectl详解

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

                                                                kubectl详解

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

                                                                kubectl详解

                                                                kubectl详解

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

                                                                kubectl详解

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

                                                                kubectl详解

                                                                3.6.2 删除service
                                                                kubectl get svc
                                                                #显示svc资源类型信息
                                                                kubectl delete svc/nginx-service
                                                                #删除svc
                                                                kubectl get svc
                                                                #显示svc资源类型信息
                                                                kubectl get all
                                                                #显示所有信息
                                                                

                                                                kubectl详解

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

                                                                  kubectl详解

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

                                                                  kubectl详解

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

                                                                  kubectl详解

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

                                                                  kubectl详解

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

                                                                    kubectl详解

                                                                    4.2.7 查看nginx版本
                                                                    kubectl get svc -owide
                                                                    #显示svc详细信息
                                                                    curl -I 192.168.10.12:32056
                                                                    #查看nginx版本
                                                                    

                                                                    kubectl详解

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

                                                                      kubectl详解

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

                                                                      kubectl详解

                                                                      kubectl详解

                                                                      二、声明式管理

                                                                      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
                                                                        

                                                                        kubectl详解

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

                                                                        kubectl详解

                                                                        3、解释资源配置清单

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

                                                                        kubectl详解

                                                                        kubectl详解

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

                                                                          kubectl详解

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

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

                                                                            kubectl edit service nginx-service
                                                                            #修改配置资源清单
                                                                            kubectl get svc
                                                                            #查看service资源
                                                                            

                                                                            kubectl详解

                                                                            kubectl详解

                                                                            5、删除资源配置清单

                                                                            5.1 陈述式删除
                                                                            kubectl delete service/nginx
                                                                            #陈述式删除
                                                                            kubectl get svc
                                                                            #查看service资源
                                                                            

                                                                            kubectl详解

                                                                            5.2 声明式删除
                                                                            kubectl delete -f nginx-svc.yaml
                                                                            #声明式删除
                                                                            kubectl get svc
                                                                            #查看service资源
                                                                            

                                                                            kubectl详解

转载请注明来自码农世界,本文标题:《kubectl详解》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,63人围观)参与讨论

还没有评论,来说两句吧...

Top