deployment

news2024/11/15 9:45:46

一.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: 3
  selector:
    matchLabels:
      demoo0: demoo0
  template:
    metadata:
      name: pod001
      labels:
        demoo0: demoo0
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v1
        ports:
        - 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: 3
  selector:
    matchLabels:
      demoo0: demoo0
  template:
    metadata:
      name: pod001
      labels:
        demoo0: demoo0
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v1
        ports:
        - 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: NodePort
  selector:
    demoo0: demoo0
  ClusterIP: 10.200.200.101
  ports:
  - port: 99
    targetPort: 80
    nodePort: 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: 3
  selector:
    matchLabels:
      demoo0: demoo0
  template:
    metadata:
      name: pod001
      labels:
        demoo0: demoo0
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v2
        ports:
        - 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: 1

  replicas: 5
  selector:
    matchLabels:
      demoo0: demoo0
  template:
    metadata:
      name: pod001
      labels:
        demoo0: demoo0
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v1
        ports:
        - 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: 5
  selector:
    matchLabels:
      demoo0: demoo0
  template:
    metadata:
      name: pod001
      labels:
        demoo0: demoo0
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v1
        ports:
        - containerPort: 80

         svc

apiVersion: v1
kind: Service
metadata: 
  name: svc001
spec:
  type: NodePort
  selector:
    demoo0: demoo0
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 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: 5
  selector:
    matchLabels:
      demoo02: demoo02
  template:
    metadata:
      name: pod001
      labels:
        demoo02: demoo02
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v2
        ports:
        - 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: NodePort
  selector:
    demoo02: demoo02
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 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: 5
  selector:
    matchLabels:
      demoo01: demoo01
  template:
    metadata:
      name: pod001
      labels:
        demoo01: demoo01
    spec:
      containers:
      - name: dd
        image: harbor.test.com/test/nginx:v1
        ports:
        - 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: 0
  selector:
    matchLabels:
      demoo01: demoo01
  template:
    metadata:
      name: pod001
      labels:
        demoo01: demoo01
    spec:
      containers:
      - name: dd
        image: harbor.xinjizhiwa.com/test/nginx:v2
        ports:
        - containerPort: 80

·部署svc

[root@master 0721]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata: 
  name: svc001
spec:
  type: NodePort
  selector:
    demoo01: demoo01
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 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: 3
  selector:
    matchLabels:
      k8s: wp
  template:
    metadata:
      name: pod01
      labels:
        k8s: wp
    spec:
      volumes:
      - name: vol-wp
        nfs:
          server: 10.0.0.230
          path: /k8s/data/wordpress
      containers:
      - name: c-wp
        image: wordpress:latest
        ports:
        - name: wp-c-port
          containerPort: 80
        volumeMounts:
        - name: vol-wp
          mountPath: /var/www/html/wp-content/uploads
        env:
        - name: WORDPRESS_DB_HOST
          value: 10.200.200.200:3306
        - name: WORDPRESS_DB_USER
          value: admin
        - name: WORDPRESS_DB_PASSWORD
          value: demoo
        - name: WORDPRESS_DB_NAME
          value: wordpress

·编辑wordpress的svc资源

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

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

[root@master demowordpress]# cat dm-mysql.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm-sql
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s: sql
  template:
    metadata:
      name: pod02
      labels: 
        k8s: sql
    spec:
      volumes:
      - name: vol-sql
        nfs:
          server: 10.0.0.230
          path: /k8s/data/mysql
      containers:
      - name: c-db
        image: mysql:8.0
        ports:
        - name: db-port
          containerPort: 3306
        volumeMounts:
        - name: vol-sql
          mountPath: /var/lib/mysql
        env:
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: admin
        - name: MYSQL_PASSWORD
          value: demoo
        - name: MYSQL_ROOT_PASSWORD
          value: demoo

·编辑数据库的svc资源

