RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

先决条件#

  • Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客
  • CLI 工具
  • Ingress Controller(仅适用于托管 Kubernetes)

创建集群k8s

[root@nginx locale]# cat rancher-cluster.yml
nodes:- address: 192.168.1.65internal_address: 192.168.1.65user: wuborole: [controlplane, worker, etcd]ssh_key_path: /home/wubo/.ssh/id_rsaport: 22services:etcd:extra_args:auto-compaction-retention: 240 #(单位小时)quota-backend-bytes: '6442450944'backup_config:enabled: true         # 设置true启用ETCD自动备份,设置false禁用;interval_hours: 12    # 快照创建间隔时间,不加此参数,默认5分钟;retention: 6          # etcd备份保留份数;snapshot: truecreation: 6hretention: 24hingress:provider: nginx
#  options:
#    use-forwarded-headers: "true"
#  #hostnetwork: truecluster_name: local
ignore_docker_version: true
prefix_path: /opt/rke
#kubernetes_version: v1.13.5-rancher1-2 #rke 0.2.2 https://github.com/rancher/rke/releases/tag/v1.1.0
#kubernetes_version: v1.17.4-rancher1-3 #rke 1.1.0
kubernetes_version: v1.20.10-rancher1-1 #rke 1.2.12network:plugin: calicomtu: 0options:flannel_backend_type: vxlanprivate_registries:- url: harbor.jettech.comuser: adminpassword: Harbor12345is_default: true
[root@nginx locale]# rke up --config rancher-cluster.yml

1. 为 Rancher 创建 Namespace

[root@nginx ~]# kubectl create namespace cattle-syste
namespace/cattle-syste created
[root@nginx ~]# kubectl get ns
NAME              STATUS   AGE
cattle-syste      Active   2s
default           Active   4m1s
ingress-nginx     Active   3m4s
kube-node-lease   Active   4m3s
kube-public       Active   4m3s
kube-system       Active   4m3s

2 选择你的 SSL 选项#

Rancher Server 默认需要 SSL/TLS 配置来保证访问的安全性

提示

如果你想在外部终止 SSL/TLS,请参考:RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客。

你可以从以下三种证书来源中选择一种,证书将用来在 Rancher Server 中终止 TLS:

  • Rancher 生成的 TLS 证书: 在这种情况下,你需要在集群中安装 cert-manager。 Rancher 利用 cert-manager 签发并维护证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。然后 cert-manager 负责管理该证书。
  • Let's Encrypt: Let's Encrypt 选项也需要使用 cert-manager。但是,在这种情况下,cert-manager 与 Let's Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let's Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有可以从公网访问的公共 DNS 记录。
  • 使用你已有的证书: 此选项使你可以使用自己的权威 CA 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为tls.crttls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
设置Chart 选项描述是否需要 cert-manager
Rancher 生成的证书(默认)ingress.tls.source=rancher使用 Rancher 生成的 CA 签发的自签名证书此项为默认选项
Let’s Encryptingress.tls.source=letsEncrypt使用Let's Encrypt颁发的证书
你已有的证书ingress.tls.source=secret使用你的自己的证书(Kubernetes 密文)
重要

Rancher 中国技术支持团队建议你使用“你已有的证书” ingress.tls.source=secret 这种方式,从而减少对 cert-manager 的运维成本。

3 根据你选择的 SSL 选项,通过 Helm 安装 Rancher

注意: 可以使用 CSDN来快速生成符合 rancher 要求的自签名证书

在此选项中,将使用你自己的证书来创建 Kubernetes secret,以供 Rancher 使用。

运行这个命令时,hostname 选项必须与服务器证书中的 Common Name 或 Subject Alternative Names 条目匹配,否则 Ingress controller 将无法正确配置。

尽管技术上仅需要Subject Alternative Names中有一个条目,但是拥有一个匹配的 Common Name 可以最大程度的提高与旧版浏览器/应用程序的兼容性。

