【hcie-cloud】【23】容器编排【k8s】【Kubernetes常用工作负载、Kubernetes调度器简介、Helm简介、缩略词】【下】

文章目录

  • 单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础
  • Kubernetes常用工作负载
    • Kubernetes常用工作负载简介
    • 创建一个无状态nginx集群
    • 无状态工作负载Deployment说明
    • 无状态工作负载Deployment常见操作
    • 创建一个有状态的MySQL
    • 有状态工作负载StatefulSet说明
    • 创建一个Zabbix客户端的进程守护集
    • 创建一个普通任务
    • 创建一个周期性任务
    • 为无状态工作负载创建一个反向代理
    • Service的代理方式
    • Ingress简介
    • 为Service创建一个http访问链接
    • ConfigMap简介
    • Secret简介
    • Kubernetes的认证与授权
    • Kubernetes认证机制简介
    • 授权机制RBAC简介
  • Kubernetes调度器简介
    • Kube-scheduler调度过程
    • 将有GPU需求的Pod调度到特定Node上
    • 将无GPU需求的Pod尽量不要调度到特定Node上
    • 干预调度的机制简介
      • 污点和容忍
      • 亲和性与反亲和性
  • Helm简介
    • Helm介绍
    • Helm介绍
    • Helm基本操作
    • Chart目录结构
    • Chart.yaml文件简介
    • Values.yaml文件简介
    • Templates目录简介
    • Helm语法简介
  • 缩略语

单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础

看这篇文章
【hcie-cloud】【22】容器编排【k8s】【单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础】【上】

Kubernetes常用工作负载

Kubernetes常用工作负载简介

在这里插入图片描述

创建一个无状态nginx集群

  • 需求:创建一个nginx集群,其中包含3个nginx服务。集群中的服务随时可以进行更新、回滚、恢复等操作
    在这里插入图片描述

无状态工作负载Deployment说明

  • Deployment可通过命令行创建,也可以使用YAML文件创建

  • Deployment YAML文件包含三部分:

    • GVK
    • 元数据信息
    • 对象规格
      • 副本数
      • 标签选择器
      • 更新策略
      • Pod规格信息
  • GVK和元数据信息和Pod YAML文件格式及参数基本一致

  • Deployment的标签选择器用于根据Pod标签来判断副本数是否满足

  • Deployment支撑两种更新策略:

    • Recreate
      • 删除所有的Pod,然后重新创建
    • RollingUpdate
      • 滚动更新
        • maxSurge:滚动更新时最大更新数
        • maxUnavailable:滚动更新时不可用数
  • maxSurge:滚动更新时最大更新数,例如一共有3个Pod,maxSurge设置为1,在更新流程为:新创1个----》4个-----》删除1个----》3个-----》新创1个-----》4个-----》删除1个------》3个-----》新创1个----》4个-----》删除1个----》3个

  • maxUnavailable:滚动更新时最大不可用Pod的数量。例如一共有3个Pod,maxUnavailable设置为1,在更新流程为:删除1个----》2个-----》新创1个-----》3个—》删除-1个----》2个-----》新创1个-----》3个—》删除-1个----》2个-----》新创1个-----》3个

  • 如果maxSruge和maxUnavailable同时存在时,更新策略选取maxSurge的值

  • maxSruge和maxUnavailable的值可以使用百分比表示

无状态工作负载Deployment常见操作

-修改
- 命令“kubectl edit”修改
- 直接修改YAML文件

  • 更新
    • 命令“kubectl apply”进行更新
  • 回滚
    • 更新deployment时,使用“–record”记录版本
    • 使用命令“kubectl rollout history deployment/deployment名称”查询更新记录,添加“–revision”可查看对应版本的信息
    • 使用命令“kubectl rollout undo deployment/deployment名称 --to-revision=版本号”可将其回滚到指定版本

创建一个有状态的MySQL

  • 需求:创建一个包含3个副本的MySQL有状态工作负载

在这里插入图片描述

