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

CKA认证 | Day4 K8s管理应用生命周期(下)

第四章 K8s管理应用程序生命周期(下)

1、Pod对象

1.1 Pod 的基本概念

Pod 是 Kubernetes 中最基本和最重要的概念之一,是一个逻辑抽象概念,Kubernetes创建和管理的最小单元, 一个Pod由一个容器或多个容器组成。它简化了容器的部署、管理和扩展。通过 Pod可以轻松地将应用程序的不同组件组织在一起,确保它们共享资源和网络环境。

Pod 的主要特点:

① 容器共享网络和存储

  • 共享网络命名空间:Pod 中的所有容器共享同一个网络命名空间,这意味着它们可以使用 localhost 相互通信。
  • 共享存储卷:Pod 中的容器可以共享存储卷,便于数据交换和持久化。

② 生命周期管理

  • Pod 生命周期:Pod 的生命周期由 Kubernetes 管理,包括创建、运行、更新和终止。
  • 健康检查:Kubernetes 可以通过健康检查(Liveness Probes 和 Readiness Probes)自动管理Pod 的健康状态。

③ 自动调度

  • 节点调度:Kubernetes 自动将 Pod 调度到集群中的适当节点上,基于资源需求、策略和约束条件。
  • 高可用性和容错:如果节点发生故障,Kubernetes 会自动将 Pod 重新调度到其他节点上,确保服务的高可用性。

1.2 Pod 存在的意义

Pod主要用法:

  1. 主容器(Main Container):主要应用程序容器,通常是一个长时间运行的服务。又或者是运行单个容器,最常见的用法可以将Pod看做是单 个容器的抽象封装;
  2. 辅助容器(Sidecar Container):辅助容器,用于支持主容器的功能,如日志收集、监控代理等。又或者是运行多个容器: 通过在Pod中定义专门容器来执行主业务容器需要的辅助工作,这样好处是将辅助功能同主业务 容器解耦,实现独立发布和能力重用。

如某些场景下,有部分代码考虑是否在源代码的基础上增加,随着用户量的上升可能导致源代码的臃肿。前期可以将非核心的功能进行解耦出来,对以后业务的扩展会有很多帮助,例如:

• 日志收集

• 应用监控

1.3 Pod 资源共享实现机制

① 共享网络:将业务容器网络加入到“负责网络的容器 infa container”实现网络共享

解释:该网络容器会在创建Pod之前先创建,创建完成后其它容器会加入到这个容器实现网络共享,因为都在同一个网络协议栈(容器共享网络命名空间)

补充:Pod为k8s中的最小调度单元,所以一个Pod中如果存在多个容器,使用的IP,即POD IP,也是唯一的一个IP,可以通过这个IP访问Pod里面任何一个容器,IP是共享的。

共享网络YAML示例:

# kubectl apply -f pod-net-test.yaml
apiVersion: v1
kind: Pod
metadata:labels:app: testname: pod-net-test namespace: default
spec:containers:- image: busybox name: bscommand: ["/bin/sh","-c","sleep 12h"]- image: nginxname: web
# 测试
# kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP              NODE             NOMINATED NODE   READINESS GATES
pod-net-test   2/2     Running   0          42m   10.244.114.27   k8s-node2-1-73   <none>           <none># 进入容器
# kubectl exec -it pod-net-test -- bash   //默认会进入其中一个
Defaulted container "web" out of: web, bs# 指定容器进入
# kubectl exec -it pod-net-test -c web -- bash
root@pod-net-test:/# curl -i 127.0.0.1    //访问容器本地IP,可获得Nginx信息# kubectl exec -it pod-net-test -c bs -- sh   //busybox不支持bash终端
/ # wget 127.0.0.1    //可获得Nginx的index.html页面
/ # netstat -nlptu | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 :::80                   :::*                    LISTEN      -

结论:在 bs 容器中可看到监听 80端口,但是没有相关服务进程,通过127.0.0.1访问,即可得到nginx容器的index.html 页面


② 共享存储:容器通过数据卷共享数据

共享存储YAML示例:

# kubectl apply -f pod-volume-test.yaml
apiVersion: v1
kind: Pod
metadata:labels:app: testname: pod-volume-test namespace: default
spec:containers:- image: busybox name: testcommand: ["/bin/sh","-c","sleep 12h"]volumeMounts:         # 数据卷挂载- name: log           # 指定挂载的数据卷名称mountPath: /data    # 数据卷挂载到容器中的路径- image: nginxname: webvolumeMounts:- name: logmountPath: /usr/share/nginx/htmlvolumes:          # 定义数据卷- name: log       # 数据卷名称emptyDir: {}    # 数据卷类型
# 测试
# kubectl get pods
NAME              READY   STATUS    RESTARTS   AGEpod-volume-test   2/2     Running   0          17m
# 进入rs容器创建文件
[root@k8s-master-1-71 ~]# kubectl exec -it pod-volume-test -c bs -- sh
/ # cd /data/;touch 1.txt
# 进入web容器查看
# kubectl exec -it pod-volume-test -c web -- bashroot@pod-volume-test:/# ls /usr/share/nginx/html/1.txt

1.4 Pod 的生命周期

① Pod 创建

  • 用户通过 YAML 文件或命令行工具(如 kubectl)创建 Pod。
  • Kubernetes 调度器将 Pod 分配到合适的节点上。

② 运行

  • 容器启动:节点上的容器运行时(如 Docker)启动 Pod 中的容器。
  • 健康检查:Kubernetes 定期检查容器的健康状态,确保它们正常运行。

③ 更新

滚动更新:通过更新 Pod 的定义,Kubernetes 可以滚动更新容器镜像或配置。
示例:kubectl set image pod/multi-container-pod web=nginx:1.19.10

④ Pod 终止:

  • 用户可以通过命令行工具删除 Pod,或者 Kubernetes 根据策略自动删除 Pod。
  • 删除 Pod 时,Kubernetes 会清理相关的资源,如容器和存储卷

1.5 管理命令

1)创建Pod
  • 命令:kubectl run --image=nginx
  • 导出YAML:kubectl run --image=nginx --dry-run=clinet -o yaml > xxx.yaml
# kubectl apply -f pod.yaml
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: container1image: nginx- name: container2image: centos

注意:kubectl create deployment 是通过控制器去创建Pod,受控制器管理,可控制副本数,而kubectl run只能创建一个Pod,不具备控制器有的升级、回滚、扩容、多副本的特性

2)查看Pod
  • 命令:kubectl get pods
  • 命令:kubectl get pods -o wide
  • 命令:kubectl describe pod
3)查看日志
  • 命令:kubectl logs [-c CONTAINER]
  • 命令:kubectl logs [-c CONTAINER] -f    //-f 实时查看
# kubectl logs pod-volume-test
# kubectl logs pod-volume-test -c web
# kubectl logs pod-volume-test -c web -f
4)进入容器终端
  • 命令:kubectl exec -it [-c CONTAINER] -- bash
5)通过expose暴露Pod
  • 命令:kubectl expose pod --port=service端口 --target-port=应用服务端口 --type=NodePort
# kubectl expose pod pod-net-test --port=80 --target-port=80 --type=NodePort
# kubectl get svc
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          16d
pod-net-test    NodePort    10.108.168.104   <none>        80:31513/TCP     19s
6)删除Pod
  • 命令:kubectl delete pod
# kubectl delete pods pod-volume-test
pod "pod-volume-test" deleted

2、应用自修复(重启策略+健康检查)

背景:在kubectl get pods时,提示STATUS是Running状态,只能告知创建者Pod创建成功,但不代表Pod容器服务是正常的,为了进一步解决,提供了重启策略+健康检查