3.1 如何查看服务器证书的Common Name 和 Subject Alternative Names 技术问题 | Rancher文档

如何检查我的证书链是有效的

[root@nginx ok]# openssl verify -CAfile cacerts.pem jetto.jettech.com.crt
jetto.jettech.com.crt: OK

上述命令执行后,如何您收到unable to get local issuer certificate的错误,则证书链是不完整的。这通常意味着您的服务器证书中含有中间 CA 证书。如果您拥有该中间证书,可以采用下述的方法验证。 

[root@nginx ok]# openssl verify -CAfile cacerts.pem -untrusted intermediate.pem jetto.jettech.com.crt

如何您仍然遇到验证验证错误,您可以通过以下命令获取服务器证书的颁布者和主题 

[root@nginx ok]# openssl x509 -noout -subject -issuer -in jetto.jettech.com.crt 
subject= /C=CN/CN=jetto.jettech.com
issuer= /C=CN/CN=localhost

查看Common Name

[root@nginx ok]# openssl x509 -noout -subject -in  tls.crt
subject= /C=CN/CN=jetto.jettech.com

查看Subject Alternative Names

[root@nginx ok]# openssl x509 -noout -in tls.crt -text | grep DNSDNS:jetto.jettech.com, DNS:jetto.jettech.com, IP Address:172.16.10.21, IP Address:192.168.1.65, IP Address:172.16.10.59, IP Address:172.16.10.33

技术问题 | Rancher文档

  • 如上所述,为你的证书设置适当的hostname
  • replicas设置为 Rancher 部署所使用的复制数量。默认为 3;如果你的集群中少于 3 个节点,你应填写实际节点数量。
  • 设置ingress.tls.sourcesecret
  • 要安装一个特定的 Rancher 版本,使用--version 标志,例如:--version 2.5.8
  • 如果你安装的是 alpha 版本,Helm 要求在命令中加入--devel选项。
3.2 添加 TLS Secret(千万不要遗漏该步):现在已经部署了 Rancher,还需参考添加 TLS Secret发布证书文件,以便 Rancher 和 ingress 控制器可以使用它们

 注意: 可以使用 一键生成 ssl 自签名证书脚本 来快速生成符合 rancher 要求的自签名证书。该脚本会自动生成本文中所需要的 tls.crttls.key 和 cacerts.pem

只有当我们在 cattle-system 命名空间,将自签名证书和对应密钥配置到 tls-rancher-ingress 的密文中,Kubernetes 才会为 Rancher 创建所有的对象和服务。

将服务器证书和任何所需的中间证书合并到名为 tls.crt 的文件中,将您的证书密钥拷贝到名称为 tls.key 的文件中。

 例如,acme.sh在fullchain.cer文件中提供了服务器证书和中间证书。在这种情况下,您应该将fullchain.cer文件重命名为tls.crt,将证书秘钥文件重命名为tls.key 。

使用 kubectl 创建 tls 类型的密文。

[root@nginx ok]# ls
cacerts.pem  cakey.pem                   jetto.jettech.com.crt  jetto.jettech.com.key  tls.crt
cacerts.srl  create_self-signed-cert.sh  jetto.jettech.com.csr  openssl.cnf            tls.key
[root@nginx ok]# kubectl -n cattle-system create secret tls tls-rancher-ingres --cert=tls.crt --key=tls.key
secret/tls-rancher-ingres created
[root@nginx ok]# kubectl -n cattle-system get secret 
NAME                  TYPE                                  DATA   AGE
default-token-9wc8v   kubernetes.io/service-account-token   3      22s
tls-rancher-ingres    kubernetes.io/tls                     2      13s
[root@nginx ok]# kubectl -n cattle-system describe secret  tls-rancher-ingres
Name:         tls-rancher-ingres
Namespace:    cattle-system
Labels:       <none>
Annotations:  <none>Type:  kubernetes.io/tlsData
====
tls.crt:  2343 bytes
tls.key:  1675 bytes[root@nginx ok]# kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=tls.crt --key=tls.key
secret/tls-rancher-ingress created