有状态工作负载StatefulSet说明

  • StatefulSet YAML文件包含三部分:
    • GVK
    • 元数据信息
    • 对象规格
      • 副本数
      • 标签选择器
      • 网络标识
      • Pod规格信息
  • StatefulSet有以下特点:
    • 有序创建、有序删除、有序更新
    • 支持更新,但是不支持更新策略
    • 有稳定的网络标识
    • 一般都会有由PV和PVC实现的持久化存储

创建一个Zabbix客户端的进程守护集

  • 需求:为集群中的主机安装Zabbix客户端
  • DaemonSet说明:
    • DaemonSet YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • 标签选择器
        • Pod规格信息
  • DaemonSet有以下特点:
    • 每个节点都会运行一个且只有一个Pod副本

在这里插入图片描述

创建一个普通任务

  • 需求:尝试ping 192.168.100.11,测试该地址是否能够被ping通
  • Job说明:
    • Job YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • backoffLimit:如果任务失败,重试的次数
        • activeDeadlineSeconds:任务的存活时长
  • Job有以下特点:
    • Job是一个一次性任务,可以包含一个或多个Pod
    • Job YAML文件中的restartPolicy用来规定Pod如果故障执行的策略

在这里插入图片描述

  • activeDeadlineSeconds中的时间如果到了,系统会忽略backoffLimit中的时长,即只要activeDeadlineSeconds的存活时间到了,即时backoffLimit中的次数没有到,任务也会被终止
  • restartPolicy针对的是Pod,而不是Pod中的任务

创建一个周期性任务

需求:将上页图片中的job设置为每天晚上3点周期性执行

  • Cronjob说明:
    • Cronjob YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • Schedule
        • JobTemplate
  • Cronjob有以下特点:
    • Cronjob是一个周期性任务,可以理解为周期性执行job
    • 对象规格中schedule规定了执行任务的周期

在这里插入图片描述

  • Schedule中的五个字段按照顺序分别是:分、时、日、月、周

为无状态工作负载创建一个反向代理

  • 需求:为nginx服务创建一个反向代理服务,通过该代理,可以负载均衡的访问到由多个nginx组成的集群
  • Service是一个将运行在一组 Pods上的应用程序公开为网络服务的抽象方法
  • Service是通过kube-proxy实现的
  • Service可以提供负载均衡的功能,实现方式有两种:
    • Iptables
    • Ipvs
  • Service YAML文件有三部分组成:
    • GVK信息
    • 元数据信息
    • 对象规格

在这里插入图片描述

  • 此处的nginx集群可以借助前面创建的无状态工作负载,标签为app: web,副本数为3。

Service的代理方式

  • Service提供了四种代理方式:

    • ClusterIP:为工作负载提供一个虚拟IP,该IP仅能被集群内部访问
    • NodePort:在ClusterIP的基础上为每一个node绑定一个端口,这样可以在集群外通过 nodeIP:端口号 的形式访问到该服务。可用的端口范围为30000-32767
    • LoadBalancer:用在云计算场景中,通过云计算中的ELB服务将请求转发到NodePort上
    • ExternalName:用于将外部的服务引入到集群内
  • ClusterIP会被coreDNS映射一个域名,格式为:servicename.namespace.svc.cluster.local

  • ClusterIP可以被设置为none,意味着不为该集群分配虚拟IP,因此,如果只采用这种方式访问业务的Pod,dnsPolicy需要设置为ClusterFirst

  • ClusterIP方式中的虚拟IP和NodePort总的port可以手动指定,也可以自动生成

Ingress简介

  • Service的NodePort代理方式有两个不足:
    • 管理复杂:当服务的数量较多时,所暴露端口的管理就会变的复杂
    • 影响性能:NodePort后台借助iptables进行,占用宿主机的资源
  • Ingress是一种基于Service的七层代理服务
  • Ingress有两部分组成:
    • ingressController:流量的入口
    • Ingress:用于描述流量转发规则

在这里插入图片描述

  • 要想使用ingress,必须先配置SVC,因为ingress不用于发现后端的Pod ip和Pod所监控的端口
    ingressController能够解析ingress资源对象生成相应转发规则,同时能够实时感知后端Pod的变化以更新负载均衡后端地址

