当前位置: 首页 > news >正文

创做阿里巴巴网站流程/暴疯团队seo课程

创做阿里巴巴网站流程,暴疯团队seo课程,wordpress文章多个分类,懂网络维护和网站建设的专业目录 Kubernetes介绍 Kubernetes具备的功能 Kubernetes集群角色 Master管理节点组件 Node工作节点组件 非必须的集群插件 Kubernetes集群类型 Kubernetes集群规划 集群前期环境准备 开启Bridge网桥过滤 关闭SWAP交换分区 安装Containerd软件包 K8s集群部署方式 集…

目录

Kubernetes介绍

Kubernetes具备的功能

Kubernetes集群角色

Master管理节点组件

Node工作节点组件

非必须的集群插件

Kubernetes集群类型

Kubernetes集群规划

集群前期环境准备

开启Bridge网桥过滤

关闭SWAP交换分区

安装Containerd软件包

K8s集群部署方式

集群初始化

部署集群网络Calico

验证集群节点状态

部署Nginx测试集群

部署Kuboard v3


Kubernetes介绍

kubernetes(k8s)是2014年由Google公司基于Go语言编写的一款开源的容器集群编排系统,用于自动化容器的部署、扩缩容和管理;

kubernetes(k8s)是基于Google内部的Borg系统的特征开发的一个版本,集成了Borg系统大部分优势;

官方地址:Kubernetes

代码托管平台:https://github.com/Kubernetes

Kubernetes具备的功能

  • 自我修复:k8s可以监控容器的运行状况,并在发现容器出现异常时自动重启故障实例;
  • 弹性伸缩:k8s可以根据资源的使用情况自动地调整容器的副本数。例如,在高峰时段,k8s可以自动增加容器的副本数以应对更多的流量;而在低峰时段,k8s可以减少应用的副本数,节省资源;
  • 资源限额:k8s允许指定每个容器所需的CPU和内存资源,能够更好的管理容器的资源使用量;
  • 滚动升级:k8s可以在不中断服务的情况下滚动升级应用版本,确保在整个过程中仍有足够的实例在提供服务;
  • 负载均衡:k8s可以根据应用的负载情况自动分配流量,确保各个实例之间的负载均衡,避免某些实例过载导致的性能下降;
  • 服务发现:k8s可以自动发现应用的实例,并为它们分配一个统一的访问地址。这样,用户只需要知道这个统一的地址,就可以访问到应用的任意实例,而无需关心具体的实例信息;
  • 存储管理:k8s可以自动管理应用的存储资源,为应用提供持久化的数据存储。这样,在应用实例发生变化时,用户数据仍能保持一致,确保数据的持久性;
  • 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如:密码、令牌、证书、ssh密钥等信息进行统一管理,并共享给多个容器复用;

Kubernetes集群角色

k8s集群需要建⽴在多个节点上,将多个节点组建成一个集群,然后进⾏统⼀管理,但是在k8s集群内部,这些节点⼜被划分成了两类⻆⾊:

  • 一类⻆⾊为管理节点,叫Master,负责集群的所有管理工作;
  • ⼀类⻆⾊为⼯作节点,叫Node,负责运行集群中所有用户的容器应用 ;

Master管理节点组件

  • API Server:作为集群的管理入口,处理外部和内部通信,接收用户请求并处理集群内部组件之间的通信;
  • Scheduler:作为集群资源调度计算,根据调度策略,负责将待部署的 Pods 分配到合适的 Node 节点上;
  • Controller Manager:管理集群中的各种控制器,例如 Deployment、ReplicaSet、DaemonSet等,管理集群中的各种资源;
  • etcd:作为集群的数据存储,保存集群的配置信息和状态信息;

Node工作节点组件

  • Kubelet:负责与 Master 节点通信,并根据 Master 节点的调度决策来创建、更新和删除 Pod,同时维护 Node 节点上的容器状态;
  • 容器运行时(如 Docker、containerd 等):负责运行和管理容器,提供容器生命周期管理功能。例如:创建、更新、删除容器等;
  • Kube-proxy:负责为集群内的服务实现网络代理和负载均衡,确保服务的访问性;

非必须的集群插件

  • DNS服务:严格意义上的必须插件,在k8s中,很多功能都需要用到DNS服务,例如:服务发现、负载均衡、有状态应用的访问等;
  • Dashboard: 是k8s集群的Web管理界面;
  • 资源监控:例如metrics-server监视器,用于监控集群中资源利用率;