RKE部署Rancher v2.5.8 HA高可用集群 以及常见错误解决_rkecontrolplane was already initialized but no etc-CSDN博客 

提示: 如果您想要更换证书,您可以使用 kubectl -n cattle-system delete secret tls-rancher-ingress 来删除 tls-rancher-ingress 密文,之后使用上面的命令创建一个新的密文。如果您使用的是私有 CA 签发的证书,仅当新证书与当前证书是由同一个 CA 签发的,才可以替换。

3.3 使用私有 CA 签发证书

如果您使用的是私有 CA,Rancher 需要您提供 CA 证书的副本,用来校验 Rancher Agent 与 Server 的连接。

拷贝 CA 证书到名为 cacerts.pem 的文件,使用 kubectl 命令在 cattle-system 命名空间中创建名为 tls-ca 的密文。

[root@nginx ok]# kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem
secret/tls-ca created

注意: Rancher 在启动时检索tls-ca密文。如果您的 Rancher Server 正在运行中,您需要重新启动 Rancher Server Pod 才能使新的 CA 生效。

 4 helm安装rancher集群

[root@nginx ok]# helm install  rancher rancher-stable/rancher --namespace cattle-system --set hostname=jetto.jettech.com --set bootstrapPassword=123456aA --set rancherImage=harbor.jettech.com/rancher/rancher --set rancherImageTag=v2.5.8 --set ingress.tls.source=secret  --set replicas=3 --set privateCA=true --set systemDefaultRegistry=harbor.jettech.com --set useBundledSystemChart=true

如果您使用的是由私有 CA 签名的证书,则在 --set ingress.tls.source=secret 之后添加 --set privateCA=true

查看: 