为Service创建一个http访问链接

  • 需求:通过创建一个ingress对象,使用户可以通过http的方式访问到前面创建的Service nginx-proxy
  • Ingress YAML由三部分组成:
    • GVK
    • 元数据信息
      -annotations:固定为“kubernetes.io/ingress.class: “nginx””
    • 对象规格
      • host:暴露的外网域名,需要能够将其解析成ingress-controller地址
      • http:使用的协议
      • service:被代理的service信息
      • paths:访问路径,可以使用不同的路径对应不同的服务
      • pathType:路径的匹配模式
        • Prefix
        • Exact
          -ImplementationSpecific

在这里插入图片描述

  • 图片中service使用的是前面创建的service
  • pathType有三种方式:
    • Prefix:基于以 / 分隔的 URL 路径前缀匹配
    • Exact:精确匹配 URL 路径,且区分大小写
    • ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。 具体实现可以将其作为单独的 pathType 处理或者与 Prefix 或 Exact 类型作相同处理

ConfigMap简介

  • 需求:在某应用开发时,需要对接MySQL,用户名为user1,密码为Huawei@123,为了避免密码直接在YAML文件中体现而导致泄露,因此需要将该应用的YAML文件和密码相关的配置分开存放
  • ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件
  • 通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置
  • ConfigMap最为常见的使用方式就是在环境变量和Volume中引用

在这里插入图片描述

Secret简介

  • 需求:(接上页)密码以明文的方式放在configMap中,仍然存在泄露的风险,因此kubernetes提供了一种用于保存敏感信息的方式——Secret
  • Secret是一种加密存储的资源对象,可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活
  • Secret与ConfigMap非常像,都是key-value键值对形式,使用方式也相同,不同的是Secret会加密存储,所以适用于存储敏感信息。

在这里插入图片描述

Kubernetes的认证与授权

  • 需求:为某部门创建名称为“business”的命名空间,保证该命名空间中的Pod仅能被用户yftyxa使用
  • 需求中的“对命名空间Pod的使用”可以细化为具体的权限,在kubernetes中使用Role进行定义
  • 需求中的用户为被赋权者,可以看做被作用的对象,在kubernetes中使用Subject进行定义
  • 在kubernetes中,将Role的权限赋给Subject使用RoleBinding完成

在这里插入图片描述

Kubernetes认证机制简介

  • Kubernetes中的用户分为两种:
    • 普通用户(User)
      普通用户一般是指由独立于Kubernetes之外的其它服务管理的用户账号,Kubernetes中不存在表示此类用户账号的对象,作用于系统全局,名称必须全局唯一
    • 服务账户(ServiceAccount)
      服务账户为Pod中的进程调用Kubernetes API设计,通常需要绑定于特定的名称空间,作用仅局限在他们所在的Namespace,他们由API Server创建,或者通过API调用手动创建,附带着一组存储为Secret的用于访问API Server的凭据
  • Kubernetes支持多种认证方式,例如:
    • LS双向认证
    • 静态令牌文件
    • 启动引导令牌
    • 服务账号令牌
    • OpenID Connect(OIDC)令牌
    • Webhook 令牌身份认证
    • 身份认证代理

授权机制RBAC简介

  • RBAC全称Role-Based Access Control,是Kubernetes集群基于角色的访问控制,实现授权决策,允许通过Kubernetes API动态配置策略
  • RBAC中的重要概念:
    • Role:一组权限的集合,例如Role可以包含列出Pod权限及列出Deployment权限,Role用于给某个NameSpace中的资源进行鉴权
    • ClusterRole:一组权限的集合,但与Role不同的是,ClusterRole可以在包括所有NameSpace和集群级别的资源或非资源类型进行鉴权
    • Subject:被授权的对象,包括Service Account、User Account、Groups
    • RoleBinding与ClusterRoleBindin:将Subject绑定到Role或ClusterRole。RoleBinding将使规则在命名空间内生效,而ClusterRoleBinding将使规则在集群中的所有命名空间中生效

Kubernetes调度器简介