Kubernetes集群类型

  • 一主多从集群:由一台Master管理节点和多台Node工作节点组成,生产环境下Master节点存在单点故障的风险,适合学习和测试环境使用;
  • 多主多从集群:由多台Master管理节点和多Node工作节点组成,安全性高,适合生产环境使用;

Kubernetes集群规划

给这些虚拟机操作,关闭防火墙和selinux,进行时间同步。  

主机名

IP地址

角色

操作系统

硬件配置

master01

192.168.226.21

管理节点

Rocky 9.4mini

2CPU/4G内存/50G

node01

192.168.226.22

工作节点

Rocky 9.4mini

2CPU/4G内存/50G

node02

192.168.226.23

工作节点

Rocky 9.4mini

2CPU/4G内存/50G

集群前期环境准备

按照集群规划修改每个节点主机名

# 对192.168.226.21操作
hostnamectl set-hostname master01# 对192.168.226.22操作
hostnamectl set-hostname node01# 对192.168.226.23操作
hostnamectl set-hostname node02

配置本地域名解析,配置集群之间本地解析,集群在初始化时需要能够解析主机名,三台都要配

echo "192.168.226.21 master01" >> /etc/hosts
echo "192.168.226.22 node01" >> /etc/hosts
echo "192.168.226.23 node02" >> /etc/hosts

开启Bridge网桥过滤

本步骤三台主机都执行

bridge(桥接) 是 Linux 系统中的一种虚拟网络设备,它充当一个虚拟的交换机,为集群内的容器提供网络通信功能,容器就可以通过这个 bridge 与其他容器或外部网络通信了。

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

 参数解释:

net.bridge.bridge-nf-call-ip6tables = 1 //对网桥上的IPv6数据包通过iptables处理

net.bridge.bridge-nf-call-iptables = 1 //对网桥上的IPv4数据包通过iptables处理

net.ipv4.ip_forward = 1 //开启IPv4路由转发,来实现集群中的容器与外部网络的通信

由于开启bridge功能,需要加载br_netfilter模块来允许在bridge设备上的数据包经过iptables防火墙处理

modprobe br_netfilter && lsmod | grep br_netfilter

命令解释:

modprobe //命令可以加载内核模块

br_netfilter //模块模块允许在bridge设备上的数据包经过iptables防火墙处理

加载配置文件,使上述配置生效

sysctl -p /etc/sysctl.d/k8s.conf

关闭SWAP交换分区

本步骤三台主机都执行

为了保证 kubelet 正常工作,k8s强制要求禁用,否则集群初始化失败

临时关闭

swapoff -a

 永久关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab

安装Containerd软件包

本步骤三台主机都执行

添加阿里云docker-ce仓库(containerd软件包在docker仓库)

dnf install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装containerd软件包

dnf install -y containerd.io-1.6.20-3.1.el9.x86_64

生成containerd配置文件

containerd config default | tee /etc/containerd/config.toml

启用Cgroup用于限制进程的资源使用量,如CPU、内存资源 

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml

替换文件中pause镜像的下载地址为阿里云仓库

sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml

 为Containerd配置镜像加速器,在文件中找到[plugins."io.containerd.grpc.v1.cri".registry.mirrors],在下方添加阿里云镜像加速器

vim /etc/containerd/config.toml
#...大约带153行左右[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://docker.rainbond.cc", "https://do.nark.eu.org", "https://dc.j8.work", "https://pilvpemn.mirror.aliyuncs.com", "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn"]

指定contaienrd接口文件地址,在k8s环境中,kubelet通过 containerd.sock 文件与containerd进行通信

cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF

参数解释:

runtime-endpoint //指定了容器运行时的sock文件位置

image-endpoint //指定了容器镜像使用的sock文件位置

timeout //容器运行时或容器镜像服务之间的通信超时时间

debug //指定了crictl工具的调试模式,false表示调试模式未启用,true则会在输出中包含更多的调试日志信息,有助于故障排除和问题调试

启动containerd并设置随机自启 

systemctl enable containerd --now

K8s集群部署方式

kubernetes集群有多种部署方式,目前常用的部署方式有如下两种:

  • kubeadm部署方式:kubeadm是一个快速搭建kubernetes的集群工具;
  • 二进制包部署方式:从官网下载每个组件的二进制包,依次去安装,部署麻烦;
  • 其他方式:通过一些开源的工具搭建,例如:sealos;

