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

news2024/11/26 14:37:32

目录

陈述式资源管理方式

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)创建资源

格式:
    kubectl create [-n <命名空间>] <资源类型> <资源名称> [选项]
    或
    kubectl run <资源名称> --image=镜像 --replicas=副本数 --port=容器端口

选项:    
    --image=镜像 
    --replicas=副本数 
    --port=容器端口
例子:
//创建一个命名空间
    kubectl create ns heitui     #ns是资源类型名、heitui是资源名称,自定义
//在heitui命名空间创建一个Pod资源
    kubectl create -n heitui deployment nginx-ht --image=nginx
#deployment是Pod的资源控制器名称,nginx-ht是自定义创建的Pod名称,--image=nginx指定使用的镜像

2)查看资源

格式:
    kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]

//查看 master 节点状态
kubectl get componentstatuses
kubectl get cs

//查看命名空间
kubectl get namespace
kubectl get ns
//命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

//查看default命名空间的所有资源
kubectl get all [-n default]

格式:
    kubectl get [-n <命名空间>] <资源类型|all> [资源名称] [-o wide|yaml|json] [-w]

//查看命名空间kube-public 中的pod 信息
kubectl get pods -n heitui

//查看某个资源的详细信息
kubectl describe deployment nginx-ht -n heitui
或
kubectl describe pod nginx-ht-74cbf7dd5c -n heitui

3)删除资源

格式:
    kubectl delete [-n <命名空间>] <资源类型> <资源名称>|--all [--force --grace-period=0]
    
    --force --grace-period=0      立即终止Pod运行并强制删除资源

//删除heitui命名空间的Pod资源
    kubectl delete -n heitui deployment nginx-ht
    kubectl -n heitui pods    #查看heitui命名空间的pod
//删除heitui命名空间
    kubectl delete ns heitui
    kubectl get ns    #查看所有命名空间

4)进入Pod中的容器

格式:
    kubectl exec -it [-n <命名空间>] <Pod资源名称> [-c 容器名称] sh|bash

//进入到Pod容器中
    kubectl exec -it -n heitui nginx-ht-5dcc469667-dkxh8 bash

5)查看Pod容器的日志

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

6)扩容或缩容

格式:
    kubectl scale [-n <命名空间>] <deployment|statefulset> <资源名称> --replicas=副本数

//扩容
    kubectl scale -n heitui deployment nginx-ht --replicas=3
//缩容
    kubectl scale -n heitui deployment nginx-ht --replicas=1

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

格式:
    kubectl expose [-n <命名空间>] deployment <资源名称> --name <自定义svc资源名称> --type <svc资源类型> --port <clusterIP的端口> --targetPort <容器的端口>


svc资源类型有 ClusterIP|NodePort|LoadBalancer|ExternalName

例子:
    kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

8)更新资源

格式:
    //更改模板信息
    kubectl set image deployment <deployment资源名称> <容器名>=<镜像名>
    //更改选择器标签
    kubectl set selector service <svc资源名称> '标签key=value'

例子:
    //将nginx 版本更新为 1.15 版本
    kubectl set image deployment/nginx nginx=nginx:1.15
   
    //处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
    kubectl get pods -w

9)回滚资源

格式:
    kubectl rollout history deployment <deployment资源名称>    #查看历史版本

    kubectl rollout undo deployment <deployment资源名称> [--to-revision=N]
#不加--to-revision=N,默认回滚到前一个版本,反之指定版本回滚

    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)滚动发布

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

滚动发布有几个参数

3 desired                 #设置副本数期望值
25% max surge             #设置更新时允许创建的最大副本数/比例,向上取整
25% max unavailable       #设置更新时允许销毁的最大副本数/比例,向下取整

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保姆级教程之SABO-VMD-CNN-SVM的分类诊断,特征可视化

今天出一期基于SABO-VMD-CNN-SVM的分类诊断。 依旧是采用经典的西储大学轴承数据。基本流程如下&#xff1a; 首先是以最小包络熵为适应度函数&#xff0c;采用SABO优化VMD的两个参数。其次对每种状态的数据进行特征向量的求取&#xff0c;并为每组数据打上标签。然后将数据送入…

Qt控件按钮大全

​ 按钮 在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达到人机交互的效果。不管是嵌入式或者 PC 端,界面交互,少不了按钮。Qt 按钮部件是一种常用的部件之一,Qt 内置了六种按钮部件如下: (1) QPushButton:下压按钮 (2) QToolBu…

使用docker部署ELK日志框架-Elasticsearch

一、ELK知识了解 1-ELK组件 工作原理&#xff1a; &#xff08;1&#xff09;在所有需要收集日志的服务器上部署Logstash&#xff1b;或者先将日志进行集中化管理在日志服务器上&#xff0c;在日志服务器上部署 Logstash。 &#xff08;2&#xff09;Logstash 收集日志&#…

JJJ:python学习笔记

p4 没有编译的过程 源码和输入得到输出 静态语言&#xff1a;编译型 脚本语言&#xff1a;解释型 p5 又叫做胶水语言 p7 p8 p10

蓝眼开源云盘部署全过程(手动安装)

环境概述&#xff1a; 系统-Centos7.4 数据库-MySQL8 云盘系统-Tank4.0.1 前提&#xff1a;操作系统已完成安装&#xff0c;有外部网络。 一.安装数据库 cd到合适的目录进行下载安装操作&#xff0c;期间不要切换出去。 wget https://dev.mysql.com/get/mysql80-community-r…

Synchronized面试题