Kube-scheduler调度过程

  • 节点过滤(Predicate)
    • 用于排除不满足条件的节点
    • 人为设置的调度策略,在此阶段生效
  • 节点打分(Priority)
    • 对满足条件的节点进行打分
  • 打分完成后,调度器会将Pod调度到分数最高的节点上。如果最高分的Node有多个,调度器会将Pod调度到随机的其中一台Node上

将有GPU需求的Pod调度到特定Node上

  • 需求:某公司有图像处理业务,承载这些业务的Pod在进行计算时需要使用node节点上的GPU,因此需将Pod固定到指定的Node节点上
    • 实施说明:
    • 为node添加固定标签,例如针对以上需求可以为其添加“GPU”的标签,具体命令格式为:
      • kubectl label node 节点名称 key=value
    • 在对应的YAML文件中,添加“nodeSelector”
[root@k8s01 ~]# kubectl label node k8s02 type=GPU
node/k8s02 labeled  
[root@k8s01 yaml]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  namespace: test
……..
  nodeSelector:
    type: GPU
[root@k8s01 yaml]# kubectl describe pod nodelabel -n test
……
Events:
  Type        Reason         Age     From                   Message
  ----           ------          ----        ----                      -------
  Normal  Scheduled      17s   default-scheduler  Successfully assigned test/nodelabel to k8s02

将无GPU需求的Pod尽量不要调度到特定Node上

  • 需求:(接上页)该公司的其他非图像处理需使用非GPU Node,当此业务偶尔需求量较大时,也可将其调度到GPU节点上
  • 实施说明:
    • 为node添加污点(taint),并对该污点设置指定类型(PreferNoSchedule)例如针对以上需求可以为其添加“GPU”的污点
    • 在对应的YAML文件中,添加对污点相关的容忍度
[root@k8s01 ~]# kubectl taint nodes k8s02 type=GPU:PreferNoSchedule
node/k8s02 tainted  
[root@k8s01 yaml]# cat deploy-taint.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
……..
      tolerations:
         - key: "type"
           effect: "PreferNoSchedule“
[root@k8s01 yaml]# kubectl get pod -n test -o wide 
NAME                                    READY   STATUS    RESTARTS   AGE       IP                    NODE
nodelabel3-868b59d4b5-ghsdj    1/1      Running     0            2m8s    10.244.235.137   k8s03   nodelabel3-868b59d4b5-v5mkd   1/1     Running     0            2m8s    10.244.236.176   k8s02   nodelabel3-868b59d4b5-wjmkx   1/1     Running     0            2m8s    10.244.235.136   k8s03

干预调度的机制简介

污点和容忍

  • 干预调度有多种方式,推荐使用标签选择器及污点和容忍
  • 标签选择器
    • 即为指定的Node添加特定标签,使匹配标签的Pod可以调度到指定节点
    • 如果为Node添加了多个标签,必须全部匹配才能将Pod调度到该节点上
  • 污点和容忍
    • Taint(污点):
      • 为Node添加污点后,默认情况下,Pod不会被调度至该节点上,如果没有合适的节点,Pod会pending
      • 一个节点可以被打上多个污点标签,污点类型分为:
      • preferNoSchedule
        尽可能的不调度到该节点上
      • NoSchedule
        新创建的Pod不调度到该节点,已经运行在上面的Pod不会受影响
      • NoExecute
        完全不调度到该节点
    • Tolerations(容忍):
      • 一个Pod能都容忍节点上的污点时,表示其将该节点视为没有污点
      • 如果一个Node有多个污点,Pod需要容忍其全部后,才能和其他节点一样

亲和性与反亲和性

  • 干预调度的方式除了标签选择器及污点和容忍,还包括:

    • 亲和性与反亲和性
      • requiredDuringSchedulingIgnoredDuringExecution
        • 表示必须满足标签匹配才会将Pod调度在该节点
      • preferredDuringSchedulingIgnoredDuringExecution
        • 表示优先将Pod调度到标签匹配的节点,如果不匹配,也是可以进行调度
    • 指定节点名称
      • 调度Pod时,将Node的名称作为匹配条件
  • 亲和性和反亲和性需要配合operator进行,例如如果operator的值为In,表示亲和性,如果是NotIn,则表示反亲和性