[root@nginx ~]# kubectl create namespace cattle-system
namespace/cattle-system created
[root@nginx ~]# kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment spec update to be observed...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 2 of 3 updated replicas are available...
deployment "rancher" successfully rolled out[root@nginx ok]# kubectl  get all -A
NAMESPACE                 NAME                                          READY   STATUS      RESTARTS   AGE
cattle-system             pod/helm-operation-5lqb9                      0/2     Completed   0          28s
cattle-system             pod/helm-operation-9rqd2                      0/2     Completed   0          47s
cattle-system             pod/helm-operation-jm52w                      0/2     Completed   0          35s
cattle-system             pod/helm-operation-rqcnc                      0/2     Completed   0          21s
cattle-system             pod/helm-operation-z52w5                      0/2     Completed   0          41s
cattle-system             pod/helm-operation-zvbjs                      0/2     Completed   0          61s
cattle-system             pod/rancher-65f6b5bbf6-bm2j2                  1/1     Running     0          107s
cattle-system             pod/rancher-65f6b5bbf6-bstsh                  1/1     Running     0          107s
cattle-system             pod/rancher-65f6b5bbf6-rh4bk                  1/1     Running     0          107s
cattle-system             pod/rancher-webhook-85f777cb65-275wx          1/1     Running     0          25s
fleet-system              pod/fleet-agent-7cc65df565-hctpv              1/1     Running     0          23s
fleet-system              pod/fleet-controller-54dd95c75b-22xfr         1/1     Running     0          54s
fleet-system              pod/gitjob-86ccc9ddc9-h4mch                   1/1     Running     0          54s
ingress-nginx             pod/default-http-backend-565f86f5f9-8wwdg     1/1     Running     0          24m
ingress-nginx             pod/nginx-ingress-controller-22vg8            1/1     Running     0          24m
ingress-nginx             pod/nginx-ingress-controller-gnt2z            1/1     Running     0          24m
ingress-nginx             pod/nginx-ingress-controller-plzrm            1/1     Running     0          24m
kube-system               pod/calico-kube-controllers-b486cd75d-dnp4h   1/1     Running     1          24m
kube-system               pod/calico-node-lz9tv                         1/1     Running     0          24m
kube-system               pod/calico-node-nlhfl                         1/1     Running     0          24m
kube-system               pod/calico-node-pks26                         1/1     Running     0          24m
kube-system               pod/coredns-56fdbbcdfc-tkw4m                  1/1     Running     0          24m
kube-system               pod/coredns-56fdbbcdfc-vjt27                  1/1     Running     0          24m
kube-system               pod/coredns-autoscaler-5c64bb75c8-4rp8f       1/1     Running     0          24m
kube-system               pod/metrics-server-6b697547fc-tmcjf           1/1     Running     0          24m
kube-system               pod/rke-coredns-addon-deploy-job-9qjtz        0/1     Completed   0          24m
kube-system               pod/rke-ingress-controller-deploy-job-bm7qt   0/1     Completed   0          24m
kube-system               pod/rke-metrics-addon-deploy-job-bm8kd        0/1     Completed   0          24m
kube-system               pod/rke-network-plugin-deploy-job-dm4kd       0/1     Completed   0          24m
rancher-operator-system   pod/rancher-operator-cccbf7f8-fgsm5           1/1     Running     0          32sNAMESPACE       NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
cattle-system   service/rancher                ClusterIP   10.43.153.193   <none>        80/TCP,443/TCP           107s
cattle-system   service/rancher-webhook        ClusterIP   10.43.137.105   <none>        443/TCP                  25s
default         service/kubernetes             ClusterIP   10.43.0.1       <none>        443/TCP                  25m
fleet-system    service/gitjob                 ClusterIP   10.43.43.108    <none>        80/TCP                   54s
ingress-nginx   service/default-http-backend   ClusterIP   10.43.246.34    <none>        80/TCP                   24m
kube-system     service/kube-dns               ClusterIP   10.43.0.10      <none>        53/UDP,53/TCP,9153/TCP   <invalid>
kube-system     service/metrics-server         ClusterIP   10.43.187.147   <none>        443/TCP                  24mNAMESPACE       NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
ingress-nginx   daemonset.apps/nginx-ingress-controller   3         3         3       3            3           <none>                   24m
kube-system     daemonset.apps/calico-node                3         3         3       3            3           kubernetes.io/os=linux   24mNAMESPACE                 NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
cattle-system             deployment.apps/rancher                   3/3     3            3           107s
cattle-system             deployment.apps/rancher-webhook           1/1     1            1           25s
fleet-system              deployment.apps/fleet-agent               1/1     1            1           32s
fleet-system              deployment.apps/fleet-controller          1/1     1            1           54s
fleet-system              deployment.apps/gitjob                    1/1     1            1           54s
ingress-nginx             deployment.apps/default-http-backend      1/1     1            1           24m
kube-system               deployment.apps/calico-kube-controllers   1/1     1            1           24m
kube-system               deployment.apps/coredns                   2/2     2            2           <invalid>
kube-system               deployment.apps/coredns-autoscaler        1/1     1            1           <invalid>
kube-system               deployment.apps/metrics-server            1/1     1            1           24m
rancher-operator-system   deployment.apps/rancher-operator          1/1     1            1           32sNAMESPACE                 NAME                                                DESIRED   CURRENT   READY   AGE
cattle-system             replicaset.apps/rancher-65f6b5bbf6                  3         3         3       107s
cattle-system             replicaset.apps/rancher-webhook-85f777cb65          1         1         1       25s
fleet-system              replicaset.apps/fleet-agent-7cc65df565              1         1         1       23s
fleet-system              replicaset.apps/fleet-agent-c46d75d6d               0         0         0       32s
fleet-system              replicaset.apps/fleet-controller-54dd95c75b         1         1         1       54s
fleet-system              replicaset.apps/gitjob-86ccc9ddc9                   1         1         1       54s
ingress-nginx             replicaset.apps/default-http-backend-565f86f5f9     1         1         1       24m
kube-system               replicaset.apps/calico-kube-controllers-b486cd75d   1         1         1       24m
kube-system               replicaset.apps/coredns-56fdbbcdfc                  2         2         2       24m
kube-system               replicaset.apps/coredns-autoscaler-5c64bb75c8       1         1         1       24m
kube-system               replicaset.apps/metrics-server-6b697547fc           1         1         1       24m
rancher-operator-system   replicaset.apps/rancher-operator-cccbf7f8           1         1         1       32sNAMESPACE     NAME                                          COMPLETIONS   DURATION   AGE
kube-system   job.batch/rke-coredns-addon-deploy-job        1/1           1s         24m
kube-system   job.batch/rke-ingress-controller-deploy-job   1/1           2s         24m
kube-system   job.batch/rke-metrics-addon-deploy-job        1/1           2s         24m
kube-system   job.batch/rke-network-plugin-deploy-job       1/1           8s         24m

