使用Minikube+docker+harbor+k8s自动化部署 @by_TWJ

目录

  • 1. 开始
    • 1.1. 环境
    • 1.2. 测试的git仓库
    • 1.3. 离线文件
    • 1.4. 安装docker
    • 1.5. 安装docker-compose(非必要)
    • 1.6. 安装Jenkins
    • 1.7. 安装harbor
    • 1.8. 允许docker通过http访问私有仓库
    • 1.9. 修改/etc/hosts,追加自定义域名
    • 1.10. 安装Minikube
  • 2. minikube使用driver=docker方式
  • 3. minikube使用driver=none方式
    • 3.1. 安装minikube前提
      • 3.1.1. cri-docker安装
      • 3.1.2. containernetworking-plugins 安装
      • 3.1.3. 安装 conntrack-tools
      • 3.1.4. 安装crictl
      • 3.1.5. 安装which
      • 3.1.6. 安装socat
      • 3.1.7. 禁用swap
    • 3.2. 安装成功后
      • 3.2.1. 安装时的问题
      • 3.2.2. 设置别名 kubectl
      • 3.2.3. 安装minikube-dashboard
      • 3.2.4. 给apiservice配置代理外网访问(含minikube-dashboard)
  • 4. 外部端口之间通讯
    • 4.1. 使用 port-forward(临时用)
    • 4.2. 使用Pod提供的外部访问端口
    • 4.3. 使用 ingress提供的外部访问端口转发
      • 4.3.1. 安装ingress
      • 4.3.2. 例子1:
      • 4.3.3. 例子2:
  • 5. 内部端口之间通讯
    • 5.1. Pod 不会与Pod之间通讯
    • 5.2. service之间通讯
      • 5.2.1. 例子
  • 6. 挂载卷
  • 7. 补充语句
  • 8. 部署项目
    • 8.1. 部署springboot项目
      • 8.1.1. 流程
  • 9. 术语

1. 开始

建议使用driver=none方式

1.1. 环境

系统:archlinux
k8s版本:1.30.0

1.2. 测试的git仓库

https://gitee.com/alvis128/demo.git
https://gitee.com/alvis128/demo2.git

1.3. 离线文件

链接:https://pan.baidu.com/s/1G0mhdUhd0HmphZnlva2prg 
提取码:ue70

1.4. 安装docker

# 安装docker
sudo pacman -S docker
# 配置自启动服务,并立即启动docker
sudo systemctl enable --now docker
# 赋予当前用户docker权限
sudo usermod -aG docker $USER
newgrp docker

docker 配置源
/etc/docker 目录可能不存在,需要创建,所以运行命令:mkdir /etc/docker

nano /etc/docker/daemon.json
----------------------
{
 "registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
 ]
}
---------------------
# 更新daemon
systemctl daemon-reload
# 重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker

1.5. 安装docker-compose(非必要)

# 安装docker-compose
sudo pacman -S docker-compose

1.6. 安装Jenkins

默认启动端口是:8090

sudo pacman -S jenkins
# 查看启动状态
systemctl status jenkins 
# 若没有启动,则运行命令启动
systemctl start jenkins

# 赋予当前用户(jenkins)docker权限
sudo usermod -aG docker jenkins
newgrp docker

额外:
jenkins切换用户执行

# 修改
nano /usr/lib/systemd/system/jenkins.service
-------------
user=tavion
-------------
chown -R tavion:tavion /usr/lib/jenkins
chown -R tavion:tavion /var/cache/jenkins
chown -R tavion:tavion /var/log/jenkins

1.7. 安装harbor

第一步、 下载并解压
github仓库:https://github.com/goharbor/harbor/releases

# 下载并解压
wget https://github.com/goharbor/harbor/releases/download/v2.11.0-rc1/harbor-offline-installer-v2.11.0-rc1.tgz
tar zxvf harbor-offline-installer-v2.11.0-rc1.tgz
# 上面解压后,会生成harbor目录,然后我们进入目录
cd harbor

第二步、配置harbor.yml

# 复制并改名
cp harbor.yml.tmpl harbor.yml
# 第二步、修改harbor.yml文件
nano harbor.yml
----------------------
# 注释https
# 修改hosthome为本地ip地址,也可以改为域名
----------------------


修改harbor.yml文件,我们测试环境不需要用https,所以注释掉,例如:

# 修改hostname
hostname: tavion.com

http:
  port: 8180