Helm简介

Helm介绍

  • Kubernetes在部署有多个服务组成的应用时,有以下问题:
    • 无法对所涉服务进行整体管理
    • 无法对所涉服务脚本进行有效复用
    • 无法对应用进行版本管理
  • Helm是kubernetes的包管理工具,是查找、分享和使用软件构建kubernetes的最优方式
  • Helm有以下功能:
    • 从头开始创建新的chart
    • 将chart打包成归档(tgz)文件
    • 与存储chart的仓库进行交互
    • 在现有的Kubernetes集群中安装和卸载chart
    • 管理与Helm一起安装的chart的发布周期

Helm介绍

  • Helm有以下基本概念

    • Chart
      • 创建Kubernetes应用程序所必需的一组信息
    • Config
      • Config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象
    • Release
      • Release是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release
  • Helm包含以下组件:

    • Helm客户端
    • Helm库
  • Helm客户端 是终端用户的命令行客户端。负责以下内容:

    • 本地chart开发
    • 管理仓库
    • 管理发布
    • 与Helm库建立接口
      • 发送安装的chart
      • 发送升级或卸载现有发布的请求
  • Helm库 提供执行所有Helm操作的逻辑。与Kubernetes API服务交互并提供以下功能:

    • 结合chart和配置来构建版本
    • 将chart安装到Kubernetes中,并提供后续发布对象
    • 与Kubernetes交互升级和卸载chart

Helm基本操作

  • 配置repo
    • 添加helm源:helm repo add 名称 helm库链接
    • 查看helm源:helm repo list
    • 搜索chart:helm search 名称
  • 操控chart
    • 创建chart:helm create 名称
    • 安装chart:helm install 名称 release
    • 下载并解压chart: helm pull 名称
    • 推送chart:helm push 名称
    • 升级chart:help upgrade 选项
    • 回滚chart:help rollback release
    • 卸载chart: helm uninstall 名称
  • Helm v2和Helm v3有很大的区别,以上列出的为v3版本的命令

Chart目录结构

使用命令helm create用于创建一个chart,系统会自动创建固定结构的目录

[root@k8s01 mytest]# tree mytest
mytest                                            ####chart包目录名              
├── charts                                     ####应用运行的依赖存放目录
├── Chart.yaml                              ####chart定义文件,包含chart的名称版本等信息
├── templates                               ####应用模板目录
│   ├── deployment.yaml
│   ├── _helpers.tpl                        ####存放模板信息
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt                          ####存放提示信息
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests                                  ####用于测试
│       └── test-connection.yaml
└── values.yaml                            ####chart包的参数配置文件,在模板文件中会调用定义的变量

Chart.yaml文件简介

Chart.yaml 中主要是放一些概要信息,比如 chart 的名称、版本、维护者、依赖(即子 chart)

apiVersion: v1
appVersion: 5.7.30
deprecated: true
description: DEPRECATED - Fast, reliable, scalable, and easy to use open-source relational
  database system.
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 1.6.9
  • 上面内容来自http://mirror.azure.cn/kubernetes/charts/mysql/Chart.yaml
    • appVersion:chart的版本
    • Deprecated:表示当前chart已弃用
    • keywords: 关键字列表,便于检索
    • Name:chart名称
    • Source:下载列表
    • Version:release版本

Values.yaml文件简介

  • 在values.yaml文件中定义的值通过 Values 对象传递到templates下的YAML模板清单中
  • 使用{{ .Values.key }}格式来引用values.yaml中定义好的参数

在这里插入图片描述

Templates目录简介

各类Kubernetes资源的配置模板都放置在templates目录下

