deployment

一.deployment

        rc和rs控制器都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级

        deployments资源,实际上就是用来专门部署业务代码的控制器,专门用于企业业务代码的升级和回滚

        deployment部署控制器,实际上控制的是rs副本控制器,如果说rs副本控制器是控制pod的副本数量的,那么deployment就是专门控制rs控制器资源的

简单来说:deployment不需要删除pod,rc,rs需要删除pod

1.deplyment的简单实现

·deplyment资源清单

[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo
spec:replicas: 3selector:matchLabels:demoo0: demoo0template:metadata:name: pod001labels:demoo0: demoo0spec:containers:- name: ddimage: harbor.test.com/test/nginx:v1ports:- containerPort: 80

· 创建查看

[root@master 0721]# kubectl apply -f dp.yaml 
deployment.apps/dp-demo created
[root@master 0721]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
dp-demo   3/3     3            3           18s
[root@master 0721]# kubectl get rs
NAME                DESIRED   CURRENT   READY   AGE
dp-demo-988687d45   3         3         3       25s
[root@master 0721]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
dp-demo-988687d45-2b9d2   1/1     Running   0          38s   10.100.2.80   worker2   <none>           <none>
dp-demo-988687d45-vp7xn   1/1     Running   0          38s   10.100.2.79   worker2   <none>           <none>
dp-demo-988687d45-xg4fl   1/1     Running   0          38s   10.100.1.58   worker1   <none>           <none>

·通过标签查看pod时,可以发现pod多了一个标签

[root@master 0721]# kubectl get pods --show-labels 
NAME                      READY   STATUS    RESTARTS   AGE   LABELS
dp-demo-988687d45-2b9d2   1/1     Running   0          61s   demoo0=demoo0,pod-template-hash=988687d45
dp-demo-988687d45-vp7xn   1/1     Running   0          61s   demoo0=demoo0,pod-template-hash=988687d45
dp-demo-988687d45-xg4fl   1/1     Running   0          61s   demoo0=demoo0,pod-template-hash=988687d45

注:

deployment:是用来部署服务的一个资源,是企业中常用的资源控制器

功能:

        1,管理rs资源,通过rs资源管理pod

        2,具有上线部署、副本设置、滚动升级、回滚等功能

        3,提供了声明式更新,可以使用apply命令进行更新镜像版本之类的能力

使用场景:企业部署迭代应用

原理:

        通过“标签”管理,实现rs资源的控制,它会在自动创建rs的过程中给rs自动生成一个特有的标签(专属于deployment),当apply更新清单的时候,它会通过标签选定是使用历史的rs还是重新创建rs

2.deployment升级回退

·v1版本

1.编辑deplyment资源清单

        ps~直接用上面创建的那个也行

[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo
spec:replicas: 3selector:matchLabels:demoo0: demoo0template:metadata:name: pod001labels:demoo0: demoo0spec:containers:- name: ddimage: harbor.test.com/test/nginx:v1ports:- containerPort: 80
2.创建查看
[root@master 0721]# kubectl apply -f dp.yaml 
deployment.apps/dp-demo created
[root@master 0721]# kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
dp-demo   3/3     3            3           18s
[root@master 0721]# kubectl get rs
NAME                DESIRED   CURRENT   READY   AGE
dp-demo-988687d45   3         3         3       25s
[root@master 0721]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
dp-demo-988687d45-2b9d2   1/1     Running   0          38s   10.100.2.80   worker2   <none>           <none>
dp-demo-988687d45-vp7xn   1/1     Running   0          38s   10.100.2.79   worker2   <none>           <none>
dp-demo-988687d45-xg4fl   1/1     Running   0          38s   10.100.1.58   worker1   <none>           <none>
3.创建service资源用于访问
·编辑service资源清单
[root@master 0721]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata: name: svc001
spec:type: NodePortselector:demoo0: demoo0ClusterIP: 10.200.200.101ports:- port: 99targetPort: 80nodePort: 30002
·创建查看
[root@master 0721]# kubectl apply -f svc.yaml 
service/svc001 created
[root@master 0721]# kubectl describe svc svc001 
Name:                     svc001
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 demoo0=demoo0
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.200.200.200
IPs:                      10.200.200.200
Port:                     <unset>  99/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30002/TCP
Endpoints:                10.100.1.58:80,10.100.2.79:80,10.100.2.80:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@master 0721]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
dp-demo-988687d45-2b9d2   1/1     Running   0          22m   10.100.2.80   worker2   <none>           <none>
dp-demo-988687d45-vp7xn   1/1     Running   0          22m   10.100.2.79   worker2   <none>           <none>
dp-demo-988687d45-xg4fl   1/1     Running   0          22m   10.100.1.58   worker1   <none>           <none>

4.浏览器访问测试

·v2版本

1.修改deployment清单中pod镜像版本为V2
[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo
spec:replicas: 3selector:matchLabels:demoo0: demoo0template:metadata:name: pod001labels:demoo0: demoo0spec:containers:- name: ddimage: harbor.test.com/test/nginx:v2ports:- containerPort: 80
2.重新加载deployment资源
[root@master 0721]# kubectl apply -f dp.yaml 
deployment.apps/dp-demo configured
3.浏览器访问测试

注:

        deployment,不需要删除原有的pod,只需要apply重新更新一下资源清单,即可实现产品迭代,同比与rc和rs资源,优势明显

        deployment资源,在apply升级后,是又重新创建了rs资源,也就是再升级的过程中,有两个rs资源

3.业务升级策略设置

        升级过程中的控制策略

Kubernetes (k8s) 的升级策略取决于你想要如何管理更新。以下是一些常见的升级策略:

  1. 滚动更新(Rolling Update): 逐个更新Pod, 通过滚动更新Deployment来完成。

  2. 蓝绿部署(Blue/Green Deployment): 部署新版本的应用实例,然后将流量切换到新版本。

  3. 金丝雀部署(Canary Deployment): 部署新版本的一小部分,监控反馈,然后逐渐增加新版本的实例数量。

升级策略类型:

        第一种:Recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
        第二种:RollingUpdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;

·升级策略资源清单

[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo
spec:#声明升级策略strategy:#设置升级策略类型type: RollingUpdate#若设置了RollingUpdate类型,还需要设置更新的策略rollingUpdate:#在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,        新旧版本一起)maxSurge: 2#在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)maxUnavailable: 1replicas: 5selector:matchLabels:demoo0: demoo0template:metadata:name: pod001labels:demoo0: demoo0spec:containers:- name: ddimage: harbor.test.com/test/nginx:v1ports:- containerPort: 80

 ·升级创建资源

[root@master 0721]# kubectl apply -f dp.yaml 
deployment.apps/dp-demo configured
[root@master 0721]# kubectl get rs
NAME                 DESIRED   CURRENT   READY   AGE
dp-demo-6875bfb8b8   1         1         1       42m
dp-demo-988687d45    5         5         3       69m
[root@master 0721]# kubectl get rs
NAME                 DESIRED   CURRENT   READY   AGE
dp-demo-6875bfb8b8   0         0         0       42m
dp-demo-988687d45    5         5         4       69m
[root@master 0721]# kubectl get rs
NAME                 DESIRED   CURRENT   READY   AGE
dp-demo-6875bfb8b8   0         0         0       42m
dp-demo-988687d45    5         5         5       69m

4.蓝绿发布器

        蓝绿发布,就是准备两套代码,不需要停止老版本(不影响上一个版本的用户访问),而是在另一套环境中部署新版本然后进行测试,测试通过后将用户流量切换到新的版本,其特点是业务没有终端,升级风险相对较小

实现方式:

        1,部署当前版本代码

        2,部署svc资源

        3,部署新版本使用新的deployment名称,新的标签

        4,切换svc标签到新的pod中实现业务切换;

·蓝环境-v1

1.编辑资源清单

        deployment

[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo
spec:replicas: 5selector:matchLabels:demoo0: demoo0template:metadata:name: pod001labels:demoo0: demoo0spec:containers:- name: ddimage: harbor.test.com/test/nginx:v1ports:- containerPort: 80

         svc

apiVersion: v1
kind: Service
metadata: name: svc001
spec:type: NodePortselector:demoo0: demoo0clusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 30002
 2.创建资源
[root@master 0721]# kubectl apply -f dp.yaml 
[root@master 0721]# kubectl apply -f svc.yaml 
 3.浏览器访问测试

·绿环境-v2

1.编辑资源清单
[root@master 0721]# cat dp-green.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo02
spec:replicas: 5selector:matchLabels:demoo02: demoo02template:metadata:name: pod001labels:demoo02: demoo02spec:containers:- name: ddimage: harbor.test.com/test/nginx:v2ports:- containerPort: 80
 2.创建查看资源
[root@master 0721]# kubectl apply -f dp-green.yaml 
deployment.apps/dp-demo02 created
[root@master 0721]# kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
dp-demo01-7dbc8d76b9-4gl65   1/1     Running   0          5m26s   10.100.1.95    worker1   <none>           <none>
dp-demo01-7dbc8d76b9-67bpg   1/1     Running   0          5m26s   10.100.2.126   worker2   <none>           <none>
dp-demo01-7dbc8d76b9-8mh2c   1/1     Running   0          5m26s   10.100.2.124   worker2   <none>           <none>
dp-demo01-7dbc8d76b9-cnc6k   1/1     Running   0          5m26s   10.100.1.96    worker1   <none>           <none>
dp-demo01-7dbc8d76b9-wwsp6   1/1     Running   0          5m26s   10.100.2.125   worker2   <none>           <none>
dp-demo02-6f444d7988-ddbrs   1/1     Running   0          4m39s   10.100.1.97    worker1   <none>           <none>
dp-demo02-6f444d7988-fhjhm   1/1     Running   0          4m39s   10.100.2.128   worker2   <none>           <none>
dp-demo02-6f444d7988-hcljc   1/1     Running   0          4m39s   10.100.1.99    worker1   <none>           <none>
dp-demo02-6f444d7988-m5z9r   1/1     Running   0          4m39s   10.100.2.127   worker2   <none>           <none>
dp-demo02-6f444d7988-wpj47   1/1     Running   0          4m39s   10.100.1.98    worker1   <none>           <none>
3.切换svc资源的标签,让其指向新版本
[root@master 0721]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata: name: svc001
spec:type: NodePortselector:demoo02: demoo02clusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 30002
4.重新apply资源清单(svc)

        有时候apply没用就需要先delete再apply重新创建

[root@master 0721]# kubectl delete svc svc001 
service "svc001" deleted
[root@master 0721]# kubectl apply -f svc.yaml 
service/svc001 created
5.浏览器访问测试

5.灰度发布(金丝雀发布)

 实现的机制:

        1,部署老版本,使用多副本(模拟正式环境)

        2,部署svc,匹配标签

        3,部署新版本,标签与老版本标签一致(让svc能够访问到,副本从0开始)

        4,灰度版本测试没有问题,将恢复版本的副本数量,逐渐调高增加为生产数量

        5,将旧版本逐渐调低至0,此时流量全部跑到了新版本上

·部署老版本

[root@master 0721]# cat dp.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo01
spec:replicas: 5selector:matchLabels:demoo01: demoo01template:metadata:name: pod001labels:demoo01: demoo01spec:containers:- name: ddimage: harbor.test.com/test/nginx:v1ports:- containerPort: 80
[root@master 0721]# kubectl apply -f dp.yaml 
deployment.apps/dp-demo01 created

·部署新版本

[root@master 0721]# cat dp-green.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dp-demo02
spec:replicas: 0selector:matchLabels:demoo01: demoo01template:metadata:name: pod001labels:demoo01: demoo01spec:containers:- name: ddimage: harbor.xinjizhiwa.com/test/nginx:v2ports:- containerPort: 80

·部署svc

[root@master 0721]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata: name: svc001
spec:type: NodePortselector:demoo01: demoo01clusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 30002
[root@master 0721]# kubectl apply -f svc.yaml 
service/svc001 created
[root@master 0721]# kubectl describe svc svc001 
Name:                     svc001
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 demoo01=demoo01
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.200.200.200
IPs:                      10.200.200.200
Port:                     <unset>  99/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30002/TCP
Endpoints:                10.100.1.100:80,10.100.1.101:80,10.100.2.129:80 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

·将新版本的副本逐渐调高

         就是将老版本rs控制器数量逐渐调低,新版本的逐渐调高(修改资源清单中的rs数量)

6.案例

步骤分析:

        1.准备NFS环境

        2.【wordpress的pod】创建deployment资源的wordpress(pod)容器

        3.【用户访问的svc】创建用户访问的svc资源

        4.【数据库的pod】创建deployment资源的数据库服务的pod容器

        5.【数据库的svc】创建业务服务wordpress的pod资源访问数据库的svc资源

·准备nfs环境

        nfs之前装过,存储节点配置nfs配置文件也在之前配置过了,所以创建个存储路径就好了

1.创建存储路径
 mkdir -p /k8s/data/{mysql,wordpress}

·编辑wordpress的depoloy资源清单

[root@master demowordpress]# cat dm-wordperss.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm-wp
spec:replicas: 3selector:matchLabels:k8s: wptemplate:metadata:name: pod01labels:k8s: wpspec:volumes:- name: vol-wpnfs:server: 10.0.0.230path: /k8s/data/wordpresscontainers:- name: c-wpimage: wordpress:latestports:- name: wp-c-portcontainerPort: 80volumeMounts:- name: vol-wpmountPath: /var/www/html/wp-content/uploadsenv:- name: WORDPRESS_DB_HOSTvalue: 10.200.200.200:3306- name: WORDPRESS_DB_USERvalue: admin- name: WORDPRESS_DB_PASSWORDvalue: demoo- name: WORDPRESS_DB_NAMEvalue: wordpress

·编辑wordpress的svc资源

[root@master demowordpress]# cat svc-wordpress.yaml 
apiVersion: v1
kind: Service
metadata:name: svc-wp
spec:type: NodePortselector:k8s: wpclusterIP: 10.200.200.100ports:- port: 99targetPort: 80nodePort: 31000

·编辑数据库的deploy资源清单

[root@master demowordpress]# cat dm-mysql.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: dm-sql
spec:replicas: 1selector:matchLabels:k8s: sqltemplate:metadata:name: pod02labels: k8s: sqlspec:volumes:- name: vol-sqlnfs:server: 10.0.0.230path: /k8s/data/mysqlcontainers:- name: c-dbimage: mysql:8.0ports:- name: db-portcontainerPort: 3306volumeMounts:- name: vol-sqlmountPath: /var/lib/mysqlenv:- name: MYSQL_DATABASEvalue: wordpress- name: MYSQL_USERvalue: admin- name: MYSQL_PASSWORDvalue: demoo- name: MYSQL_ROOT_PASSWORDvalue: demoo

·编辑数据库的svc资源

[root@master demowordpress]# cat svc-mysql.yaml 
apiVersion: v1
kind: Service
metadata:name: svc-sql
spec:type: NodePortselector:k8s: sqlclusterIP: 10.200.200.200ports:- port: 3306targetPort: 3306nodePort: 32000

·创建查看资源

[root@master demowordpress]# kubectl apply -f .
deployment.apps/dm-sql created
deployment.apps/dm-wp created
service/svc-sql unchanged
service/svc-wp unchanged
[root@master demowordpress]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.200.0.1       <none>        443/TCP          14d
svc-sql      NodePort    10.200.200.200   <none>        3306:32000/TCP   14m
svc-wp       NodePort    10.200.200.100   <none>        99:31000/TCP     11m
[root@master demowordpress]# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP             NODE      NOMINATED NODE   READINESS GATES
dm-sql-86b77b85c9-cqtd6   1/1     Running   0          2m28s   10.100.1.106   worker1   <none>           <none>
dm-wp-75f457464f-2zn79    1/1     Running   0          2m28s   10.100.1.104   worker1   <none>           <none>
dm-wp-75f457464f-94tm5    1/1     Running   0          2m28s   10.100.2.2     worker2   <none>           <none>
dm-wp-75f457464f-jb7zx    1/1     Running   0          2m28s   10.100.1.105   worker1   <none>           <none>

·查看nfs存储路径,是否有数据 

[root@harbor data]# ll mysql/
总用量 198056
-rw-r----- 1 polkitd input       56 7月  28 16:28 auto.cnf
-rw-r----- 1 polkitd input  3117698 7月  28 16:28 binlog.000001
-rw-r----- 1 polkitd input      156 7月  28 16:28 binlog.000002
-rw-r----- 1 polkitd input       32 7月  28 16:28 binlog.index
-rw------- 1 polkitd input     1680 7月  28 16:28 ca-key.pem
-rw-r--r-- 1 polkitd input     1112 7月  28 16:28 ca.pem
-rw-r--r-- 1 polkitd input     1112 7月  28 16:28 client-cert.pem
-rw------- 1 polkitd input     1680 7月  28 16:28 client-key.pem
-rw-r----- 1 polkitd input   196608 7月  28 16:28 #ib_16384_0.dblwr
-rw-r----- 1 polkitd input  8585216 7月  28 16:28 #ib_16384_1.dblwr
-rw-r----- 1 polkitd input     5698 7月  28 16:28 ib_buffer_pool
-rw-r----- 1 polkitd input 12582912 7月  28 16:28 ibdata1
-rw-r----- 1 polkitd input 50331648 7月  28 16:28 ib_logfile0
-rw-r----- 1 polkitd input 50331648 7月  28 16:28 ib_logfile1
-rw-r----- 1 polkitd input 12582912 7月  28 16:29 ibtmp1
drwxr-x--- 2 polkitd input      187 7月  28 16:28 #innodb_temp
drwxr-x--- 2 polkitd input      143 7月  28 16:28 mysql
-rw-r----- 1 polkitd input 31457280 7月  28 16:28 mysql.ibd
drwxr-x--- 2 polkitd input     8192 7月  28 16:28 performance_schema
-rw------- 1 polkitd input     1676 7月  28 16:28 private_key.pem
-rw-r--r-- 1 polkitd input      452 7月  28 16:28 public_key.pem
-rw-r--r-- 1 polkitd input     1112 7月  28 16:28 server-cert.pem
-rw------- 1 polkitd input     1680 7月  28 16:28 server-key.pem
drwxr-x--- 2 polkitd input       28 7月  28 16:28 sys
-rw-r----- 1 polkitd input 16777216 7月  28 16:28 undo_001
-rw-r----- 1 polkitd input 16777216 7月  28 16:28 undo_002
drwxr-x--- 2 polkitd input        6 7月  28 16:28 wordpress

·浏览器访问验证

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

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

相关文章

杭州东网约车管理再出行方面取得的显著成效

随着科技的飞速发展&#xff0c;网约车已成为人们日常出行的重要选择。在杭州这座美丽的城市&#xff0c;网约车服务更是如雨后春笋般蓬勃发展。特别是杭州东站&#xff0c;作为杭州的重要交通枢纽&#xff0c;网约车管理显得尤为重要。近日&#xff0c;沧穹科技郑重宣告已助力…

昇思25天学习打卡营第XX天|Pix2Pix实现图像转换

Pix2Pix是一种基于条件生成对抗网络&#xff08;cGAN&#xff09;的图像转换模型&#xff0c;由Isola等人在2017年提出。它能够实现多种图像到图像的转换任务&#xff0c;如从草图到彩色图像、从白天到夜晚的场景变换等。与传统专用机器学习方法不同&#xff0c;Pix2Pix提供了一…

Java抽象类和抽象方法

以下文章只是自己十分粗浅的理解&#xff0c;和简单的使用方法&#xff0c;没有很深度的学习理解 Java的抽象类和抽象方法都是使用abstract关键字进行修饰。 抽象类 声明格式&#xff1a;" abstract 权限修饰符 class 类名 {...} " 抽象方法 声明格式&#xff1a;“…

Seata 入门与实战

一、什么是 Seata Seata 是一款开源的分布式事务解决方式&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式事务解决方案。 二、Seata 组成 事务协调者&#xff08;Transacti…

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树&#xff0c;所以学习前需要学会基本的二叉搜索树&#xff0c;并…

OnlyOffice在线部署

部署服务环境&#xff1a;Centos7.6 curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash 安装yum-utils工具 yum install yum-utils 添加nginx.repo源(Nginx官网有最新版&#xff0c;直接copy即可) vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx st…

Stable Diffusion 使用详解(4)---- 制作情景文本

目录 背景 制作流程 绘制底图 书写提示词 选底模 常规参数设置 controlNet 处理 Candy controlNet 设置 Depth controlNet 设置 输出效果 改进 适当修改提示词 适当修改controlNet 适当修改底模 背景 制作情景文本&#xff0c;将文本较好的融入背景图片。首先要…

c->c++(三):stl

本文主要探讨c的stl相关知识:模版&#xff0c;容器&#xff0c;泛型算法&#xff0c;萃取特化&#xff0c;智能指针等。 模版 模板typename和class均可定义 模板参数可是类型,还可是值 模板编译根据调用实参类型推导参数类型 编译器用值的类型…

以西门子winCC为代表的组态界面,还是有很大提升空间的。

组态界面向来都是功能为主&#xff0c;美观和体验性为辅的&#xff0c;这也导致了国内的一些跟随者如法炮制&#xff0c;而且很多操作的工程师也是认可这重模式&#xff0c;不过现在一些新的组态软件可是支持精美的定制化界面&#xff0c;还有3D交互效果&#xff0c;这就是确实…

Arthas在线诊断案例实战整理

会一直持续更新。。。 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时…

高清无水印,录屏软件对比盘点

现在生活中不论是想要记录赛事精彩瞬间、制作教学视频&#xff0c;都可以用录屏大师这样的录屏软件来实现。今天我就介绍几款备受好评的录屏工具。 1.福昕录屏大师 链接直达&#xff1a;https://www.foxitsoftware.cn/REC/ 这个软件就是一个专业的录屏工具。它可以控制屏幕…

负载均衡、软件平滑升级

安装nginx 1.26.1 平滑升级、负载均衡 安装依赖 gcc gcc-c pcre-devel openssl-devel 七层负载均衡配置&#xff1a; [rootf ~]# vim /usr/local/nginx/conf/nginx.conf 43 location / {44 # root html;45 # index index.html index…

测试开发面试题,助你拿高薪offer

进入金九银十&#xff0c;很多小伙伴有被动跳槽的打算&#xff0c;所以更新一些测试开发 面试题&#xff0c;希望能帮到大家。 一 请说一下HTTP 状态码 HTTP状态码大致分为5类&#xff1a; 常见的http状态码如下: 二 python中“” 和“ is ”的区别 is 和 都可以进行对象比…

CVE-2022-21663: WordPress <5.8.3 版本对象注入漏洞深入分析

引言 在网络安全领域&#xff0c;技术的研究与讨论是不断进步的动力。本文针对WordPress的一个对象注入漏洞进行分析&#xff0c;旨在分享技术细节并提醒安全的重要性。特别强调&#xff1a;本文内容仅限技术研究&#xff0c;严禁用于非法目的。 漏洞背景 继WordPress CVE-2…

解决nginx端口转发后,获取不到真实IP问题

文章目录 1&#xff0c;设置nginx端口转发1.2&#xff0c;无法获取客户端真实IP 2&#xff0c;nginx配置文件增加配置&#xff0c;保留客户端信息2.2&#xff0c;可以看到真实IP信息 1&#xff0c;设置nginx端口转发 location /AWAPI/ {proxy_pass http://172.28.43.19:9607; …

UEFI DebugLib 介绍

1.我们调试中常用Debug 打印信息&#xff0c;这些会输出到BIOS串口日志中 EFI_STATUSEFIAPIHelloWorld2(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable){EFI_STATUS Status;StatusEFI_SUCCESS;gST->ConOut->OutputString(gST->ConOut,L&q…

HomeServer平台选择,介绍常用功能

​​ 平台选择 HomeServer 的性能要求不高&#xff0c;以下是我的硬件参数&#xff0c;可供参考&#xff1a; ‍ 硬件&#xff1a; 平台&#xff1a;旧笔记本CPU&#xff1a;i5 4210u内存 8G硬盘&#xff1a;128G 固态做系统盘&#xff0c;1T1T 机械盘组 RAID1 做存储。硬…

【数据结构与算法】详解计数排序:小范围整数排序的最佳选择

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、计数排序的基本原理 三、实现步骤 1. 确定数据范围 2. 初始化计数数组…

Serverless Knative冷启动与自动扩缩容研究:从原理到实践

最近一个研究生网页的提问&#xff0c;然后就有了这篇博客&#xff01; 大佬你好&#xff0c;我看到您的关于Serverless的文章于是十分冒昧的向您提问。我现在是一名在研究通过Serverless容器调度解决冷启动问题的本科生&#xff0c;导师放养&#xff0c;就让看论文但是后面的代…

ubuntu20.04.6 安装Skywalking 10.0.1

1.前置准备 1.1. **jdk17&#xff08;Skywalking10 jdk22不兼容&#xff0c;用17版本即可&#xff09;**安装&#xff1a; https://blog.csdn.net/CsethCRM/article/details/140768670 1.2. elasticsearch安装&#xff1a; https://blog.csdn.net/CsethCRM/article/details…