[root@master demowordpress]# cat svc-mysql.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc-sql
spec:
  type: NodePort
  selector:
    k8s: sql
  clusterIP: 10.200.200.200
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 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.coloradmin.cn/o/1956840.html

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

相关文章

【Vue3复习】Vite创建项目报错解决

报错&#xff1a; Cannot find package ‘vite’ 出错原因分析 使用命令npm create vuelatest创建项目时&#xff0c;没有按顺序执行以下提示命令 解决 依序执行这三条指令 注意 如果没有执行 npm install 这条指令&#xff0c;直接用VS Code打开项目时&#xff0c;env.d.…

职场英语培训柯桥成人学外语|邮件里别乱用“Dear”,老外才不会这么写!

写邮件是职场上的必修课&#xff0c;而一封好的英语邮件应当从适合的称呼开始。 说到称呼&#xff0c;你的脑子里是不是冒出了一个单词“Dear” 从小我们就被教育写英语作文时&#xff0c;开头先来个Dear&#xff0c;结尾写个Sincerely&#xff0c;简直不要太顺手~ 然&#xff…

HDU1071——The area,HDU1072——Nightmare,HDU1073——Online Judge

目录 HDU1071——The area 题目描述 运行代码 代码思路 HDU1072——Nightmare 题目描述 运行代码 代码思路 HDU1073——Online Judge 题目描述 运行代码 代码思路 HDU1071——The area 题目描述 Problem - 1071 运行代码 #include <iostream> #include &…

CloudWeGo新手教程视频:手把手教你从0到1打造电商商城微服务demo

概要 Gomall 电商项目视频教程&#xff0c;由 CloudWeGo 技术社区出品&#xff0c;旨在帮助开发者掌握 Go 语言项目开发和微服务架构。教程通过演示 CloudWeGo 项目中的 Kitex 和 Hertz 框架&#xff0c;引导 Go 初学者学习常见的技术和开源中间件。 观看教程请访问&#xff…

高效灵活 | 前端利器 Vue.js 是一个构建用户界面的渐进式框架。

Vue.js 是一个构建用户界面的渐进式框架。 官网&#xff1a;https://cn.vuejs.org/ 基本特性 数据驱动&#xff1a;通过响应式机制&#xff0c;实现数据的变化自动触发视图的更新。 组件化架构&#xff1a;高度可复用的组件结构&#xff0c;提升代码组织性和可维护性。 虚拟…

爬虫-实战爬取虎扑ACG帖子

要求如下: 爬取虎扑步行街 ACG 版面的数据,要求使用多线程来并发爬取。范围是第一页的所有帖子,每个帖子包含标题、主题内容和第一页的所有回复内容。最后打印出爬到的所有帖子的标题。 网址是:ACG圈 - 虎扑社区。 针对上面的要求,我们进行分析: 首先是要使用多线程范…

YOLO5项目目录最强解析

YOLO5项目目录解析 YOLOv5 项目目录下的文件和目录的结构&#xff0c;以下是对每个目录和文件的解释&#xff1a; 目录 &#x1f4c1; .github: 存放 GitHub 相关配置和文件&#xff0c;如 GitHub Actions 工作流文件、Issue 模板等&#xff0c;用于自动化构建和持续集成等功…

Java编写SIP协议