1. 配置基础设施和私有镜像仓库 | Rancher文档

5 配置 NGINX 负载均衡

我们将使用 NGINX 作为L4层负载均衡器(TCP),它将请求轮训转发到后端的 Rancher server 节点。在此配置中,负载均衡器位于 Rancher server 节点的前面。负载均衡器可以是任何能够运行 NGINX 的主机。我们不建议使用任意一个 Rancher server 节点作为负载均衡器节点,因为默认配置下每个 K8S 节点都会运行 ingress 控制器,而 ingress 控制器以为host网络模式运行,并默认监听了80443端口,所以默认情况下会出现端口冲突。如果一定要将 NGINX 安装在 Rancher server 某个节点上,那么可以编辑 ingress 控制器配置文件,在args中添加参数,端口根据实际情况修改 --http-port=8880 --http-port=8443。 ingress 控制器修改默认端口后,nginx 配置中代理的后端 server 端口也需要一并修改。

说明:在这些示例中,负载均衡器将被配置为将流量定向到三个 Rancher Server 节点。如果将 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果将 Rancher 安装在 K3s Kubernetes 集群上,则仅需要两个节点。

5.1 安装 NGINX#

首先在负载均衡器主机上安装 NGINX,NGINX 具有适用于所有已知操作系统的软件包。我们测试了1.141.15版本。有关安装 NGINX 的帮助,请参阅安装文档。

stream模块是必需的,在 NGINX 官方安装包中包含了这个模块。请参阅您的操作系统文档来了解如何在操作系统上安装和启用 NGINX stream模块。

创建 NGINX 配置#

安装 NGINX 之后,您需要使用节点的 IP 地址更新 NGINX 配置文件nginx.conf

NGINX 配置示例

  1. 将下面的配置示例复制并粘贴到您喜欢的文本编辑器中,保存为nginx.conf

  2. 在 nginx.conf 配置中,用之前准备的节点的 IP 替换 <IP_NODE_1><IP_NODE_2><IP_NODE_3>

    注意: 有关所有配置选项,请参见NGINX 文档:TCP 和 UDP 负载均衡。

[root@nginx nginx]# cat nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;
events {worker_connections 8192;
}
stream {upstream rancher_servers_http {least_conn;server 192.168.1.65:80 max_fails=3 fail_timeout=5s;server 172.16.10.59:80 max_fails=3 fail_timeout=5s;server 172.16.10.33:80 max_fails=3 fail_timeout=5s;}server {listen 80;proxy_pass rancher_servers_http;}upstream rancher_servers_https {least_conn;server 192.168.1.65:443 max_fails=3 fail_timeout=5s;server 172.16.10.59:443 max_fails=3 fail_timeout=5s;server 172.16.10.33:443 max_fails=3 fail_timeout=5s;}server {listen     443;proxy_pass rancher_servers_https;}
}

 将 NGINX 作为 Docker 容器运行

