• [云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)


    1. K8s管理资源的方法类别

    1.1 陈述式资源管理方式

    主要依赖命令行工具kubectl进行管理
    可理解为使用一条命令和参数选项来实现资源的管理操作

    1.2 声明式资源管理方式

    主要依赖统一资源配置清单进行管理
    可以理解为使用yaml配置文件的定义来实现资源的管理操作

    1.3 GUI式资源管理方法

    主要依赖图形化操作界面进行管理

    2. 陈述式资源管理方式

    k8s中文文档:http://docs.kubernetes.org.cn/683.html
    
    • 1

    2.1 命令行工具 ---- Kubelet

    2.1.1 简介

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

    2.1.2 特性

    • 优点
      1.可以满足90%以上的使用场景
      2.对资源的增、删、查操作比较容易

    • 缺点
      1.命令冗长,复杂,难以记忆
      2.特定场景下,无法实现管理需求
      3.对资源的修改麻烦,需要patch来使用json串更改。

    2.1.3 kubelet拓展命令

    #kubectl 的命令大全
    kubectl --help
            -h 
    
    • 1
    • 2
    • 3
    #查看k8s版本信息
    kubectl version
    
    • 1
    • 2

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    #node节点查看日志
    journalctl -u kubectl -f
    
    • 1
    • 2

    在这里插入图片描述

    2.1.4 kubectl基本语法

    kubectl [command] [Type] [NAME] [flags]
    
    • 1
    command:	子命令	用于操作kubernetes集群资源对象的命令	
    TYPE:	资源对象的类型	区分大小写,能以单数,复数或者简写形式表示	
    NAME:	资源对象的名称	区分大小写,如果不指定名称,系统则将返回属于TYPE的全部对象的列表	
    flags:	子命令的可选参数	
    
    • 1
    • 2
    • 3
    • 4

    2.1.5 Kubectl工具的自动补全

    #二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证)
    #可以使用以下方式开启命令自动补全
    vim /etc/bashrc
    
    source <(kubectl completion bash)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述在这里插入图片描述

    2.2 k8s Service 的类型

    2.2.1 NodePort

    在这里插入图片描述
    Service的端口号映射到每个Node的一个端口号上,这样集群中的任意Node都可以作为Service的访问入口地址,即NodeIP:NodePort
    每个端口只能是一种服务,端口范围只能是 30000-32767

    2.2.2 ClusterIP

    默认值,它是Kubernetes系统自动分配的虚拟IP(Cluster IP:Port),只能在集群内部访问

    2.2.3 LoadBalancer

    在这里插入图片描述
    LoadBalancerNodePort很相似,目的都是向外部暴露一个端口,区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部环境支持的,外部服务发送到这个设备上的请求,会被设备负载之后转发到集群中

    2.2.4 ExternalName

    在这里插入图片描述
    ExternalName类型的服务用于将集群外的服务定义为Kubernetes的集群的Service,并且通过externalName字段指定外部服务的地址,可以使用域名或IP格式,集群内的客户端应用通过访问这个Service就能访问外部服务了。

    2.3 k8s Service 的端点类型

    在这里插入图片描述
    Service是通过标签选择器绑定Pod的标签来关联Pod的端点(Endpoint)。

    2.3.1 Port

    Service 的ClusterIP 使用的端口

    2.3.2 NodePort

    在NodePort类型的service定义的端口,在每个node节点上开启的端口,即 nodeIP 使用的端口,默认范围为30000~32767

    2.3.3 TargetPort

    使用云负载设备和service做映射,外部用户通过云负载设备即可将请求转发到node节点,再通过nodeIP:nodePort访问service并转发给其关联的Pod。

    2.3.4 ContainerPort

    相当于给一个外部地址做别名,集群内的Pod可以通过这个service访问相关的外部服务。8875

    K8S集群内部的客户端可以通过  http://clusterIP:port  -->  podIP:containerPort
    
    K8S集群外部的客户端可以通过  http://nodeIP:nodePort -->  podIP:containerPort
    
    • 1
    • 2
    • 3

    3. 陈述式资源管理方式的基础命令

    3.1 创建

    run为一次性的创建运行,删除后不会自动生成,没有pod控制器。

    create创建的,删除后还会自动生成,有pod控制器,拥有副本集控制。

    3.1.1 创建命名空间

    kubectl create ns <name>
    
    • 1
    #示例
    kubectl create ns scj
    
    • 1
    • 2

    在这里插入图片描述

    3.1.2 create子命令

    kubectl create [-n <命名空间>] <资源类型> <资源名称> [选项]
                                                     --image=镜像 
                                                     --replicas=副本数 
                                                     --port=容器端口
    
    • 1
    • 2
    • 3
    • 4
    #示例
    kubectl create service <service-name> --tcp=<port>:<target-port>
    
    kubectl create pod <pod-name> --image=<container-image>
    
    kubectl create deployment <deployment-name> --image=<container-image>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.1.3 run子命令

    #创建并运行
    kubectl run <资源名称> --image=镜像 --replicas=副本数 --port=容器端口
    
    • 1
    • 2

    3.2 get ---- 查看基本信息

    #基本格式
    kubectl get <resource> [-o wide|json|yaml] [-n namespace]
    
    • 1
    • 2
    获取资源的相关信息,-n指定命令空间,-o指定输出格式
    resource可以是具体资源名称,如pod nginx- xxx;也可以是资源类型,如pod; 或者all (仅展示几种核心资源,并不完整)
    
    --all-namespaces 或-A :表示显示所有命令空间,
    --show-labels :显示所有标签
    -l x:仅显示标签为x的资源
    -l x=y:仅显示包含x标签,且值为y的资源
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.2.1 Kubernetes 集群组件的状态

    kubectl get componentstatuses 
    kubectl get cs #简写
    
    • 1
    • 2

    在这里插入图片描述

    get pods --show-labels
    #查看有哪些标签,面试常问
    
    • 1
    • 2

    3.2.2 命名空间

    命名空间在 Kubernetes 中主要用于隔离和管理资源名称。

    每个命名空间具有自己的资源名称空间,保证了资源名称的唯一性。

    #获取当前集群中所有命名空间的列表
    
    kubectl get namespace 
    kubectl get ns #简写
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #获取命名空间中的所有资源的列表
    
    kubectl get all [-n namespace]
    #不指定命名空间,则默认查看default命名空间
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3.2.3 Service(服务)

    kubectl get service
    kubectl get svc 
    
    • 1
    • 2

    在这里插入图片描述

    3.2.4 pod信息

    kubectl get pods [-n namespace] [-o wide|json|yaml]
    
    • 1
    kubectl get pods --all-namespaces -o wide
    
    • 1

    在这里插入图片描述

    3.2.5 Node(节点)列表

    kubectl get nodes
    
    • 1

    在这里插入图片描述

    3.3 describe ---- 查看资源详细信息

    #基本格式
    kubectl describe [-n <命名空间>] <资源类型> <资源名称>
    
    • 1
    • 2
    #示例
    #先根据kubectl get pods -A,找到要查看的资源
    kubectl describe pod etcd-master01 -n kube-system
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3.4 logs ---- 查看日志

    kubectl logs [-n <命名空间>] <Pod资源名称> [-c 容器名称] [-f] [-p]
    #查看Pod容器的日志
    
    • 1
    • 2
    选项对象功能
    -n命名空间用于指定 Pod 所属的命名空间,如果不指定命名空间,将默认使用默认命名空间
    -c容器名称,可选的容器参数用于指定要获取日志的容器名称,如果 Pod 中只有一个容器,可以省略此参数
    -f可选的跟踪参数用于告诉命令持续输出日志
    -p可选的先前参数用于获取已经终止的 Pod 的先前日志如果 Pod 重新创建或重新调度,该参数可以用来获取先前的日志
    #举个例子
    kubectl logs -n kube-system  kube-proxy-ggw6p
    
    • 1
    • 2

    在这里插入图片描述

    3.5 delete ---- 删除指定的资源

    Pod没有重启的概念,重启的是容器 被自动删除和重新创建

    #删除命名空间app
    kubectl delete [-n <命名空间>] <资源类型> <资源名称>|--all [--force --grace-period=0]
    
    • 1
    • 2
    #示例
    kubectl delete pod nginx-764b95f4c5-7t65m 
    
    • 1
    • 2

    在这里插入图片描述

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

    3.6 exec ---- 跨主机登录容器

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

    kubectl exec -it [-n <命名空间>] <Pod资源名称> [-c 容器名称] sh|bash
    
    • 1
    #示例
    kubectl exec -it  nginx-764b95f4c5-hsj59 sh
    
    • 1
    • 2

    在这里插入图片描述

    3.7 scale ---- replicas(副本数)

    用于调整 Kubernetes 集群中 Deployment 或 StatefulSet 对象的副本数量

    kubectl scale [-n <命名空间>] <deployment|statefulset> <资源名称> --replicas=副本数
    
    • 1
    #增加副本数(扩容)
    kubectl scale deployment nginx --replicas=6
    
    • 1
    • 2

    在这里插入图片描述

    #减少副本数(缩容)
    kubectl scale deployment nginx --replicas=1
    
    • 1
    • 2

    在这里插入图片描述

    kubectl scale deployment nginx --replicas=0
    #reolicas=0等于清空
    
    • 1
    • 2

    4. 项目的生命周期

    创建–>发布–>更新–>回滚–>删除

    4.1 创建-----kubectl create命令

    创建并运行一个或多个容器镜像。

    创建一个deploymentjob 来管理容器。

    kubectl create --help
    kubectl create service <svc资源类型> <svc资源名称> --tcp=<clusterIP的端口:容器的端口>
    
    • 1
    • 2
    #举个例子 
    #启动 nginx 实例,暴露容器端口 80,设置副本数 3
    kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
    
    kubectl get pods
    kubectl get all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    4.2 发布-----kubectl expose命令

    将资源暴露为新的 Service。

    kubectl expose --help
    
    • 1
    kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type <svc资源类型> --port <clusterIP的端口> --targetPort <容器的端口>
                         ClusterIP|NodePort|LoadBalancer|ExternalName
    
    • 1
    • 2
    #示例
    #为deployment的nginx创建service,
    #并通过Service的80端口转发至容器的80端口上
    #Service的名称为nginx-service,类型为NodePort
    kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    #查看pod网络状态详细信息和 Service暴露的端口
    kubectl get pods,svc -o wide
    
    
    #查看关联后端的节点
    kubectl get endpoints
    
    #查看 service 的描述信息
    kubectl describe svc nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    curl 10.244.3.3:80
    curl 10.244.3.4:80
    curl 10.244.4.3:80
    
    curl 192.168.67.100:30724
    
    #在master01操作 查看访问日志
    kubectl logs nginx-d9d8cf5c7-6zpc2
    kubectl logs nginx-d9d8cf5c7-85rvh 
    kubectl logs nginx-d9d8cf5c7-nffcz 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    4.3 更新 ----- kubectl set命令

    更改现有service的一些信息

    kubectl set --help
    
    • 1
    #更新 Kubernetes 集群中某个 Deployment 的容器镜像
    kubectl set image deployment <deployment资源名称> <容器名>=<镜像名>
    #更改 Kubernetes 中服务对象的标签选择器
    kubectl set selector service <svc资源名称> '标签key=value'
    
    • 1
    • 2
    • 3
    • 4
    #示例
    
    #查看当前 nginx 的版本号
    curl -I http://192.168.67.100:30724
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #将nginx 版本更新为 1.15 版本
    kubectl set image deployment/nginx nginx=nginx:1.15
    
    kubectl get pods,svc -o wide
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #再次查看nginx版本号
    curl -I 192.168.67.100:31134
    
    • 1
    • 2

    在这里插入图片描述

    4.4 回滚 ----- kubectl rollout 命令

    #查看指定 deployment 资源的历史记录,包括版本号、更新时间和事件
    kubectl rollout history deployment <deployment资源名称>
    
    #回滚
    kubectl rollout undo deployment <deployment资源名称> [--to-revision=N]
                                                          指定版本回滚
    
    #状态
    kubectl rollout status deployment <deployment资源名称>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    #示例
    #查看历史版本
    kubectl rollout history deployment/nginx 
    
    #执行回滚到上一个版本
    kubectl rollout undo deployment/nginx
    
    #检查回滚状态
    kubectl rollout status deployment/nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    #执行回滚到指定版本
    kubectl rollout undo deployment/nginx --to-revision=1
    
    • 1
    • 2
  • 相关阅读:
    Excel 文件比较工具 xlCompare 11.01 Crack
    利用yolov5进行目标检测,并将检测到的目标裁剪出来
    matlab如何从信号中去除60 Hz Hum电源线噪声
    来自从事Java十年的老架构师给大家的一些经验,Java工程师必看
    Oracle中的Rollup 使用方法
    Apache Kafka与Spring整合应用详解
    微原笔记基础
    STL常用容器——String容器的使用
    业务用例元模型-软件方法(下)第9章分析类图案例篇Part08
    Linuxzhi6通过源代码编译安装软件
  • 原文地址:https://blog.csdn.net/m0_74170357/article/details/134422495