配置kubeadm仓库,本实验使用阿里云YUM源

cat > /etc/yum.repos.d/k8s.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装以下软件包:

  • kubeadm:用于初始化集群,并配置集群所需的组件并生成对应的安全证书和令牌;
  • kubelet:负责与 Master 节点通信,并根据 Master 节点的调度决策来创建、更新和删除 Pod,同时维护 Node 节点上的容器状态;
  • kubectl:用于管理k8集群的一个命令行工具;
yum -y install kubeadm-1.28.2 kubelet-1.28.2 kubectl-1.28.2

kubelet启用Cgroup控制组,用于限制进程的资源使用量,如CPU、内存

tee > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

设置kubelet开机自启动即可,集群初始化后自动启动

systemctl enable kubelet

集群初始化

在master01节点查看集群所需镜像文件

[root@master01 ~]# kubeadm config images list
W0813 20:45:03.587714    2189 version.go:104] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable-1.txt": Get "https://cdn.dl.k8s.io/release/stable-1.txt": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
W0813 20:45:03.587821    2189 version.go:105] falling back to the local client version: v1.28.2
registry.k8s.io/kube-apiserver:v1.28.2
registry.k8s.io/kube-controller-manager:v1.28.2
registry.k8s.io/kube-scheduler:v1.28.2
registry.k8s.io/kube-proxy:v1.28.2
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1

使用阿里云的源拉取镜像

ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.12
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.28.12
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.28.12
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1

改tag

ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.12 registry.k8s.io/kube-apiserver:v1.28.12
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.28.12 registry.k8s.io/kube-controller-manager:v1.28.12
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.28.12 registry.k8s.io/kube-scheduler:v1.28.12
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.28.12 registry.k8s.io/kube-proxy:v1.28.12
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0 registry.k8s.io/etcd:3.5.9-0
ctr image tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1

在master01节点生成初始化集群的配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

其中配置文件需要修改如下内容

[root@master01 ~]# vim kubeadm-config.yaml
#本机的IP地址
advertiseAddress: 192.168.226.21#本机名称
name: master01#集群镜像下载地址,修改为阿里云
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

并通过配置文件初始化集群

kubeadm init --config kubeadm-config.yaml --upload-certs

选项说明:

init //初始化集群

--config //通过配置文件初始化

--upload-certs //初始化过程将生成证书,并将其上传到etcd存储中,以便后续节点的加入

提示:如果哪个节点出现问题,可以使用下列命令重置当前节点 

kubeadm reset --force

根据集群初始化后的提示,执行如下命令

  mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

根据提示将node节点加入集群,加入成功后在master节点验证

这个命令复制给node01和node02执行

# 这个密钥每次不一样,这里用你的密钥,复制本条命令给你执行无效
kubeadm join 192.168.226.21:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:966e2980933706623ab15179ff564ab39fd337dfd8524f72e404c2b6885be449 

如此就是加入成功了

[root@master01 ~]# kubectl get nodes
NAME       STATUS     ROLES           AGE     VERSION
master01   NotReady   control-plane   3m47s   v1.28.2
node01     NotReady   <none>          2m30s   v1.28.2
node02     NotReady   <none>          2m27s   v1.28.2

部署集群网络Calico

Calico 和 Flannel 是两种流行的 k8s 网络插件,它们都为集群中的 Pod 提供网络功能。然而,它们在实现方式和功能上有一些重要区别:

网络模型的区别:

  • Calico 使用 BGP(边界网关协议)作为其底层网络模型。它利用 BGP 为每个 Pod 分配一个唯一的 IP 地址,并在集群内部进行路由。Calico 支持网络策略,可以对流量进行精细控制,允许或拒绝特定的通信。
  • Flannel 则采用了一个简化的覆盖网络模型。它为每个节点分配一个 IP 地址子网,然后在这些子网之间建立覆盖网络。Flannel 将 Pod 的数据包封装到一个更大的网络数据包中,并在节点之间进行转发。Flannel 更注重简单和易用性,不提供与 Calico 类似的网络策略功能。