[root@nginx nginx]# docker run --name wubo --privileged=true --restart=unless-stopped -p 80:80 -p 443:443 -it -v /home/wubo/rancher/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime  -d harbor.jettech.com/jettechtools/nginx:1.21.4

效果图:

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

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

相关文章

网络安全—模拟ARP欺骗

文章目录 网络拓扑安装使用编辑数据包客户机攻击机验证 仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。当然现在的计算机多无法被欺骗了&#xff0c;开了防火墙ARP欺骗根本无效。 网络拓扑 均使用Windows Server 2003系统 相关配置可以点击观看这篇文章…

【iOS安全】JS 调用Objective-C中WKWebview Handler的三种方式

有三种实现途径 1. WKScriptMessageHandler OC部分&#xff1a;注册并实现Handler 将OC中的方法"nativeMethod"注册为JavaScript Message Handler&#xff0c;从而WebView中的JavaScript代码可以调用该方法 // Register in Objective-C code - (void)setupWKWebVi…

算法通关村番外篇-数组实现队列

大家好我是苏麟 , 今天来用数组实现一下队列 . 数组实现队列 顺序存储结构存储的队列称为顺序队列&#xff0c;内部使用一个一维数组存储&#xff0c;用一个队头指针 front 指向队列头部节点(即使用int类型front来表示队头元素的下标)&#xff0c;用一个队尾指针rear(有的地方…

vue3中pdf打印问题处理

1 get请求参数问题 之前的请求是post得不到参数&#xff0c;今天发现的问题很奇怪&#xff0c;从前端进入网关&#xff0c;网关居然得不到参数。 前端代码 const print () > {let linkUrlStr proxy.$tool.getUrlStr(proxy.$api.invOrder.psiInvOrder.printSalOutstock,{a…

【Java】面向对象程序设计 期末复习总结

语法基础 数组自带长度属性 length&#xff0c;可以在遍历的时候使用&#xff1a; int []ages new int[10];for (int i 0; i < ages.length; i)System.out.println(ages[i]); 数组可以使用增强式for语句进行只读式遍历&#xff1a; int[] years new int[10];for (int ye…

Git(3):Git环境常用命令

1 获取本地仓库 要使用Git对我们的代码进行版本控制&#xff0c;首先需要获得本地仓库 &#xff08;1&#xff09;在电脑的任意位置创建一个空目录&#xff08;例如test&#xff09;作为我们的本地Git仓库 &#xff08;2&#xff09;进入这个目录中&#xff0c;点击右键打开…

ElasticSearch数据同步

文章目录 ElasticSearch数据同步1. 同步调用2. 异步通知3. 监听binlog4. 工作中处理同步的问题 ElasticSearch数据同步 ElasticSearch中酒店数据来自于mysql数据库&#xff0c;因此MySQL数据发生改变时&#xff0c;ElasticSearch也必须跟着改变&#xff0c;这个就是ElasticSear…

一个基于SpringBoot+Thymeleaf渲染的图书管理系统

功能: 用户: a.预约图书 b.查看预约记录 c.还书 管理员: a.添加图书 b.处理预约(借书) c.查看借阅记录 另: 1.当用户过了还书日期仍旧未还书时会发邮件通知 2.当有书被还时发邮件通知预约书的用户到图书馆进行借书

八大算法排序@冒泡排序(C语言版本)

冒泡排序 概念 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的排序算法&#xff0c;它重复地遍历待排序序列&#xff0c;一次比较两个相邻的元素&#xff0c;如果它们的顺序错误就将它们交换过来。通过多次的遍历&#xff0c;使得最大的元素逐渐移动到待排序序…