# 下面注释https
# https related config
# https:
  # https port for harbor, default is 443
  # port: 8181
  # The path of cert and key files for nginx
  # certificate: /home/vagrant/harbor/secret/ca.crt
  # private_key: /home/vagrant/harbor/secret/ca.key
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

(后面略)

第三步、修改/etc/hosts,追加自定义域名

echo "127.0.0.1 tavion.com" >> /etc/hosts

第四步、导入harbor的images包
如果不导入,harbor会联网下载包,很慢的

docker load -i harbor.v2.11.0.tar.gz

第五步、安装harbor

./install.sh

1.8. 允许docker通过http访问私有仓库

第一种:通过修改daemon.json 方式(不推荐,因为重启后,会被其他程序修改)


# 修改/etc/docker/daemon.json ,修改结果如下:
vi /etc/docker/daemon.json
-----------------------------------------------

{
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "http://tavion.com:8380"
  ]
}
-----------------------------------------------
# 刷新daemon
systemctl daemon-reload
systemctl restart docker
# 查看docker是否正常运行,没问题
systemctl status docker


第二种: 通过在docker.service启动时添加例外

# 通过查看状态,找到docker服务执行类
systemctl status docker
# 修改服务
sudo nano /usr/lib/systemd/system/docker.service
------------------------------------------
# 修改成如下,在末尾添加例外 --insecure-registry=tavion.com
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=tavion.com
------------------------------------------


1.9. 修改/etc/hosts,追加自定义域名

前面如果运行了,这里就不用运行了

echo "127.0.0.1 tavion.com" >> /etc/hosts

1.10. 安装Minikube

打开网址:https://minikube.sigs.k8s.io/docs/start/
根据提示安装Minikube

例如linux系统安装步骤:

# 下载并安装minikube程序
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

# 使用minikube部署k8s,安装很慢,因为网络问题,如下就是成功例子
minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker --memory=2048mb  --image-mirror-country='cn'
---------------------------------------------
* minikube v1.33.1 on Arch  (vbox/amd64)
* Using the docker driver based on user configuration
* Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
* Using Docker driver with root privileges
* Starting "minikube" primary control-plane node in "minikube" cluster
* Pulling base image v0.0.44 ...
! minikube was unable to download registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.44, but successfully downloaded docker.io/kicbase/stable:v0.0.44 as a fallback image
* Creating docker container (CPUs=2, Memory=2048MB) ...
* Preparing Kubernetes v1.30.0 on Docker 26.1.1 ...
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Configuring bridge CNI (Container Networking Interface) ...
* Verifying Kubernetes components...
  - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
* Enabled addons: storage-provisioner, default-storageclass
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
---------------------------------------------
# 添加别名
alias kubectl="minikube kubectl --"
# 查看安装状态,如果安装成功,是全部都ready的,如下就是成功例子
kubectl get po -A
---------------------------------------------
NAMESPACE              NAME                                        READY   STATUS    RESTARTS       AGE
kube-system            coredns-7c445c467-5g2sl                     1/1     Running   1 (103s ago)   10m
kube-system            etcd-minikube                               1/1     Running   1 (108s ago)   11m
kube-system            kube-apiserver-minikube                     1/1     Running   1 (98s ago)    11m
kube-system            kube-controller-manager-minikube            1/1     Running   1 (108s ago)   11m
kube-system            kube-proxy-vnc94                            1/1     Running   1 (108s ago)   10m
kube-system            kube-scheduler-minikube                     1/1     Running   1 (108s ago)   11m
kube-system            storage-provisioner                         1/1     Running   2 (108s ago)   11m
kubernetes-dashboard   dashboard-metrics-scraper-b5fc48f67-28bf9   1/1     Running   1 (108s ago)   9m23s
kubernetes-dashboard   kubernetes-dashboard-779776cb65-2nqw4       1/1     Running   2 (94s ago)    9m23s
----------------------------------------------



2. minikube使用driver=docker方式

minikube 创建一个minikube的docker(1)容器,里面也有一个docker(2),服务都在这个docker(2)里执行

有缺陷:如果要添加私有仓库,需要进入到docker(2)里修改,且重启minikube后,docker(2)的修改内容丢失,这里的修改内容指的是私有仓库。不推荐使用

这里略,不推荐使用

3. minikube使用driver=none方式

部署简单

minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

3.1. 安装minikube前提

3.1.1. cri-docker安装