性能的区别:

  • 由于 Calico 使用 BGP 进行路由,其性能通常优于 Flannel。Calico 可以实现直接的 Pod 到 Pod 通信,而无需在节点之间进行额外的封装和解封装操作。这使得 Calico 在大型或高度动态的集群中具有更好的性能。
  • Flannel 的覆盖网络模型会导致额外的封装和解封装开销,从而影响网络性能。对于较小的集群或对性能要求不高的场景,这可能并不是一个严重的问题。

master01节点下载Calico文件

wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml

 注意:如果无法下载,就浏览器打开该网页直接复制网页内容粘贴到master01中即可。

创建calico网络

kubectl apply -f calico.yaml 

查看Calico Pod状态是否为Running
 需要耐心等会让其一个一个启动,系统配置够的话大概几分钟即可。

[root@master01 ~]# kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-9d57d8f49-4jg5h   1/1     Running   0          4m32s
calico-node-28lg6                         1/1     Running   0          4m32s
calico-node-4cd4d                         1/1     Running   0          4m32s
calico-node-x6rsk                         1/1     Running   0          4m32s
coredns-6554b8b87f-2828d                  1/1     Running   0          6m13s
coredns-6554b8b87f-nf2jc                  1/1     Running   0          6m13s
etcd-master01                             1/1     Running   1          6m17s
kube-apiserver-master01                   1/1     Running   1          6m18s
kube-controller-manager-master01          1/1     Running   1          6m17s
kube-proxy-8wdxg                          1/1     Running   0          5m18s
kube-proxy-hhf8n                          1/1     Running   0          6m13s
kube-proxy-krz76                          1/1     Running   0          5m14s
kube-scheduler-master01                   1/1     Running   1          6m17s

验证集群节点状态

在master01节点查看集群信息

[root@master01 ~]# kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
master01   Ready    control-plane   2m47s   v1.28.2
node01     Ready    <none>          104s    v1.28.2
node02     Ready    <none>          100s    v1.28.2

部署Nginx测试集群

NodePort 服务

在master01节点部署nginx程序测试

[root@master01 ~]# vim nginx-test.yml
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.20.2ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:type: NodePortselector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80nodePort: 30002

nginx-test.yml 文件中定义的 Kubernetes 资源应用到集群中。 

kubectl apply -f nginx-test.yml

查看Pod状态是否为Running