一&#xff1a;轻量锁和偏向锁的区别&#xff1a; &#xff08;1&#xff09;争夺轻量锁失败时&#xff0c;自旋尝试抢占锁 &#xff08;2&#xff09;轻量级锁每次退出同步块都需要释放锁&#xff0c;而偏向锁是在竞争发生时才释放锁&#xff0c;线程不会主动释放偏向锁 二&…

STM32 LL库 TIM3定时器多通道捕获输入采集

为什么不用HAL库&#xff0c;使用HAL库捕获输入一个通道还尚可&#xff0c;多通道捕获由于HAL的回调函数不符合我的要求&#xff0c;干脆直接切换到LL库。网上找了许多&#xff0c;代码处理写的不符合我的要求&#xff0c;这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…

电磁场与电磁波part1--矢量分析

目录 1、方向导数 2、散度定理&#xff08;高斯定理&#xff09; 3、散度与旋度的比较 4、旋度定理&#xff08;斯托克斯定理&#xff09; 5、关于点乘、叉乘、梯度、散度、旋度的计算 ~~~~~~~~~~~~~~~~~~~~~~~~ 确认过眼神&#xff0c;是我看不懂的 ~~~~~~~~~~~~~~~~…

FPGA时序分析与约束(13)——I/O接口约束

一、概述 在应用了时钟约束后&#xff0c;所有寄存器到寄存器的路径都能定时。为了获得更加精准的FPGA外部时序信息&#xff0c;设计者需要为FPGA的I/O接口指定时序信息&#xff0c;一般时序工具只能获取FPGA器件内部的时序信息&#xff0c;对于FPGA器件引脚之外的时序信息&…

【C++】-- 红黑树详解

目录 一、红黑树概念 1.概念 2.性质 二、红黑树定义 1.红黑树节点定义 &#xff08;1&#xff09;将新插入节点置为红色 &#xff08;2&#xff09;将新插入节点置为黑色 2.红黑树定义 三、红黑树插入 1.插入节点 2.控制颜色 &#xff08;1&#xff09;父亲为黑色 &#xff0…

如何使用 Github Action 管理 Issue

本文作者为 360 奇舞团前端开发工程师 Daryl 前言 很多小伙伴打开 github 上的仓库都只使用Code查看代码&#xff0c;或者只是把 github 当成一个代码仓库&#xff0c;但是 github 还提供了很多好用的功能。 其中&#xff0c;GitHub Action就是一个很好用的功能&#xff0c;本文…

EfficientNet:通过模型效率彻底改变深度学习

一、介绍 EfficientNet 是深度学习领域的里程碑&#xff0c;代表了神经网络架构方法的范式转变。EfficientNet 由 Google Research 的 Mingxing Tan 和 Quoc V. Le 开发&#xff0c;在不影响性能的情况下满足了对计算高效模型不断增长的需求。本文深入探讨了 EfficientNet 背后…

自动驾驶汽车:人工智能最具挑战性的任务

据说&#xff0c;自动驾驶汽车是汽车行业梦寐以求的状态&#xff0c;将彻底改变交通运输业。就在几年前&#xff0c;对自动驾驶汽车的炒作风靡一时&#xff0c;那么到底发生了什么呢&#xff1f;这么多公司吹嘘到2021年我们将迎来的无人驾驶汽车革命在何处&#xff1f;事实证明…

LeetCode(18)整数转罗马数字【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 12. 整数转罗马数字 1.题目 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X …

javaweb---maventomcat使用教程

文章目录 今日内容0 复习昨日1 Maven1.0 引言1.1 介绍1.2 下载1.3 安装1.3.1 解压1.3.2 配置环境变量1.3.3 测试 1.4 仓库1.5 Maven配置1.5.1 修改仓库位置1.5.2 设置镜像 2 IDEA - MAVEN2.1 idea关联maven2.2 创建java项目2.3 java项目结构2.4 pom2.5 导入依赖2.5.1 查找依赖2…

【Hello Go】Go语言基础类型

Go语言基础类型 基础类型命名变量变量声明变量初始化变量赋值匿名变量 常量字面常量常量定义iota枚举 基础数据类型分类 fmt包的标准输入输出格式说明输入类型转换类型取别名 基础类型 命名 Go语言中的命名遵循下面的几个规则 必须以字母或者是下划线开头不能使用Go语言中的…

C/C++---------------LeetCode第1394.找出数组中的幸运数

找出数组中的幸运数 题目及要求暴力算法哈希算法在main里使用 题目及要求 在整数数组中&#xff0c;如果一个整数的出现频次和它的数值大小相等&#xff0c;我们就称这个整数为「幸运数」。 给你一个整数数组 arr&#xff0c;请你从中找出并返回一个幸运数。 如果数组中存在…

过滤器模式 rust和java的实现

文章目录 过滤器模式实现 过滤器模式实现javarustjavarust rust代码仓库 过滤器模式 过滤器模式&#xff08;Filter Pattern&#xff09;或标准模式&#xff08;Criteria Pattern&#xff09;是一种设计模式&#xff0c;这种模式允许开发人员使用不同的标准来过滤一组对象&…

C++ opencv基本用法【学习笔记(九)】

这篇博客为修改过后的转载&#xff0c;因为没有转载链接&#xff0c;所以选了原创 文章目录 一、vs code 结合Cmake debug1.1 配置tasks.json1.2 配置launch.json 二、图片、视频、摄像头读取显示2.1 读取图片并显示2.2 读取视频文件并显示2.3 读取摄像头并写入文件 三、图片基…

C# 之 选择并调用文件[winform]

winform 之 选择并调用文件 在 form.cs[设计] 文件中选择一个button, 然后设置一个点击函数 将下方内容复制到函数中执行 private void push_btn_Click(object sender, EventArgs e){ // 1. 打开文件管理器选择文件OpenFileDialog openFileDialog1 new OpenFileDialog(); /…