参考 https://mirantis.github.io/cri-dockerd/usage/install-manually/

  1. 下载二进制安装包
    打开网址,下载: https://github.com/Mirantis/cri-dockerd

下载后文件:cri-dockerd-0.3.14.amd64.tgz
解压: tar zxvf cri-dockerd-0.3.14.amd64.tgz

  1. 本地执行
git clone -b v0.3.14 --depth 1 https://github.com/Mirantis/cri-dockerd.git
  1. 进入cri-dockerd目录,并把二进制安装包cri-dockerd 放到cri-dockerd目录下

  2. 执行

install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
install packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable --now cri-docker.socket

3.1.2. containernetworking-plugins 安装

参考 https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver
查看版本:
https://github.com/containernetworking/plugins/releases

v1.5.0 为例



mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.5.0.tgz -C /opt/cni/bin

3.1.3. 安装 conntrack-tools

pacman -S conntrack-tools

3.1.4. 安装crictl

sudo pacman -S crictl

3.1.5. 安装which

sudo pacman -S which

3.1.6. 安装socat

 pacman -S socat

3.1.7. 禁用swap

# 临时禁用
sudo swapoff -a
# 永久关闭
sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

3.2. 安装成功后

3.2.1. 安装时的问题

minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

这里一般都会有网络问题,如果失败,则重新安装。

# 删除后,重新安装
minikube delete 

你也可以从我网盘里拿到minikube start…的离线安装文件: minikube_cache.tar.gz

你可以放置到~/.minikube 如下,然后继续minikube start…

mv minikube_cache.tar.gz ~/.minikube
tar zxvf minikube_cache.tar.gz

minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'

3.2.2. 设置别名 kubectl

# 修改/etc/profile 在最后添加如下
alias kubectl="minikube kubectl --"

# 更新
source /etc/profile

3.2.3. 安装minikube-dashboard

minikube dashboard

# 配置代理
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &
# 游览器访问:
http://tavion.com:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/ingressclass?namespace=default

3.2.4. 给apiservice配置代理外网访问(含minikube-dashboard)

# 配置代理:这里我们配置后台执行,所以后面添加&: 
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &

4. 外部端口之间通讯

4.1. 使用 port-forward(临时用)

# 配置映射外部端口
    # 查看Pods
    kubectl get pod
    --------------------------------
    NAME                    READY   STATUS    RESTARTS   AGE
    demo-79dfdd6f88-8c69f   1/1     Running   0          65m
    --------------------------------
    # 映射外部端口
    kubectl port-forward --address 0.0.0.0 demo-79dfdd6f88-8c69f 8190:8080
    # 游览器访问:
    curl http://localhost:8190/version

4.2. 使用Pod提供的外部访问端口

配置自定义的外部访问端口,需要在ports里添加hostPort外部访问端口

apiVersion: v1
kind: Pod
metadata:
  name: webapp 
  labels:
    app: webapp 
spec:
  # hostNetwork: true  		# 网络模式选择为使用宿主机网络,即容器所有的端口都会自动映射到宿主机上
  containers:
  - name: webapp
    image: tomat
    ports:
    - containerPort: 8080	# 容器的运行端口为 8080
      hostPort: 8081 		# 映射到宿主机的端口为 8081,如果上边设置了网络模式,则不需要加 hostPort
    # command: ['sh', '-c', 'echo The app is running! && sleep 3600']
minikube kubectl -- apply -f webapp-pod.yaml

4.3. 使用 ingress提供的外部访问端口转发

这种只提供80端口和443端口,内置nginx,通过nginx转发请求。如下:

4.3.1. 安装ingress

minikube addons enable ingress --images="KubeWebhookCertgenCreate=google_containers/kube-webhook-certgen:v20230407,KubeWebhookCertgenPatch=google_containers/kube-webhook-certgen:v20230407,IngressController=google_containers/nginx-ingress-controller:v1.8.1" --registries="IngressController=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenCreate=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenPatch=registry.cn-hangzhou.aliyuncs.com"

安装成功后,查看状态:


kubectl get pod -n ingress-nginx
----------------------------------
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-29nfv        0/1     Completed   0          146m
ingress-nginx-admission-patch-5dmvr         0/1     Completed   1          146m
ingress-nginx-controller-77b5c5fcc6-wpgzf   1/1     Running     0          146m

----------------------------------

4.3.2. 例子1:

kubectl get svc -n ingress-nginx -owide

demo-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    # 指定 Ingress Controller 的类型
    kubernetes.io/ingress.class: "nginx"
    # 指定我们的 rules 的 path 可以使用正则表达式
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 连接超时时间,默认为 5s
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    # 后端服务器回转数据超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    # 后端服务器响应超时时间,默认为 60s
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    # 客户端上传文件,最大大小,默认为 20m
    nginx.ingress.kubernetes.io/proxy-body-size: "10240m"
    # URL 重写
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: demo.tavion.com # 游览器通过域名访问,不能使用ip访问,ip访问会报404 找不到资源:http://demo.tavion.com
      http:
        paths:
          - pathType: Prefix
            path: /    # 匹配路径
            backend:
              service:
                name: demo    # deployment的名称
                port:
                  number: 8080    # deployment的端口

# 加入转发配置信息到ingress
minikube kubectl -- apply -f demo-ingress.yaml

4.3.3. 例子2:

在外网可以通过www1.westos.org访问myservice服务,也可以通过www2.westos.org访问nginx-svc服务

apiVersion: networking.k8s.io/v1betal
kind: Ingress
metadata:
    name: ingress-demo
spec:
    rules:
    - host:www1.westos.org
      http:
        paths:
        - path: /
          backend:
            serviceName: myservice
            servicePort: 80
    - host: www2.westos.org
      http:
        paths:
        - path: /
          backend:
            serviceName: nginx-svc
            servicePort: 80
    

5. 内部端口之间通讯

k8s集群中三种IP(NodeIP、PodIP、ClusterIP)介绍

  • NodeIP:Node 节点的 IP 地址,即物理机(虚拟机)的 IP 地址。
  • PodIP:Pod 的 IP 地址,即 docker 容器的 IP 地址,此为虚拟 IP 地址。
  • ClusterIP:k8s 虚拟的 Service 的 IP 地址,此为虚拟 IP 地址。

5.1. Pod 不会与Pod之间通讯

5.2. service之间通讯

service之间是可以通讯的。
Service种类、类型(ClusterIP、NodePort、LoadBalancer、ExternalName)

配置方法:
配置自定义的外部访问端口,需要在ports里添加nodePort外部访问端口

apiVersion: v1
kind: Service 
metadata: 
  name: webapp 
spec: 
  type: NodePort		# 设置 Service 类型为 NodePort
  ports: 
  - port: 8080 			# 设置 Service 暴露的端口为 8080, 即8080(svc) <-> 80(pod)
    targetPort: 8080		# 设置 Pod 的端口为 8080
    nodePort: 30081 	# 设置 NodePort 的端口为 30081,即30081(NodePort) <-> 8080(svc) <-> 80(Pod) 
  selector:
    app: webapp 
minikube kubectl -- apply -f webapp-svc.yaml
[tavion@tavion-m410 ~]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
webapp       NodePort    10.100.227.225   <none>        8080:31155/TCP   12h
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          13h
[tavion@tavion-m410 ~]$ ^C
[tavion@tavion-m410 ~]$ curl http://localhost:31155/version
test-v3.1

5.2.1. 例子

服务demo 和 服务demo2

语法:
    http://[服务名].[namespace]:[端口]/

服务状态

[tavion@tavion-m410 k8s]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
demo         NodePort    10.100.227.225   <none>        8080:31155/TCP   18h
demo2        NodePort    10.105.19.92     <none>        8080:30910/TCP   15m
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          18h

服务demo2 可以通过 http://demo.default:8080/ 访问demo

6. 挂载卷

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: tavion.com:8380/repos/demo:${version}
          ports:
            - containerPort: 8080
#          volumeMounts: # 映射到docker容器的卷目录或文件
#            - name: nginx-volume-dir  # 映射的卷别名
#              mountPath: /var/log/nginx # 映射到容器的目录
#            - name: nginx-volume-file # 映射的卷别名
#              mountPath: /var/log/nginx/access2.log # 映射到容器的目录
#      volumes:  # 挂载系统的卷
#        - name: nginx-volume-dir  # 挂载的卷的别名
#          hostPath:
#            path: /path/on/host   # 挂载的卷路径
#        - name: nginx-volume-file # 挂载的卷的别名
#          hostPath:
#            path: /path/on/host/access2.log # 挂载的卷文件

7. 补充语句

访问pod容器,例如:

kubectl exec it mynginx -c tomcat -- sh
kubectl exec it mynginx sh

更新镜像

kubectl set image deployment my-tomcat tomcat=tomcat:10.1.11 --record

回退镜像

kubectl rollout history deploy my-tomcat

8. 部署项目

8.1. 部署springboot项目

https://gitee.com/alvis128/demo.git
https://gitee.com/alvis128/demo2.git

8.1.1. 流程

安装插件:verion number
在这里插入图片描述

重启jenkins
新建Item
在这里插入图片描述
配置拉取仓库
在这里插入图片描述
构造环境,添加版本信息
在这里插入图片描述
添加Build Steps操作
在这里插入图片描述
Build Steps 步骤选项:
在这里插入图片描述
Build Steps -1 ,编译,因为我是用gradle编译的,你们可能是maven
在这里插入图片描述
Build Steps -2 ,发布到harbor仓库中
在这里插入图片描述

Build Steps -3 ,使用k8s 部署springboot项目
在这里插入图片描述
保存后,然后运行BuildNow
在控制台查看日志
在这里插入图片描述

9. 术语

k8s 里面的一些术语:

  • deployment 部署项目,用来管理pod节点,可以控制pod节点启动、关闭、添加pod等等(部署)
  • pod 是服务的最小单位,每个pod里面都有一个docker。(服务)
  • service 是管理pod服务之间的通讯关系的,(网络方面)
  • ingress 是管理service服务之间的通讯关系(网络方面)

kubernetes里有三张不同的网络,每种IP地址,就代表一个不同的寻址空间:

  • Node IP:Node节点的IP地址
  • Pod IP:Pod的IP地址
  • Cluster IP:内部或集群内访问Service的IP地址
  • External IP是 为了解决如何从外部访问 service 服务的问题。

简写

  • service - svc
  • podes - po
    例如 : kubectl get svc 等同于 kubectl get service

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

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

相关文章

【JavaScript】ECMAS6(ES6)新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【JavaScript】 文章目录 &#x1f33f; 引言一、 let 和 const - 变量声明的新方式 &#x1f31f;&#x1f4cc; var的问题回顾&#x1f4cc; let的革新&#x1f4cc; const的不变之美 二、 Arro…

CasaOS玩客云安装全平台高速下载器Gopeed并实现远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Spring-Cloud-CircuitBreaker-Resilience4j (3.1.1)

介绍 Resilience4j 是一个专为函数式编程而设计的轻量级容错库。Resilience4j 提供高阶函数&#xff08;装饰器&#xff09;&#xff0c;以增强任何功能接口、lambda 表达式或方法引用&#xff0c;包括断路器、速率限制器、重试或隔板。您可以在任何函数接口、lambda 表达式或…

每日复盘-20240530

今日重点关注&#xff1a; 20240530 六日涨幅最大: ------1--------300637--------- 扬帆新材 五日涨幅最大: ------1--------300637--------- 扬帆新材 四日涨幅最大: ------1--------300637--------- 扬帆新材 三日涨幅最大: ------1--------301129--------- 瑞纳智能 二日涨…

Stable Diffusion AI绘画:从创意词汇到艺术图画的魔法之旅

文章目录 一、Stable Diffusion的工作原理二、从提示词到模型出图的过程三、Stable Diffusion在艺术创作中的应用《Stable Diffusion AI绘画从提示词到模型出图》内容简介作者简介楚天 目录前言/序言本书特色特别提示 获取方式 在科技的飞速发展中&#xff0c;Stable Diffusion…

读取YUV数据到AVFrame并用多线程控制帧率

文件树&#xff1a; 1.xvideo_view.h class XVideoView { public:// 像素格式枚举enum Format { RGBA 0, ARGB, YUV420P };// 渲染类型枚举enum RenderType { SDL 0 };// 创建渲染对象的静态方法static XVideoView* Create(RenderType type SDL);// 绘制帧的方法bool DrawF…

Word下一页怎么操作?6个操作方法分享!

在使用Word进行文档编辑时&#xff0c;经常需要设置分页、跳转页面或者对页面进行特定的布局调整。其中&#xff0c;“下一页”这一操作通常涉及到页面布局、分页符的插入、页面跳转等多个方面。 Word下一页怎么操作&#xff1f;很简单&#xff0c;方法已经准备好啦&#xff0…

Python代码:二十五、有序的列表