1)重启策略(restartPolicy):

  • Always:当容器终止退出后,总是重启容器,默认策略(场景:常驻进程,即始终保持运行,例如nginx、mysql,服务挂掉即重启容器
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器(场景:周期性进程,即隔一段时间运行一次,例如数据库备份
  • Never:当容器终止退出,从不重启容器(场景:临时性进程,即偶尔执行一次,没有规律即不能用定时任务去执行,一般为人为或别的程序驱动,例如数据离线处理,如果再重启一次对上一次任务的数据产生冲突等

在Pod的YAML文件中可以看到字段:restartPolicy:Always

2)健康检查有以下3种类型(Probe探针):

  1. livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod 的restartPolicy来操作。(重建的容器还是原来的容器,非副本集拉起的容器)
  2. readinessProbe(就绪检查):如果检查失败,Kubernetes会把 Pod从service endpoints负载均衡中剔除。(只是从LB剔除不是删除节点)
  3. startupProbe(启动检查):启动检查成功才由存活检查接手,用于保护 慢启动容器,防止启动慢的容器检查没通过不断重启

支持以下三种检查方法:

  • httpGet:发送HTTP模拟请求,返回200-400范围状态码为成功。(准确度比较高)
  • exec:执行Shell命令返回状态码是0为成功。
  • tcpSocket:发起TCP Socket建立成功。

官网:Configure Liveness, Readiness and Startup Probes | Kubernetes


示例1:模拟httpGet请求检查方法

# kubectl apply -f probe-demo.yaml
apiVersion: v1
kind: Pod
metadata:name: probe-demo
spec:containers:- name: webimage: nginxlivenessProbe:             # 存活检查,重启容器httpGet:path: /port: 80initialDelaySeconds: 5   # 启动容器后多少秒健康检查periodSeconds: 10        # 以后每间隔多少秒检查一次readinessProbe:            # 就绪检查,从Service中剔除容器httpGet:path: /port: 80initialDelaySeconds: 5   # 启动容器后多少秒健康检查periodSeconds: 10        # 以后每间隔多少秒检查一次

注:livenessProbe与readinessProbe的配置参数一样

# 通过创建Pod方式测试
[root@k8s-master-1-71 ~]# kubectl apply -f probe-demo.yaml[root@k8s-master-1-71 ~]# kubectl get pods -o wide
NAME           READY   STATUS    RESTARTS   AGE     IP              NODE             NOMINATED NODE   READINESS GATES
probe-demo     1/1     Running   0          16m     10.244.114.28   k8s-node2-1-73   <none>           <none>[root@k8s-master-1-71 ~]# kubectl expose pods probe-demo --port=80 --target-port=80 --type=NodePort[root@k8s-master-1-71 ~]# kubectl get service
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
probe-demo     NodePort    10.99.233.38     <none>        80:30168/TCP   83s# 打开两个终端进行观察,通过删除Pod的默认首页导致服务挂掉,模拟测试 readinessProbe就绪检查
# 终端1:
[root@k8s-master-1-71 ~]# kubectl get ep -w      //-w 实时查看service后端关联的Pod IP
# 终端2:
[root@k8s-master-1-71 ~]# kubectl exec -it probe-demo -- bash
root@probe-demo:/# rm -rf /usr/share/nginx/html/index.html
root@probe-demo:/# command terminated with exit code 137    //删除后,readiness就绪检查检测到服务异常,讲当前容器自动退出并剔除Service,根据livenessProbe会按照restartPolicy策略重启容器

 # 终端1:可以看到当时probe-demo的Pod,又重新拉起了一个Pod,如图所示:

[root@k8s-master-1-71 ~]# kubectl get pods
NAME           READY   STATUS    RESTARTS      AGEprobe-demo     1/1     Running   1 (33s ago)   22m    //查看Pod信息时,也可以明显发现有一次RESTARTS的重启记录# 查看日志,可发现同一时间会有2条健康检查日志,因为健康检查功能是独立的
[root@k8s-master-1-71 ~]# kubectl logs probe-demo
192.168.1.73 - - [04/Mar/2023:23:29:11 +0000] "GET / HTTP/1.1" 200 615 "-" "kube-probe/1.26" "-"
192.168.1.73 - - [04/Mar/2023:23:29:11 +0000] "GET / HTTP/1.1" 200 615 "-" "kube-probe/1.26" "-"
192.168.1.73 - - [04/Mar/2023:23:29:14 +0000] "GET / HTTP/1.1" 200 615 "-" "kube-probe/1.26" "-"
192.168.1.73 - - [04/Mar/2023:23:29:14 +0000] "GET / HTTP/1.1" 200 615 "-" "kube-probe/1.26" "-"
...

示例2:执行Shell命令的检查方法

livenessProbe:exec:command:- cat- /tmp/healthy

示例3:端口探测的检查方法

livenessProbe:tcpSocket:port: 80

3、环境变量

创建 Pod 时,可以为其下的容器设置环境变量。

应用场景:

  • 容器内应用程序获取Pod信息(通过环境变量将 Pod 信息呈现给容器)
  • 容器内应用程序通过用户定义的变量改变默认行为

变量值几种定义方式:

  1. 自定义变量值
  2. 变量值从Pod属性获取
  3. 变量值从Secret、ConfigMap获取

示例:通过YAML文件定义变量,将变量注入到Pod容器当中:自定义变量、POD属性获取

网址参考:通过环境变量将 Pod 信息呈现给容器 | Kubernetes

apiVersion: v1
kind: Pod
metadata:name: pod-envars
spec:containers:- name: testimage: busyboxcommand: [ "sh", "-c", "sleep 36000"]env:# 变量值从Pod属性获取- name: MY_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: MY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: ABC        # 自定义变量值value: "123456"

注意:自定义变量时,如果value的值是字符串,需要使用引号

# 测试:进入容器
[root@k8s-master-1-71 ~]# kubectl exec -it pod-envars -- sh
/ # env    //查看我当前有的环境变量
/ # env | grep ABC
ABC=123456
/ # echo $MY_NODE_NAME
k8s-node2-1-73
/ # echo $MY_POD_NAME
pod-envars
/ # echo $MY_POD_NAMESPACE
default
/ # echo $MY_POD_IP
10.244.114.30

4、Init container

Init Container:顾名思义,用于初始化工作,执行完就结束,可以理解为一次性任务。

  • 支持大部分应用容器配置,但不支持健康检查
  • 优先于应用容器执行

应用场景:

  • 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器
  • 初始化配置:例如给应用容器准备配置文件

示例:部署一个web网站,网站程序没有打到镜像中,而是希望从代码 仓库中动态拉取放到应用容器中。

apiVersion: v1
kind: Pod
metadata:name: init-demo
spec:initContainers:       # 初始化容器(将网页进行下载到共享存储中)- name: downloadimage: busyboxcommand:- wget- "-O"- "/opt/index.html"- http://www.aliangedu.cnvolumeMounts:- name: wwwrootmountPath: /optcontainers:           # 主容器- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlvolumes:- name: wwwrootemptyDir: {}

# 测试

[root@k8s-master-1-71 ~]# kubectl get pods
NAME        READY   STATUS    RESTARTS   AGE
init-demo   1/1     Running   0          38s
# 解释:初始化容器完成任务就消失
[root@k8s-master-1-71 ~]# kubectl label pods init-demo app=web[root@k8s-master-1-71 ~]# kubectl expose pods init-demo --port=80 --target-port=80 --type=NodePort
[root@k8s-master-1-71 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
init-demo    NodePort    10.98.174.76   <none>        80:31590/TCP   25s[root@k8s-master-1-71 ~]# curl 192.168.1.71:31590<title>阿良教育「官网」-专业DevOps、云计算运维、Kubernetes容器运维、云原生、Golang运维开发培训机构!</title>
...

回顾:目前接触的Pod中会有以下几种类型的容器:

  1. Infrastructure Container:基础容器 (维护整个Pod网络空间,共享网络命名空间)
  2. InitContainers:初始化容器 (先于业务容器开始执行)
  3. Containers:业务容器 (并行启动)

5、静态Pod

背景:Kubeadm搭建集群就是用Pod启动组件,而在不搭建完整的k8s集群之前就可以创建Pod,即静态Pod。

静态Pod特点:

  • 静态Pod由特定节点上的kubelet管理维护
  • 不能使用控制器
  • Pod名称标识当前节点名称(即在哪个节点创建就有当前节点的名称标识)

在kubelet配置文件启用静态Pod的参数:

vi /var/lib/kubelet/config.yaml
...
staticPodPath: /etc/kubernetes/manifests
...

注:将部署的Pod yaml放到/etc/kubernetes/manifests目录会由kubelet自动创建。

测试:

[root@k8s-node1-1-72 ~]# cd /etc/kubernetes/manifests/[root@k8s-node1-1-72 manifests]# kubectl run web-test --image=nginx -o yaml --dry-run=client > web-test.yaml[root@k8s-node1-1-72 manifests]# ls
web-test.yaml
[root@k8s-node1-1-72 manifests]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGEweb-test-k8s-node1-1-72   1/1     Running   0          108s# 删除静态Pod
[root@k8s-node1-1-72 manifests]# rm -rf web-test.yaml
[root@k8s-node1-1-72 manifests]# kubectl get pods
NAME        READY   STATUS    RESTARTS   AGE
init-demo   1/1     Running   0          24m

课后作业

1、创建一个pod,其中运行着nginx、redis、memcached、consul 4个容器

2、在节点上配置kubelet托管启动一个pod

  • 节点:k8s-node1
  • pod名称:web
  • 镜像:nginx

3、检查容器中文件是否创建,如果没有被检测到pod重启

  • 文件路径:/tmp/test.sock

小结:

本篇为 【Kubernetes CKA认证 Day4】的学习笔记,希望这篇笔记可以让您初步了解到 Pod是什么、Pod常用管理命令、重启策略及健康检查、创建 Pod 时可以为其下的容器设置环境变量等;课后还有扩展实践,不妨跟着我的笔记步伐亲自实践一下吧!


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

相关文章:

CKA认证 | Day4 K8s管理应用生命周期(下)

第四章 K8s管理应用程序生命周期&#xff08;下&#xff09; 1、Pod对象 1.1 Pod 的基本概念 Pod 是 Kubernetes 中最基本和最重要的概念之一&#xff0c;是一个逻辑抽象概念&#xff0c;Kubernetes创建和管理的最小单元&#xff0c; 一个Pod由一个容器或多个容器组成。它简…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

《生成式 AI》课程 第3講 CODE TASK执行文章摘要的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 任务1:总结 1.我们希望你创建一个可以执行文章摘要的机器人。 2.设计一个提示符&#xff0c;使语言模型能够对文章进行总结。 model: gpt-4o-mini,#gpt-3.5-turbo, import…...

Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 在充满活力与激情的校园生活中&#xff0c;校运会不仅是…...

一种简单高效的RTSP流在线检测方法,不需要再过渡拉流就可以获取设备状态以及对应音视频通道与编码格式

平台如何检测一路RTSP流是否在线&#xff1f; 在之前的流媒体平台方案中&#xff0c;我们都是通过定时RTSP拉流的方式&#xff0c;走一个完整的RTSP流程&#xff1a;包括OPTIONS、DESCRIBE、SETUP、PLAY、RTP收流&#xff0c;这种方式去取流&#xff0c;然后取到流之后进行流解…...

HTML飞舞的爱心

目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色…...

银行卡 OCR 识别 API 接口的发展前景

随着智能手机的广泛普及以及互联网的迅猛发展&#xff0c;“互联网 ” 时代的移动支付已然开启了智慧生活的崭新蓝图。移动支付要求进行实名认证并绑定银行卡&#xff0c;然而传统的手工输入银行卡号不但速度缓慢、容易出错&#xff0c;还极大地降低了用户体验。银行卡 OCR 识别…...

python tkinter 控件实现鼠标悬停提示,提示文本动态展示

展示效果 全部代码和使用示例 # _*_ coding:utf-8 _*_ import tkinter as tk import pyautoguiscreen_width, screen_height pyautogui.size()class WidgetTip:"""鼠标悬停提示"""def __init__(self, widget, text):self.widget widgetself.…...

【spark-spring boot】学习笔记

目录 说明RDD学习RDD介绍RDD案例基于集合创建RDDRDD存入外部文件中 转换算子 操作map 操作说明案例 flatMap操作说明案例 filter 操作说明案例 groupBy 操作说明案例 distinct 操作说明案例 sortBy 操作说明案例 mapToPair 操作说明案例 mapValues操作说明案例 groupByKey操作说…...

Delphi ADO组件中的 ADOTable、ADOQurey 无SQL语句实现增、删、改、查

准备&#xff1a; 数据库是Acess数据库 1.放一个 Adoconnection1到 表单上,设置好数据连接字符串 并 设置 connected 属性 为 true 2 设置 adoquery1的connection 属性为 adoconnection1 3 设置 adoquery1的 sql 属性为 select * from 表名 4 设置 adoquery1的 active true …...

力扣整理版九:贪心算法

局部最优 全局最优 局部最优可以推出全局最优 并且想不出反例 ----------------------------- (1) 455 分发饼干 (2) 1005 k次取反后最大化的数组和 (3) 860 柠檬水找零 (4) 376 摆动序列 (5) 738 单调递增的数字 (6) 122 买卖股票的最佳时机2 (7) 135 分发糖果 (8…...

ffmpeg 视频滤镜:高斯模糊-gblur

滤镜描述 gblur 官网地址 > FFmpeg Filters Documentation 这个滤镜会将视频变得模糊。 滤镜使用 参数 gblur AVOptions:sigma <float> ..FV.....T. set sigma (from 0 to 1024) (default 0.5)steps <int> ..FV.....T…...

利用D3.js实现数据可视化的简单示例

目录 一、D3.js选择器 二、数据绑定相关方法 三、DOM操作方法 四、事件监听 五、实现折线图案例 1.首先引入 D3.js 库。 2.然后获取数据&#xff08;这里定义了销售数据数组作为数据&#xff09;。 3.接着创建一个 svg 元素作为画布 4.定义 x 轴和 y 轴的比例尺&#…...

Top 10 Tools to Level Up Your Prompt Engineering Skills

此文章文字是转载翻译&#xff0c;图片是自已用AI 重新生成的。文字内容来自 https://www.aifire.co/p/top-10-ai-prompt-engineering-tools 供记录学习使用。 Introduction to AI Prompt Engineering AI Prompt Engineering 简介 1&#xff0c;Prompt Engineering 提示工程…...

sed awk 第二版学习(十一)—— 交互式拼写检查器 spellcheck.awk

目录 1. 脚本代码 2. 执行情况 3. 代码详解 &#xff08;1&#xff09;BEGIN 过程 &#xff08;2&#xff09;主过程 &#xff08;3&#xff09;END 过程 &#xff08;4&#xff09;支持函数 4. 附加说明 这是一个基于 UNIX spell 程序的名为 spellcheck 的 awk 脚本&a…...

Android 应用测试的各种环境问题记录(Instrumentation测试)

报错记录 failed to configure packages targetSdkVersion&#xff08;未解决&#xff09; failed to configure com.demo.test.SettingsActivityTest.testOnCreate_withNullSavedInstanceState: Package targetSdkVersion34 > maxSdkVersion32 java.lang.IllegalArgumentE…...

python爬虫案例——猫眼电影数据抓取之字体解密,多套字体文件解密方法(20)

文章目录 1、任务目标2、网站分析3、代码编写1、任务目标 目标网站:猫眼电影(https://www.maoyan.com/films?showType=2) 要求:抓取该网站下,所有即将上映电影的预约人数,保证能够获取到实时更新的内容;如下: 2、网站分析 进入目标网站,打开开发者模式,经过分析,我…...

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…...

YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换

今天我要向大家介绍一款引人注目的产品—— YB2503HV 100V 3A SOP8内置MOS 高效率降压IC。这款单片集成芯片具备可设定输出电流的开关型降压恒压驱动器功能&#xff0c;可广泛应用于电动车、太阳能设备、电子电池充电等领域。让我们一起来看看它的特点和应用吧&#xff01; 首先…...

Day47 | 动态规划 :线性DP 最长公共子序列最长公共子数组

Day47 | 动态规划 &#xff1a;线性DP 最长公共子序列&&最长公共子数组 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 最长公共子序列 编辑距离_哔哩哔哩_bilibili 动态规划学习&#xff1a; 1.思考…...

【山大909算法题】2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse&#xff0c;该函数对链表进行逆序操作&#xff08;将链表中的结点按与原序相反的顺序连接&#xff09;&#xff0c;要求逆序操作就地进行&#xff0c;不分配…...

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part2

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Spring 来源背景说明 该文档主要介绍了国立台湾大学&#xff08;NTU&#xff09;2024 年春季 “生成式人工智能&#xff08;GenAI&#xff09;” 课程的作业 5&#…...

【机器学习】如何使用Python的Scikit-learn库实现机器学习模型,并对数据进行预处理和特征缩放以提高模型性能?

使用Python的Scikit-learn库可以方便地实现机器学习模型&#xff0c;并对数据进行预处理和特征缩放以提高模型性能。以下是一个典型的工作流程&#xff0c;包括数据加载、预处理、特征缩放、模型训练和评估&#xff1a; 1. 安装Scikit-learn 确保已安装Scikit-learn库&#x…...

【SpringCloud详细教程】-04-服务容错--Sentinel

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…...

计算机学习

不要只盯着计算机语言学习&#xff0c;你现在已经学习了C语言和Java&#xff0c;暑假又规划学习Python&#xff0c;最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言&#xff0c;沿着这个方向继续往后学习知识就行。计算机语言是学不完的&#xff0c;而未来就…...

CSS - CSS One-Line

1. aspect-ratio 描述: 用于定义元素的宽高比&#xff0c;简化了以往使用“填充黑客”的方法。只需指定一个比率&#xff0c;浏览器会自动调整元素的尺寸 案例: .aspect-ratio-hd {aspect-ratio: 16/9; } .aspect-ratio-square {aspect-ratio: 1; /* 正方形 */ }2. object-…...

【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;准确引导ChatGPT创建爆款小红书文案GPTs指令案例&#x1f4af; 高效开发GPTs应用的核心原则明确应用场景和目标受众构建多样化风格模板提问与引…...

Redis主从架构

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的键值对存储系统&#xff0c;广泛应用于缓存、消息队列、实时分析等场景。为了提高系统的可用性、可靠性和读写性能&#xff0c;Redis提供了主从复制&#xff08;Master-Slave Replication&#xf…...

无人机探测:光电侦测核心技术算法详解!

核心技术 双光谱探测跟踪&#xff1a; 可见光成像技术&#xff1a;利用无人机表面反射的自然光或主动光源照射下的反射光&#xff0c;通过高灵敏度相机捕捉图像。该技术适用于日间晴朗天气下的无人机探测&#xff0c;具有直观、易于识别目标的特点。 红外成像技术&#xff1…...

34 基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…...

Day 26

进入贪心算法 基础理论 1、什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 Eg&#xff1a;一堆钞票&#xff0c;你可以拿走 10 张&#xff0c;想达到最大金额&#xff0c;要怎么拿&#xff1f; –》指定每一次拿最大的&#xff0…...

11.25c++继承、多态

练习&#xff1a; 编写一个 武器类 class Weapon{int atk; }编写3个武器派生类&#xff1a;短剑&#xff0c;斧头&#xff0c;长剑 class knife{int spd; }class axe{int hp; }class sword{int def; }编写一个英雄类 class Hero{int atk;int def;int spd;int hp; public:所有的…...

ThinkPad t61p 作SMB服务器,打印服务器,pc ,android ,ipad利用此服务器互传文件

1.在t61p上安装win7 2,配置好smb 服务 3.再安装好打印驱动程序 4.pc与win7利用系统的网络互相发现,映射为硬盘使用。 5.android&#xff0c;ipad安装ES文件浏览器访问win7 共享文件夹&#xff0c;互传文件。 6.android手机安装FE文件浏览器&#xff0c;可以利用花生壳外网…...

数据结构单链表,顺序表,广义表,多重链表,堆栈的学习

单链表 比如一个多项式&#xff0c;主要包括x的系数&#xff0c;x的指数&#xff0c;那么可以创建一个一维数组来存储它的系数和指数&#xff0c;用数组下标来表示。它的系数可以用数组下标对应的数组元素来储存。 可是这样储存会浪费空间所以采用单链表形式来存储。 即创建一…...

uniapp内嵌的webview H5与应用通信

H5端&#xff1a; 1、找到index.html引入依赖 <script type"text/javascript" src"https://unpkg.com/dcloudio/uni-webview-js0.0.3/index.js"></script> 2、在需要通讯处发送消息 uni.postMessage({data:{code:200,msg:"处理完成&q…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日&#xff0c;芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位&#xff1b;并与香港科技大学校董会主席沈向洋展开深刻对话&#xff0c;涉及人工智能&#xff08;AI&#xff09;、计算力、领导…...

Docker--harbor私有仓库部署与管理

目录 一、Harbor 简介 1.1 什么是Harbor 1.2 Harbor的特性 1.3 Harbor的构成 二、Harbor 部署 2.1 部署 Docker-Compose 服务 2.2 部署 Harbor 服务 &#xff08;1&#xff09;下载或上传 Harbor 安装程序 &#xff08;2&#xff09;修改harbor安装的配置文件 2.3 启…...

35 基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DAC0832和ADC0832检测电压&#xff0c;0到8.5V&#xff0c;设计复位电路 LED管显示实际稳压值&#xff0c;初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…...

Windows系统下安装Triton 3.0.0预编译Triton 2.1.0

Triton是一个用于编写高效自定义深度学习原语的语言和编译器。它旨在提供一个开源环境&#xff0c;使得编写代码的速度比CUDA更快&#xff0c;同时比其他现有的DSLs&#xff08;领域特定语言&#xff09;更灵活。 在开始安装之前&#xff0c;请确保您的系统满足以下要求&#x…...

Easyexcel(7-自定义样式)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09;Easyexcel&#xff08;5-自定义列宽&#xff09;Easyexcel&#xff08;6-单…...

ubuntu搭建k8s环境详细教程

在Ubuntu上搭建Kubernetes&#xff08;K8s&#xff09;环境可以通过多种方式实现&#xff0c;下面是一个详细的教程&#xff0c;使用kubeadm工具来搭建Kubernetes集群。这个教程将涵盖从准备工作到安装和配置Kubernetes的所有步骤。 环境准备 操作系统&#xff1a;确保你使用的…...

spark 写入mysql 中文数据 显示?? 或者 乱码

目录 前言 Spark报错&#xff1a; 解决办法&#xff1a; 总结一下&#xff1a; 报错&#xff1a; 解决&#xff1a; 前言 用spark写入mysql中&#xff0c;查看中文数据 显示?? 或者 乱码 Spark报错&#xff1a; Sat Nov 23 19:15:59 CST 2024 WARN: Establishing SSL…...

Python中的简单爬虫

文章目录 一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务器和浏览器的通讯流程3. 浏览器访问Web服务器的通讯流程4. 加载图片资源代码 二. 基于Web请求的FastAPI通用配置1. 目前Web服务器存在问题2. 基于Web请求的FastAPI通用配置 三. Python爬虫介绍1. 什…...

网络安全原理与技术思考题/简答题

作业1&#xff08;第1章、第2章、第8章&#xff09; 1. 网络安全的基本属性有哪些&#xff1f;简单解释每个基本属性的含义。网络安全的扩展属性包括哪些&#xff1f; 基本属性&#xff1a; 1.机密性(Confidentiality)&#xff1a; 含义&#xff1a;确保信息不被未授权的用户…...

技术周刊 | 前端真的凉了吗?2024 前端趋势解读

大家好&#xff0c;我是童欧巴。见字如面&#xff0c;万事胜意。 小雪已过&#xff0c;大家勿忘添衣御寒&#xff0c;欢迎来到第 135 期周刊。 大厨推荐 2024 前端趋势 The Software House 公司发布的前端状态调查报告&#xff0c;本版是迄今为止最全面的调查&#xff0c;共…...

Qt常用控件之按钮类控件

目录 QPushButton 添加图标 添加快捷键 QRadioButton 关于toggled 模拟点餐功能 QCheckBox 刚刚 QWidget 中涉及到的各种 属性/函数/使用方法&#xff0c;针对接下来要介绍的 Qt 的各种控件都是有效的&#xff0c;因为各种控件都是继承自 QWidget 的 接下来本篇博客就学…...

Wonder3D本地部署到算家云搭建详细教程

Wonder3D简介 Wonder3D仅需2至3分钟即可从单视图图像中重建出高度详细的纹理网格。Wonder3D首先通过跨域扩散模型生成一致的多视图法线图与相应的彩色图像&#xff0c;然后利用一种新颖的法线融合方法实现快速且高质量的重建。 本文详细介绍了在算家云搭建Wonder3D的流程以及…...

景联文科技:高质量数据采集标注服务引领AI革新

在当今这个数字化时代&#xff0c;数据已经成为推动社会进步和产业升级的关键资源。特别是在人工智能领域&#xff0c;高质量的数据是训练出高效、精准的AI模型的基础。景联文科技是一家专业的数据采集与标注公司&#xff0c;致力于为客户提供高质量的数据处理服务&#xff0c;…...

企业面试真题----阿里巴巴

1.HashMap为什么不是线程安全的&#xff1f; 首先hashmap就是为单线程设计的&#xff0c;并不适合于多线程环境&#xff0c;而hashmap的线程不安全原因主主要是以下两个原因&#xff1a; 死循环 死循环问题发生在jdk1.8之前&#xff08;不包含1.8&#xff09;&#xff0c;造…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【四】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...