【人工智能】百度智能云千帆AppBuilder,快速构建您的专属AI原生应用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》&#xff0c;此序列是《人工智能》专栏文章。 这是2024年第5篇文章&#xff0c;此篇文章是进行人工智能相关的实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&…

docker小白第十一天

docker小白第十一天 dockerfile分析 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。即构建新镜像时会用到。 构建三步骤&#xff1a;编写dockerfile文件-docker build命令构建镜像-docker run镜像 运行容器实例。即一…

气缸功能块(SMART PLC梯形图代码)

有关气缸功能块的更多介绍,可以参考下面链接文章: https://rxxw-control.blog.csdn.net/article/details/125459568https://rxxw-control.blog.csdn.net/article/details/125459568CODESYS平台双通气缸功能块 https://rxxw-control.blog.csdn.net/article/details/12544822…

Linux 进程(七) 进程地址空间

虚拟地址/线性地址 学习c语言的时候我们经常会用到 “&” 符号&#xff0c;以及下面这张表&#xff0c;那么取出来的地址是否对应的是真实的物理地址呢&#xff1f;下面我们来写代码一步一步的验证。 从上面这张图不难看出&#xff0c;从正文代码&#xff0c;到命令行参数环…

Django Web 开发实战-实现用户管理系统(部门管理、用户管理、注册登录、文件上传)

简介 基于Django Python Web框架 MySQL Bootstrap 开发的用户管理系统。支持增删改查、模糊搜索、分页。 功能介绍 部门管理---》已完成 用户管理---》已完成 认证&#xff08;注册/登录&#xff09;---》开发中 数据统计---》待开发 文件上传---》待开发 效果图 部门…

Rust圣经 阅读 数值类型

基本类型 Rust 每个值都有其确切的数据类型&#xff0c;分为两类&#xff1a;基本类型和复合类型。 基本类型往往是一个最小化原子类型&#xff0c;无法解构为其它类型&#xff08;一般意义上来说&#xff09;&#xff0c;由以下组成&#xff1a; 数值类型&#xff1a;有符号…

印象笔记03 衍生软件使用

印象笔记03 衍生软件使用 Verse 以下内容来源于官方介绍 VERSE是一款面向未来的智能化生产力工具&#xff0c;由印象笔记团队诚意推出。 你可以用VERSE&#xff1a; 管理数字内容&#xff0c;让信息有序高效运转&#xff1b;搭建知识体系&#xff0c;构建你的强大知识库&am…

CMU15-445-Spring-2023-Project #0 - C++ Primer

前置任务。 Task #1 - Copy-On-Write Trie Copy-on-write (COW) Trie 在进行修改时&#xff0c;不会立即复制整个数据结构。相反&#xff0c;它会在需要修改的节点被多个引用的时候才进行复制。当要对某个节点进行写操作&#xff08;添加子节点或者继续向下insert&#xff09…

修改多选框el-checkbox样式, 大小,背景色

修改多选框el-checkbox样式, 大小,背景色 /* 背景透明 */ .el-checkbox__inner {background: transparent;border: 1px solid #00ffe5; } /* 选中样式 */ .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {b…

灸哥问答:分布式系统中数据一致性的问题如何解决

在分布式系统&#xff0c;数据一致性的问题是一个老生常谈&#xff0c;必须面对的一个问题&#xff0c;而且又极具挑战和复杂度的一个问题&#xff0c;针对数据一致性的问题&#xff0c;没有一个简单的单一的解决方案可以圆满解决&#xff0c;是需要结合具体的场景&#xff0c;…

人工智能技术在教育行业有哪些应用?

人工智能技术在教育行业有以下几个主要应用&#xff1a; 1. 个性化学习&#xff1a;人工智能可以根据学生的学习情况和特点&#xff0c;提供个性化的学习内容和教学方法。通过分析学生的学习数据和行为模式&#xff0c;AI 可以给予针对性的建议和反馈&#xff0c;帮助学生更好地…