[root@k8s01 helm]# ll mysql/templates/
total 48
-rw-r--r-- 1 root root  292 Nov 13  2020 configurationFiles-configmap.yaml
-rw-r--r-- 1 root root 8930 Nov 13  2020 deployment.yaml
-rw-r--r-- 1 root root 1290 Nov 13  2020 _helpers.tpl
-rw-r--r-- 1 root root  295 Nov 13  2020 initializationFiles-configmap.yaml
-rw-r--r-- 1 root root 2036 Nov 13  2020 NOTES.txt
-rw-r--r-- 1 root root  868 Nov 13  2020 pvc.yaml
-rw-r--r-- 1 root root 1475 Nov 13  2020 secrets.yaml
-rw-r--r-- 1 root root  328 Nov 13  2020 serviceaccount.yaml
-rw-r--r-- 1 root root  800 Nov 13  2020 servicemonitor.yaml
-rw-r--r-- 1 root root 1231 Nov 13  2020 svc.yaml
drwxr-xr-x 2 root root   50 May  9 05:24 tests

Helm语法简介

  • helm在全局作用域中有两个重要的全局对象:
    • Values
    • release
  • Value传入chart的值有四个来源
    • chart中的values.yaml文件
    • 若这是个子chart,来自父chart的values.yaml文件
    • 执行 install 或 upgrade 时通过 -f或–values 指定
    • 执行 install 或 upgrade 时通过 --set 选项传入
  • Release代表应用发布时带有的属性:
    • {{ .Release.Name }} # release的名字
    • {{ .Release.Time }} # release部署时间
    • {{ .Release.Namespace }} # kubernetes命名空间
    • {{ .Release.Revision }} # release版本号,是递增值,每次更新都加一
    • {{ .Release.IsUpgrade }} # 若值为true则代表该release是一次更新
    • {{ .Release.IsInstall }} # 若值为true则代表该release是一次安装

缩略语

缩略语英文全称解释
APIApplication Programming Interface应用编程接口,指的是应用程序之间为了保证互相通讯所提供的一系列特殊规则和要求
K8sKubernetesKubernetes的缩写
CLICommand-line Interface命令行视图
LBLoad Balance负载均衡
AIArtificial Intelligence人工智能
OAOffice Automation办公自动化
OTTOver The Top通过互联网向用户提供各种应用服务
CSIContainer Storage Interface容器存储接口
CCECloud Container Engine华为云容器引擎
HCSHUAWEI CLOUD Stack华为云解决方案名称

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

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

相关文章

单链表实现通讯录(增删查改)

前言 之前写了很多次通讯录,一次比一次复杂,从静态到动态,再到文件操作,再到顺序表,今天要好好复习一下单链表,于是乎干脆用单链表再写一遍。 首先我们之前已经用单链表写过他的增删查改了,于…

1.28回溯(中等)

目录 1.格雷编码 2. 复原 IP 地址 3. 火柴拼正方形 1.格雷编码 n 位格雷码序列 是一个由 2n 个整数组成的序列,其中: 每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相…

备战蓝桥杯----贪心算法(二进制)

已经差不多掌握了贪心的基本思想,让我们看几道比较趣的题吧! 先来个比较有意思的题热热身: 法1.我们可以先把l,r化成二进制的形式。 然后分俩种情况: (1)若他们位数不一样并且位数高的全为1,…

在Shopee菲律宾站点进行选品时的策略

随着电子商务的快速发展,越来越多的卖家开始将目光投向了海外市场。作为东南亚地区最大的电商平台之一,Shopee菲律宾站点吸引了众多卖家的关注。然而,在这个竞争激烈的市场上,卖家需要制定一系列的策略,才能在选品中脱…

arcgis 批量删除字段

一、打开ArcToolbox-数据管理工具-字段-删除字段。 二、在输入表中选择要删除字段的要素,在删除字段栏中选择要删除的字段,点击确认即可。

git配置用户名和邮箱

1.git 1.配置用户名和邮箱 2.git初体验 git init 初始化git仓库 管理项目让git管理你的本次代码变更 git add .git commit -m “你完成的功能” 后续如果新增/修改/删除代码, 完成新功能时 重复2 3.查看日志 1.git log 4.版本回退 1.查看提交的版本记录 git l…

UE5.1_常用节点说明(经常忘记怎么用?)(常改)