1、编写Server代码 package com.genersoft.iot.vmp.sip; import javax.sip.*; import javax.sip.message.*; import javax.sip.header.*; import java.util.*;public class SimpleSipServer implements SipListener {private SipFactory sipFactory;private SipStack sipStack…

神经网络的参数初始化【PyTorch】

文章目录 1、常见初始化方法2、代码2.1、导包&#xff1a;2.2、均匀分布随机初始化2.3、固定初始化2.4、全0初始化2.5、全1初始化2.6、正态分布随机初始化2.7、kaiming 初始化2.8、xavier 初始化2.9、完整代码 3、小节 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专…

哨兵Sentinel-2一些有趣的示例

每天我们都会观察周围的世界。在许多情况下&#xff0c;我们认为我们所看到的事物是不言而喻的&#xff0c;它们只是我们所认为的那样。其他时候&#xff0c;我们会更仔细地分析和询问那些看起来不太熟悉的事物。有时&#xff0c;仅仅改变我们的视觉视角就能提供额外的启发和启…

html实现我的博客文章相册源码

文章目录 1.设计来源1.1 相册界面1.2 相册详细界面1.3 文章界面1.4 文章详细界面1.5 关于我1.6 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;http…

轻松上手MYSQL:JSON函数实现高效数据查询与操作

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索MYSQL字符串函数之旅✨ &#x1f44b; 大家好&#xff01;文本学习和探…

「ETL趋势」定时任务自动化导出Excel/CSV,高效归档业务明细数据

目录 一、Excel/CSV文件输出应用场景 二、Excel/CSV文件输出的常见问题 三、合同订单数据文件输出实战 1&#xff09;合同订单数据输出为 CSV 文件 1、建立业务系统数据库、FTP/SFTP 服务器数据连接 2、数据处理 3、输出为文件 4、运行效果查看 2&#xff09;合同订单数据输出为…

数据结构第七讲:栈和队列OJ题

数据结构第七讲&#xff1a;栈和队列OJ题 1.有效的括号2.用队列实现栈3.用栈实现队列4.设计循环队列 1.有效的括号 链接: OJ题目链接 typedef char StackDataType;typedef struct Stack {StackDataType* arr;//使用一个指针来指向开辟的数组int capacity;//保存数组的空间大…

concrt140.dll丢失是什么情况?有效的解决dll!

concrt140.dll文件丢失是电脑中少见的文件&#xff0c;但也会因为某些原因会导致电脑丢失concrt140.dll文件&#xff0c;那么出现这文件的原因是什么呢&#xff1f;出现这样的问题有什么办法可以将concrt140.dll修复呢&#xff1f;一起来看看吧。 为什么会缺失concrt140.dll文件…

前端:数字世界的门面与灵魂

在当今数字化时代&#xff0c;前端作为用户与网站或应用直接交互的界面&#xff0c;其重要性不言而喻。它不仅是信息的展示窗口&#xff0c;更是用户体验&#xff08;UX&#xff09;和用户界面&#xff08;UI&#xff09;设计的核心。本文将深入剖析前端在整体网站或应用中的重…

vscode 创建QT最简工程

1. 前提条件 qt 安装cmake安装 参考&#xff1a; https://blog.csdn.net/qq_51355375/article/details/139890889vscode 环境配置 参考&#xff1a; https://blog.csdn.net/qq_51355375/article/details/140733495 2. 工程创建 include 放头文件src .cpp 文件CMakeList.tex …

物品租赁小程序论文(设计)开题报告

一、课题的背景和意义 近些年来&#xff0c;随着移动互联网巅峰时期的来临&#xff0c;互联网产业逐渐趋于“小、轻、微”的方向发展&#xff0c;符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中&#xff0c;被誉为“运行着程序的网站”之名的微信小程序…

搭建开发环境

1、安装VMware 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2、安装ubuntu 参考01【正点原子】ATK-DLRK3568嵌入式Linux系统开发手册V1.2 2.1、Ubuntu 系统设置 root 用户密码 新安装的ubuntu没有设置 root 用户密码,打开终端,输入 sudo passwd root 执…

C#使用NModbus4库创建Modbus TCP Slave(服务器)简单示例

本文续上篇Codesys—标准库ModbusTCP Master(客户端)配合C#的NModbus4库的通讯示例 链接&#xff1a;https://blog.csdn.net/wushangwei2019/article/details/136375234?spm1001.2014.3001.5501 上篇描述在Codesys端的Modbus TCP Master(客户端)的设备添加、IO映射、通讯简单…