[root@master01 ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          86s

查看Service代理信息

[root@master01 ~]# kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        16m
nginx-svc    NodePort    10.103.46.52   <none>        80:30002/TCP   115s

浏览器访问测试:http://192.168.226.21:30002/

部署Kuboard v3

新增一台虚拟机,关闭防火墙和selinux,进行时间同步。 

主机名

IP地址

角色

操作系统

硬件配置

localhost

192.168.226.24

web-ui

Rocky 9.4mini

2CPU/2G内存/20G

安装Docker并配置加速器

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start# Step 5:配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.rainbond.cc" ,"https://do.nark.eu.org","https://dc.j8.work","https://pilvpemn.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Kuboard v3官方文档:安装 Kuboard v3 - kubernetes | Kuboard

安装 Kuboard v3.x 版本的指令如下: 

sudo docker run -d \--restart=unless-stopped \--name=kuboard \-p 80:80/tcp \-p 10081:10081/tcp \-e KUBOARD_ENDPOINT="http://192.168.226.21:80" \-e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \-v /root/kuboard-data:/data \eipwork/kuboard:v3# 也可以使用镜像 swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 ,可以更快地完成镜像下载。# 请不要使用 127.0.0.1 或者 localhost 作为内网 IP \# Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server \
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                COMMAND            CREATED          STATUS          PORTS                                                                                       NAMES
e2a4e5aefa79   eipwork/kuboard:v3   "/entrypoint.sh"   14 seconds ago   Up 14 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:10081->10081/tcp, :::10081->10081/tcp, 443/tcp   kuboard

 浏览器访问:http://192.168.226.24/

默认用户名:admin    初始化密码:Kuboard123

这里有个坑,如果这个IP地址和这个部署kuboard的IP不一致的话执行命令时,需要修改为当前页面的这个IP例如我这里就需要将尾号21的改为24的IP地址

并在执行后会下载一个文件kuboard-agent.yaml  将这个文件里的IP换成你部署kuboard的IP,否则是运行不成功的。

kuboard-agent.yaml

所以我需要复制这个命令如下,然后拿到master01主机执行。

然后执行成功后,查看状态

[root@master01 ~]# kubectl get pod -n kuboard
NAME                                      READY   STATUS    RESTARTS   AGE
kuboard-agent-echq2h-2-67bcfcb6f5-r5qjc   1/1     Running   0          10s
kuboard-agent-echq2h-9cc9cf87-dvmm5       1/1     Running   0          10s

这里运行后回到kuboard的页面查看

相关文章:

Rocky系统部署k8s1.28.2单节点集群(Containerd)+Kuboard

目录 Kubernetes介绍 Kubernetes具备的功能 Kubernetes集群角色 Master管理节点组件 Node工作节点组件 非必须的集群插件 Kubernetes集群类型 Kubernetes集群规划 集群前期环境准备 开启Bridge网桥过滤 关闭SWAP交换分区 安装Containerd软件包 K8s集群部署方式 集…...

Springboot整合Flowable入门-学习笔记

目录 1、定义流程&#xff08;画图&#xff09; 2、Springboot部署流程 3、Springboot删除所有流程 4、Springboot根据 流程部署ID 查询 流程定义ID 5、Springboot启动(发起)流程 6、Springboot查询任务 6.1全部任务 6.2我的任务&#xff08;代办任务&#xff09; 7、…...

C语言常见的题目

1、 从源码到可执行文件会经历怎样的过程&#xff1f; 预编译&#xff1a;去掉空格、注释&#xff0c;处理预定义的指令&#xff0c;生成处理后的源代码文件。 编译&#xff1a;翻译成汇编代码&#xff0c;生成汇编文件。 汇编&#xff1a;翻译成机器码&#xff0c;生成一个或…...

Android13适配记录

多语言支持&#xff0c;此功能在国内被阉割 配置后在设置内可以选择 <?xml version"1.0" encoding"utf-8"?> <locale-config xmlns:android"http://schemas.android.com/apk/res/android"><locale android:name"zh" …...

Android TV上OTT PWA应用开发的播放器选择:video.js vs exoplayer

跨平台 OTT PWA 应用开发&#xff0c;最方便的当然是选用 video.js 库。但是既然是安卓平台&#xff0c;exoplayer 看起来总是最稳妥的选择 介绍 Exoplayer 是 Android media3 的一个实现&#xff0c;以前是独立出来的&#xff0c;现在已经合并到 androidx.media3 中了。 Vid…...

24.8.14 《CLR via C#》 笔记12

第十五章 枚举类型和位标志 使用枚举类型而不是硬编码的理由&#xff1a;枚举类型更易编写&#xff0c;阅读和维护&#xff1b;枚举类型是强类型枚举类型是值类型&#xff0c;不能定义任何方法&#xff0c;属性或事件&#xff0c;可利用扩展方法向枚举类型添加方法枚举类型定义…...

P2801 教主的魔法

[题目通道](教主的魔法 - 洛谷) 摘要 分块&#xff0c;是一种优雅的暴力&#xff0c;它通过对数列分段&#xff0c;完成对数列一些区间操作和区间查询的操作&#xff0c;是一种根号算法。 这篇学习笔记&题解是本萌新在学习分块过程中的一些感悟&#xff0c;希望能够帮助…...

Go 语言channel的应用场景及使用技巧

通过反映的方式执行 select 语句。这在处理有很多 case 子句,尤其是不定长 case 子句的情况时非常有用。 1. 使用反射操作 select 和 channel 使用 select 语句可以处理 chan 的 send 和 recv, send 和 recv 都可以作为 case 子句。如果需要同时处理两个 chan, 则可以写成下面…...

QLabel设置图像的方法+绘制文本换行显示

1、QLabel设置图像有两种方法 (1) void setPicture(const QPicture &); (2) void setPixmap(const QPixmap &); QPicture和QPixmap都是继承于QPaintDevice&#xff0c;它们都可以通过加载图片的方式获取&#xff1a;bool load(QIODevice *dev, const char *format …...

LVS原理及相关配置

1. 描述以及工作原理 1. 什么是 LVS linux virtural server 的简称&#xff0c;也就是 linxu 虚拟机服务器&#xff0c;这是一个 由章文嵩博士发起的开源项目&#xff0c;官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分&#xff0c;使用…...

webrtc一对一视频通话功能实现

项目效果 实现原理 关于原理我就不做说明&#xff0c;直接看图 WebRTC建立的时序图 系统用例逻辑 搭建环境 turn服务器&#xff1a;Ubuntu24.04搭建turn服务器 mkcert的安装和使用&#xff1a;配置https访问 必须使用https协议&#xff0c; 由于浏览器的安全策略导致的&am…...

通道(channel)传递数据的例子写一个

当然&#xff01;以下是一个简单的 Go 程序示例&#xff0c;展示了如何使用通道&#xff08;channel&#xff09;在两个 goroutine 之间传递数据。示例代码 go package mainimport ("fmt""time" )// 发送数据到通道的 goroutine func sendData(ch chan int…...

Vue3+Echarts+饼图环形图

记得给容器宽高 <div id"leftChartguawang" style"height: 28vh"></div> 配置函数 const leftChartguawang () > {const chartBox echarts.init(document.getElementById(leftChartguawang))let datas [[{ name: 居民节能建筑, value…...

Python while编程题目|AI悦创Python一对一教学辅导

你好&#xff0c;我是悦创。 以下是十道有创意的while循环编程题目&#xff0c;每道题目都有一定的难度&#xff0c;适合锻炼编程逻辑和思维能力。 题目1&#xff1a;旋转字符串 描述&#xff1a;给定一个字符串&#xff0c;每次循环将字符串的第一个字符移到末尾&#xff0…...

C语言 | Leetcode C语言题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue nums[pivot];int newPivot left;swap(&nums[pivot], &a…...

Docker③_VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...

【EMC专题】ESD抑制器简要介绍

在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…...

贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)

目录 标题&#xff1a;贷齐乐系统最新版SQL注入&#xff08;绕过WAF可union select跨表查询&#xff09; 内容&#xff1a; 一&#xff0c;环境部署 二&#xff0c;源码分析 三&#xff0c;sql注入 总结&#xff1a; [回到顶部]&#xff08;#article_top&#xff09; 一&am…...

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…...

基于SpringBoot+Vue框架的租车管理系统

文章目录 一、项目介绍二、项目类型三、技术栈介绍1.客户端技术栈2.服务端技术栈 四、项目创新点五、项目功能介绍1.客户端功能2.服务端功能 六、项目的主要截图页面如下展示1.客户端展示2.服务端展示 七、项目源码 一、项目介绍 ​大家好&#xff0c;我是执手天涯&#xff0c;…...

HAProxy基本配置及参数实操

目录 ​编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …...

go-zero中间件的使用

一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…...

六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程

实现通过ESP32S3连接Wi-Fi并使用Web页面控制WS2812灯珠的颜色&#xff0c;可以使用ESP32的WebServer库来创建一个简单的Web界面。通过这个界面&#xff0c;可以动态地控制灯珠的显示效果。 针对 五、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色…...

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…...

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…...

神经网络的数学原理

前言:Hello大家好,我是小哥谈。人工智能技术的发展与成功应用已经成为21世纪科技领域最大的新现象。然而,科学地理解人工智能原理已经超出了现有科学体系的范畴。显然,人工智能是人类科学技术发展的必然结果,人工智能科学也将是人类科学进步与发展必然实现的目标🌈 …...

Java设计模式-抽象工厂模式-一次性理解透

1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似&#xff0c;只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式&#xff0c;或看过上一篇我写的“java简单工厂模式”&#xff0c;您会注意到我们有一个工厂类。此工厂类根据…...

day16-测试自动化之selenium的PO模式

一、PO模式介绍 PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 一般分为六个版本&#xff0c;现在大部分企业都用的V4版本&#xff0c;三层结构…...

Springboot+freemarker大段文本内容动态修改输出,所见即所得

场景&#xff1a;给领导导出数据时&#xff0c;需要给出一个针对专业名词的解释说明&#xff0c;因此会存在有大批量的、大段的文本内容。如果直接写在代码里面&#xff0c;没啥大问题&#xff0c;但是大量的拼接替换、格式样式、后续修改维护等&#xff0c;都不是很方便。如果…...

Kali Linux网络问题解决与静态IP配置技巧

很多用户在使用 Kali Linux 时会遇到无法联网的问题&#xff0c;尤其是在 VMware 虚拟机中。这种情况相当常见&#xff0c;一般都是没有配置DNS服务器或者网卡配置文件的IP和虚拟网络编辑器的IP不一致所导致的&#xff0c;下面我们将探讨如何在 Kali Linux 中配置 DNS 服务和设…...