1、题目 创建一个依次包含字符串P、y、t、h、o和n的列表my_list&#xff0c;先使用sorted函数对列表my_list进行临时排序&#xff0c;第一行输出排序后的完整列表&#xff0c;第二行输出原始的列表。再使用sort函数对列表my_list进行降序排序&#xff0c;第三行输出排序后完整…

20240531瑞芯微官方Toybrick TB-RK3588开发板在Debian11下的关机尝试

20240531瑞芯微官方Toybrick TB-RK3588开发板在Debian11下的关机尝试 2024/5/31 9:10 https://t.rock-chips.com/forum.php?modforumdisplay&fid51 在Toybrick的论坛以关键词搜索&#xff1a;关机 可以找到抱怨这个的人很多&#xff01; &#xff08;一&#xff09;【失败…

深入分析 Android Service (三)

文章目录 深入分析 Android Service (三)1. Service 与 Activity 之间的通信2. 详细示例&#xff1a;通过绑定服务进行通信2.1 创建一个绑定服务2.2 绑定和通信 3. 优化建议4. 使用场景5. 总结 深入分析 Android Service (三) 1. Service 与 Activity 之间的通信 在 Android …

linux nohup命令详解:持久运行命令,无视终端退出

nohup &#xff08;全称为 “no hang up”&#xff09;&#xff0c;用于运行一个命令&#xff0c;使其在你退出 shell 或终端会话后继续运行。 基本语法 nohup command [arg1 ...] [&> output_file] &command 是你想要运行的命令。[arg1 ...] 是该命令的参数。&am…

Spring Boot 整合 spring-boot-starter-mail 实现邮件发送和账户激活

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Wireshark抓包后的报文太大,如何拆分?

背景&#xff1a;抓包获取到一个400多兆的网络数据包.pcapng文件&#xff0c;使用wireshark软件可以正常打开。但需要把文件导出为.json文件&#xff0c;从而方便对报文内容做过滤分析。使用wireshark自带的导出功能导出后发现生成的.json文件大小为2G多&#xff0c;使用notepa…

Java-----Comparable接口和Comparator接口

在Java中&#xff0c;我们会经常使用到自定义类&#xff0c;那我们如何进行自定义类的比较呢? 1.Comparable接口 普通数据的比较 int a10;int b91;System.out.println(a<b); 那自定义类型可不可以这样比较呢&#xff1f;看一下代码 我们发现会报错&#xff0c;因为自定义…

电机控制系列模块解析(25)—— 过压抑制与欠压抑制

一、概念解析 变频器作为一种重要的电机驱动装置&#xff0c;其内置的保护功能对于确保系统安全、稳定运行至关重要。以下是关于变频器过压抑制、欠压抑制&#xff08;晃电抑制&#xff09;、发电功率限制、电动功率限制等保护功能的详细说明&#xff1a; 过压抑制 过压抑制是…

YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…

golang web补充知识:单元测试

文章目录 golang 单元测试引言单元测试的重要性Go语言单元测试的优势 Go语言单元测试基础testing包辅助测试函数运行单元测试 Mock技术Mock简介GoMock框架介绍编写Mock代码使用Mock进行单元测试 面向测试编程&#xff08;TDD&#xff09;TDD简介TDD的优势TDD的基本步骤Go语言中…

discuz如何添加主导航

大家好&#xff0c;今天教大家怎么样给discuz添加主导航。方法其实很简单&#xff0c;大家跟着我操作既可。一个网站的导航栏是非常重要的&#xff0c;一般用户进入网站的第一印象就是看网站的导航栏。如果大家想看效果的话可以搜索下网创有方&#xff0c;或者直接点击查看效果…

大数据中的电商数仓项目:探秘业务的核心

我学习完一个电商数仓的项目和电影实时推荐项目&#xff0c;便兴冲冲的去面试大数据开发岗&#xff0c;在面试的时候&#xff0c;面试官总是喜欢问&#xff0c;聊聊你为什么要做这个项目以及你这个项目有哪些业务&#xff1f; 我心想&#xff0c;为什么要做这个业务&#xff1f…

重学java 52.集合 斗地主案例

你太锐利了&#xff0c;这些年来&#xff0c;风霜雨雪&#xff0c;踉跄清冷&#xff0c;我相信你所有的苦楚 —— 24.5.30 1 案例介绍 按照斗地主的规则&#xff0c;完成洗牌发牌的动作。 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏&#xff0c;三人交替摸牌&#xff0c…