UE5.1_常用节点说明(经常忘记怎么用?)(常改) 1. Gate——门节点。只有当门是Open状态才会执行Exit后面的代码。 Open开门;Close关门;Toggle开门和关门交替。 2. 关于控制ArmLength即控制相机前…

基于saltstack开发自动化开通主机防火墙策略工具

一、前言 企业安全防护策略中会要求操作系统开启防火墙,开启iptables防火墙后,对于业务网络访问意味着要经常去变更调整iptables防火墙策略。如果是管理几台服务器,手工登录操作下还能接受。但在实际大型IT架构中,可能涉及到的服…

【JavaScript基础入门】05 JavaScript基础语法(三)

JavaScript基础语法(三) 目录 JavaScript基础语法(三)数组概述数组语法多维数组 操作数组修改数组获取数组长度数组和字符串之间的转换添加和删除数组项 Null 和 Undefined字符串连接字符串字符串转换获取字符串的长度在字符串中查…

后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来统一包管理工具。 1.1 环境准备 1…

合合信息技术能力

体验中心网址: https://www.textin.com/TextIn体验中心 - 在线免费体验中心https://www.textin.com/ 合合技术团队CSDN: 合合技术团队的博客_CSDN博客-基于深度学习的文本检测与识别技术白皮书,【通用文本信息抽取技术白皮书】,【技术应用】领域博主 …

xss靶场实战

靶场链接:https://pan.baidu.com/s/1ors60QJujcmIZPf3iU3SmA?pwd4mg4 提取码:4mg4 XSS漏洞原理 XSS又叫CSS(Cross Site Script),跨站脚本攻击。因为与html中的css样式同,所以称之为XSS。在OWASP top 1…

Python Tornado 实现SSE服务端主动推送方案

一、SSE 服务端消息推送 SSE 是 Server-Sent Events 的简称, 是一种服务器端到客户端(浏览器)的单项消息推送。对应的浏览器端实现 Event Source 接口被制定为HTML5 的一部分。相比于 WebSocket,服务器端和客户端工作量都要小很多、简单很多&#xff0c…

深度强化学习(王树森)笔记05

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…

政安晨的机器学习笔记——基于Ubuntu系统的Miniconda安装Jupyter Notebook

一、准备工作 Miniconda的安装请参考我的另一篇博客文章: 实例讲解深度学习工具PyTorch在Ubuntu系统上的安装入门(基于Miniconda)(非常详细)https://blog.csdn.net/snowdenkeke/article/details/135887509 这里…

༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻

首先创建一个项目, 在这个初始界面我们需要做一些准备工作, 建基础通用文件夹, 创建一个Plane 重置后 缩放100倍 加一个颜色, 任务:使用 抽象工厂模式 创建 人物与宠物 模型, 首先资源商店下载 人物与宠物…

C++STL之map、set的使用和模拟实现

绪论​: “我这个人走得很慢,但是我从不后退。——亚伯拉罕林肯”,本章是接上一章搜索二叉树中红黑树的后续文章,若没有看过强烈建议观看,否则后面模拟实现部分很看懂其代码原理。本章主要讲了map、set是如何使用的&am…

torch与cuda\cudnn和torchvision的对应

以上图片来源于这篇博客 于是,我需要手动下载0.9.0torchvision 直接在网站https://pypi.tuna.tsinghua.edu.cn/simple/后面加上torchvision,就不用ctrlF搜torchvision了,即进入下面这个网站,找到对应版本的包下载安装即可 https…

html页面练习——公司发展流程图

1.效果图 2.html <div class"center"><header><h1>发展历程</h1><h3>CONMPANY HISTORY</h3></header><main><div class"left"><div class"time1">2012.12</div><div cla…

C/C++编码问题研究

文章目录 一、Unicode字符集与U8/U16/U32编码二、编码1. 占字节数2. ASCII、GB2312、GBK、GB18030 以及 UTF8 的关系3. BOM4. UTF-8的存储实现 三、编译器字符集设置1. GCC语法Example 2. MSVC语法Example 三、wchar_t五、编码转换函数六、代码 & 实践1. UTF8与UTF16、UTF3…