• k8s资源管理操作——陈述式管理方式


    目录

    陈述式资源管理方式

    1、常用的kubernetes管理命令

    1)查看版本信息

    2)查看资源对象简写

    3)查看集群信息

    4)配置kubectl自动补全

    5)node节点查看日志

    2、资源管理命令

    1)创建资源

    2)查看资源

    3)删除资源

    4)进入Pod中的容器

    5)查看Pod容器的日志

    6)扩容或缩容

    7)将资源暴露为新的Service,向外提供服务

    8)更新资源

    9)回滚资源

    3、service 的 type 类型

    4、Service与Pod如何关联的?

    5、service的端点

    6、集群内Pod资源滚动更新的方式

            1)蓝绿发布

            2)红黑发布

            3)灰度发布(金丝雀发布)

            4)滚动发布


    陈述式资源管理方式

    1、常用的kubernetes管理命令

    1)查看版本信息

    kubectl version

    2)查看资源对象简写

    kubectl api-resources

    3)查看集群信息

    kubectl cluster-info

    4)配置kubectl自动补全

    source <(kubectl completion bash)

    5)node节点查看日志

    journalctl -u kubelet -f

    2、资源管理命令

    1)创建资源

    1. 格式:
    2. kubectl create [-n <命名空间>] <资源类型> <资源名称> [选项]
    3. kubectl run <资源名称> --image=镜像 --replicas=副本数 --port=容器端口
    4. 选项:
    5. --image=镜像
    6. --replicas=副本数
    7. --port=容器端口
    8. 例子:
    9. //创建一个命名空间
    10. kubectl create ns heitui #ns是资源类型名、heitui是资源名称,自定义
    11. //在heitui命名空间创建一个Pod资源
    12. kubectl create -n heitui deployment nginx-ht --image=nginx
    13. #deployment是Pod的资源控制器名称,nginx-ht是自定义创建的Pod名称,--image=nginx指定使用的镜像

    2)查看资源

    1. 格式:
    2. kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]
    3. //查看 master 节点状态
    4. kubectl get componentstatuses
    5. kubectl get cs
    6. //查看命名空间
    7. kubectl get namespace
    8. kubectl get ns
    9. //命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的
    10. //查看default命名空间的所有资源
    11. kubectl get all [-n default]

    1. 格式:
    2. kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]
    3. //查看命名空间kube-public 中的pod 信息
    4. kubectl get pods -n heitui
    5. //查看某个资源的详细信息
    6. kubectl describe deployment nginx-ht -n heitui
    7. kubectl describe pod nginx-ht-74cbf7dd5c -n heitui

    3)删除资源

    1. 格式:
    2. kubectl delete [-n <命名空间>] <资源类型> <资源名称>|--all [--force --grace-period=0]
    3. --force --grace-period=0 立即终止Pod运行并强制删除资源
    4. //删除heitui命名空间的Pod资源
    5. kubectl delete -n heitui deployment nginx-ht
    6. kubectl -n heitui pods #查看heitui命名空间的pod
    7. //删除heitui命名空间
    8. kubectl delete ns heitui
    9. kubectl get ns #查看所有命名空间

    4)进入Pod中的容器

    1. 格式:
    2. kubectl exec -it [-n <命名空间>] <Pod资源名称> [-c 容器名称] sh|bash
    3. //进入到Pod容器中
    4. kubectl exec -it -n heitui nginx-ht-5dcc469667-dkxh8 bash

    5)查看Pod容器的日志

    1. 格式:
    2. kubectl logs [-n <命名空间>] <Pod资源名称> [-c 容器名称] [-f] [-p]
    3. -f:实时查看日志
    4. -p:查看Pod容器重启前的日志
    5. //查看Pod容器的日志
    6. kubectl logs -n heitui nginx-ht-5dcc469667-dkxh8

    6)扩容或缩容

    1. 格式:
    2. kubectl scale [-n <命名空间>] <deployment|statefulset> <资源名称> --replicas=副本数
    3. //扩容
    4. kubectl scale -n heitui deployment nginx-ht --replicas=3
    5. //缩容
    6. kubectl scale -n heitui deployment nginx-ht --replicas=1

    7)将资源暴露为新的Service,向外提供服务

    1. 格式:
    2. kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type <svc资源类型> --port <clusterIP的端口> --targetPort <容器的端口>
    3. svc资源类型有 ClusterIP|NodePort|LoadBalancer|ExternalName
    4. 例子:
    5. kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

    8)更新资源

    1. 格式:
    2. //更改模板信息
    3. kubectl set image deployment <deployment资源名称> <容器名>=<镜像名>
    4. //更改选择器标签
    5. kubectl set selector service <svc资源名称> '标签key=value'
    6. 例子:
    7. //将nginx 版本更新为 1.15 版本
    8. kubectl set image deployment/nginx nginx=nginx:1.15
    9. //处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
    10. kubectl get pods -w

    9)回滚资源

    1. 格式:
    2. kubectl rollout history deployment <deployment资源名称> #查看历史版本
    3. kubectl rollout undo deployment <deployment资源名称> [--to-revision=N]
    4. #不加--to-revision=N,默认回滚到前一个版本,反之指定版本回滚
    5. kubectl rollout status deployment <deployment资源名称> #查看回滚的状态

    Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求

    3、service 的 type 类型

    1)ClusterIP

            提供一个集群内部的虚拟IP以供Pod访问(Service默认类型)

    2)NodePort

            在每个node上打开一个端口以供外部访问,且每个node端口都是一样的,集群外部的程序通过NodeIP:Nodeport的方式访问集群内的Service,每个端口只能是一种服务,端口范围只能是30000~32767。

    3)LoadBalancer

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

    4)ExternalName

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

    4、Service与Pod如何关联的?

    Service 通过 标签选择器(Label Selector) 绑定Pod的标签来关联Pod的端点。

    对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式 去 访问 Service,再由 Service 重定向到相应的 Pod。

    5、service的端点

            1)port

    service的clusterIP使用的端口

            2)nodePort

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

            3)targetPort

    service将发送给port或nodePort的请求转发给Pod的容器端口,需与containerPort一致

            4)containerPort

    创建Pod时所指定的容器端口

    最后K8s集群内部的客户端可以通过访问  http://clusterIP:port ----------->podIP:containerPort(Pod容器提供的服务)

    K8s集群外部的客户端可以通过访问  http://nodeIP:nodePort------->podIP:containerPort(Pod容器提供的服务)

    6、集群内Pod资源滚动更新的方式

            Pod资源滚动更新的方式有:蓝绿发布、红黑发布、灰度发布(金丝雀发布)、滚动发布

            1)蓝绿发布

    定义:以最小的停机时间做服务升级的策略

            需要维护的两个版本的环境分别为“蓝环境”和“绿环境”,简单说就是,“绿环境”就是目前正在使用的,能够正常使用的环境,而“蓝环境”就是需要更新到的版本使用的环境。

            发布流程:

    首先将一半的服务流量从负载均衡列表中移除,并且更新服务版本,验证新版本没有问题后,将生产环境指向蓝环境,然后对于老版本的绿环境进行版本升级,最后将所有流量加回负载均衡。

    如下图升级过程:

    两套环境交替升级,旧版本会保留一定时间后在做升级,便于回滚

    优点:

    • 升级过程无需停机,用户感知小
    • 升级/回滚速度快。

    缺点:

    • 资源成本高

            2)红黑发布

    定义:与蓝绿发布类似,红黑发布也是通过两套环境完成软件版本的升级,将当前环境称为红环境,新版本环境为黑环境。

    发布流程:

    首先需要申请新资源用于部署黑环境,在黑环境部署新版本的服务,黑环境部署完成后,一次性将生产流量指向黑环境,最后释放红环境的资源。

    发布流程图如下:

            3)灰度发布(金丝雀发布)

    定义:灰度发布属于增量发布,新老版本同时为用户提供服务,主要目的是保证系统的可用性

    发布流程:

    在现有的环境中对一定比例的服务进行升级,升级到新版本后,结合旧版本的其他服务一同提供服务,在新版本的的服务不出现错误时,再升级一定比例服务,以此类推,知道所有服务都升级完成。

    发布流程图如下:

    特点:

    • 用户体验影响小,灰度发布过程出现问题影响范围较小
    • 新版本功能逐步发布,可以逐步评估新版服务性能、稳定性和健康状态
    • 发布自动化程度不够,发布期间可能引发服务中断

            4)滚动发布

    滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部升级成新版本。

    滚动发布有几个参数

    1. 3 desired #设置副本数期望值
    2. 25% max surge #设置更新时允许创建的最大副本数/比例,向上取整
    3. 25% max unavailable #设置更新时允许销毁的最大副本数/比例,向下取整
  • 相关阅读:
    C++ std::string 删除指定字符
    我为什么选择这样一份经常出差的工作
    17-ROS tf包介绍
    109. 有序链表转换二叉搜索树 ●●
    Bug:elementUI样式不起作用、Vue引入组件报错not found等(Vue+ElementUI问题汇总)
    一篇学通Axios
    微信小程序实现文章内容详情
    CSS3 媒体查询
    跟我学企业级flutter项目:简化框架demo参考
    Stable Diffusion系列(二):ControlNet基础控件介绍
  • 原文地址:https://blog.csdn.net/x74188/article/details/134361439