K8s简介及环境搭建
一、Kubernetes简介
kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:
- 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
- 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
- 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
- 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
- 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
- 存储编排:可以根据容器自身的需求自动创建存储卷
1.1 K8s组件及其用途

k8s集群包括2种角色:master管理节点和node工作节点,至少要有一个node工作节点。
kubectl 是一个客户端的管理工具,直接管理API server,提供一个请求到一个api server,中间有一个auth认证(判断是否有权限访问)。
| 组件名称 | 作用 |
| kube-apiserver | master核心组件,k8s集群的统一访问入口,各组件的协调者,以RESTful API提供接口方式,所有的对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd数据库做持久化存储 |
| kube-controller-manager | 处理集群中常规后台任务,一个资源对应一个控制器,而controller-Manager就是负责处理这些控制器的,例如 deployment-controller、endpoint-controller(负责维护集群的状态,比如程序部署安排,故障检测,自动扩展,滚动更新等) |
| kube-scheduler | scheduler根据调度算法为新创建的pod选择一个node节点(负责集群资源调度,按照调度策略将pod绑定到某个node节点上,即给pod分配一个家) |
| etcd | 分布式键值存储数据库,用于保存集群状态数据,比如Pod,Service等对象信息,etcd可以有多个(etcd数据库集群),也可以不与master节点在一起,只要master能通过网络连接etcd数据库即可 |
2、Node节点包含2大组件,分别是:kubelet、kube-proxy
| 组件名称 | 作用 |
| kubelet | kubelet 是Master在Node节点上的Agent,管理node节点主机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet 将每个Pod转换成一组容器(负责维护容器的生命周期,即通过控制docker来创建、更新、销毁容器 |
| kube-proxy | 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作,实现让Pod节点(一个或者多个容器)对外提供服务(负责提供集群内部的服务发现和负载均衡) |
1.2 K8s常用名词概念
| 名词 | 概念 |
| Master | 集群控制节点,每个集群需要至少一个 master 节点负责集群的管控 |
| Node | 工作负载节点,由 master 分配容器到这些 node 工作节点上,然后 node 节点上的 |
| Pod | kubernetes 的最小控制单元,容器都是运行在 pod 中的,一个 pod 中可以有 1 个或者多个容器 |
| Controller | 控制器,通过它来实现对 pod 的管理,比如启动 pod 、停止 pod 、伸缩 pod 的数量等 |
| Service | pod 对外服务的统一入口,下面可以维护者同一类的多个 pod |
| Label | 标签,用于对 pod 进行分类,同一类 pod 会拥有相同的标签 |
| NameSpace | 命名空间,用来隔离pod的运行环境 |
二、K8s环境部署
2.1 docker仓库环境部署
[root@docker-hub ~]# hostname
docker-hub# 修改配置文件
[root@docker-hub ~]# cd /etc/yum.repos.d/
[root@docker-hub yum.repos.d]# vim docker.repo
[root@docker-hub yum.repos.d]# cat docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0# 安装docker镜像
[root@docker-hub yum.repos.d]# yum install docker-ce -y已安装:containerd.io-1.7.22-3.1.el9.x86_64docker-buildx-plugin-0.17.1-1.el9.x86_64docker-ce-3:27.3.1-1.el9.x86_64docker-ce-cli-1:27.3.1-1.el9.x86_64docker-ce-rootless-extras-27.3.1-1.el9.x86_64docker-compose-plugin-2.29.7-1.el9.x86_64[root@docker-hub yum.repos.d]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock-
-iptables=true# 启动docker
[root@docker-hub yum.repos.d]# systemctl enable --now docker.service
[root@docker-hub yum.repos.d]# docker info# 从本地上传registry并导入
[root@docker-hub ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg registry.tag.gz
模板 图片 下载 桌面
[root@docker-hub ~]# docker load -i registry.tag.gz
ce7f800efff9: Loading layer 7.644MB/7.644MB
30609d4f10dd: Loading layer 792.6kB/792.6kB
3b6a51496c9d: Loading layer 17.55MB/17.55MB
e704e9e3e9dc: Loading layer 3.584kB/3.584kB
f019f591461d: Loading layer 2.048kB/2.048kB
Loaded image: registry:latest
[root@docker-hub ~]# mkdir certs# 做解析
[root@docker-hub ~]# vim /etc/hosts
[root@docker-hub ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.250 harbor.yee.org reg.yee.org[root@docker-hub ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/yee.org.key -subjectAltName = DNS:reg.yee.org" -x509 -days 365 -out certs/yee.org.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shanxi
Locality Name (eg, city) [Default City]:XI'an
Organization Name (eg, company) [Default Company Ltd]:docker
Organizational Unit Name (eg, section) []:registry
Common Name (eg, your name or your server's hostname) []:reg.yee.org
Email Address []:admin@yee.org# 上传本地harbor包并解压缩
[root@docker-hub ~]# tar zxf harbor-offline-installer-v2.5.4.tgz
[root@docker-hub ~]# ls
公共 文档 anaconda-ks.cfg registry.tag.gz
模板 下载 certs
视频 音乐 harbor
图片 桌面 harbor-offline-installer-v2.5.4.tgz# 修改配置文件
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker-hub harbor]# vim harbor.yml
hostname: reg.yee.org
certificate: /data/certs/yee.org.crt
private_key: /data/certs/yee.org.key
harbor_admin_password: 123[root@docker-hub ~]# docker load -i nginx-latest.tar.gz
9853575bc4f9: Loading layer 77.83MB/77.83MB
72db5db515fd: Loading layer 114MB/114MB
8b87c0c66524: Loading layer 3.584kB/3.584kB
ec1a2ca4ac87: Loading layer 4.608kB/4.608kB
55e54df86207: Loading layer 2.56kB/2.56kB
f4f00eaedec7: Loading layer 5.12kB/5.12kB
5f0272c6e96d: Loading layer 7.168kB/7.168kB
Loaded image: nginx:latest
[root@docker-hub ~]# mkdir /data/
[root@docker-hub ~]# cd /data/
[root@docker-hub data]# cp /root/certs/ /data/ -r
[root@docker-hub data]# cd
[root@docker-hub ~]# cd harbor/
[root@docker-hub harbor]# ./install.sh --with-chartmuseum[root@docker-hub harbor]# cd /root/certs/
[root@docker-hub certs]# ls
yee.org.crt yee.org.key
[root@docker-hub certs]# cp /root/certs/yee.org.crt /etc/docker/certs.d/reg.yee.org/ca.crt
做本地解析,路径:C:\Windows\System32\drivers\etc


测试harbor环境


上传镜像:

在docker界面创建文件夹yee


至此,harbor仓库搭建完成。
2.2 K8s集群部署
2.1.1 K8s环境部署说明
| 主机名 | ip | 扮演的角色 |
| k8s-master | 172.25.254.200 | K8s集群控制节点 |
| k8s-node1 | 172.25.254.10 | K8s集群工作节点 |
| k8s-node2 | 172.25.254.20 | K8s集群工作节点 |
2.1.2 K8s集群实验环境搭建
注意:
- 所有节点禁用selinux和防火墙
- 所有节点同步时间和解析
- 所有节点安装docker-ce
- 所有节点禁用swap,注意注释掉/etc/fstab文件中的定义
1、本地解析
[root@k8s-node1 ~]# scp /etc/hosts root@172.25.254.20:/etc/hosts
[root@k8s-node1 ~]# scp /etc/hosts root@172.25.254.100:/etc/hosts
[root@k8s-node1 ~]# scp /etc/hosts root@172.25.254.250:/etc/hosts
2、检测软件仓库
3、安装docker镜像
1、配置私有仓库,使其支持认证


2、创建目录,目录与域名相同
![]()
3、在docker中将hub拷贝给主机master,并将其命名为ca.crt


重启



4、检测

5、在node1、node2中拉取镜像:
# 将master中的后缀为rpm的所有文件全部拷贝到node1、node2中
[root@k8s-master ~]# scp *.rpm root@172.25.254.10:/mnt
[root@k8s-master ~]# scp *.rpm root@172.25.254.20:/mnt# 在node1、node2中查看
[root@k8s-node1 ~]# cd /mnt/
[root@k8s-node1 mnt]# ls
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
hgfs[root@k8s-node2 ~]# cd /mnt/
[root@k8s-node2 mnt]# ls
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
hgfs# 在node1、node2安装
[root@k8s-node2 mnt]# dnf install *.rpm -y




2.3 K8s 安装
2.3.1 所有禁用swap和本地解析


[root@k8s-master mnt]# swapon -s
Filename Type Size Used Priority
/dev/nvme0n1p2 partition 5242876 0 -2
[root@k8s-node1 ~]# systemctl mask dev-nvme0n1p3.device
Created symlink /etc/systemd/system/dev-nvme0n1p3.device → /dev/null.
[root@k8s-node2 ~]# systemctl mask dev-nvme0n1p3.device
Created symlink /etc/systemd/system/dev-nvme0n1p3.device → /dev/null.

[root@k8s-node2 ~]# swapoff /dev/dm-1
[root@k8s-node2 ~]# swapon -s
[root@k8s-node1 dev]# systemctl status dev-dm\\x2d1.swap
● dev-dm\x2d1.swap - /dev/dm-1Follows: unit currently follows state of dev-mapper-rhel\x2dswap.swapLoaded: loadedActive: active since Thu 2024-09-26 17:59:08 CST; 2 days agoUntil: Thu 2024-09-26 17:59:08 CST; 2 days agoWhat: /dev/dm-1
[root@k8s-node1 dev]# systemctl mask dev-dm\\x2d1.swap
Created symlink /etc/systemd/system/dev-dm\x2d1.swap → /dev/null.
[root@k8s-node1 dev]# vim /etc/fstab
[root@k8s-node1 dev]# swapoff /dev/dm-1
[root@k8s-node1 dev]# swapon -s
2.3.2 依赖的安装

[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm root@172.25.254.10:/opt/
root@172.25.254.10's password:
cri-dockerd-0.3.14-3.el8.x86_64.rpm 100% 11MB 182.8MB/s 00:00
libcgroup-0.41-19.el8.x86_64.rpm 100% 69KB 45.6MB/s 00:00
[root@k8s-master mnt]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64.rpm root@172.25.254.20:/opt/
root@172.25.254.20's password:
cri-dockerd-0.3.14-3.el8.x86_64.rpm 100% 11MB 214.2MB/s 00:00
libcgroup-0.41-19.el8.x86_64.rpm 100% 69KB 69.3MB/s 00:00[root@k8s-node1 ~]# dnf install /opt/*.rpm -y
[root@k8s-node2 ~]# dnf install /opt/*.rpm -y
[root@k8s-node1 ~]# systemctl enable --now cri-docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /usr/lib/systemd/system/cri-docker.service.[root@k8s-node2 ~]# systemctl enable --now cri-docker.service
Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /usr/lib/systemd/system/cri-docker.service.


[root@k8s-master yum.repos.d]# dnf install kubelet-1.30.0 kubeadm-1.30.0 --downloadonly --downloaddir=/mnt[root@k8s-master yum.repos.d]# scp /etc/yum.repos.d/k8s.repo root@172.25.254.20:/etc/yum.repos.d/
root@172.25.254.20's password:
k8s.repo 100% 98 198.4KB/s 00:00
[root@k8s-master yum.repos.d]# scp /etc/yum.repos.d/k8s.repo root@172.25.254.10:/etc/yum.repos.d/
root@172.25.254.10's password:
k8s.repo

[root@k8s-node1 mnt]# dnf install kubelet-1.30.0 kubeadm-1.30.0 --downloadonly --downloaddir=/mnt -y
[root@k8s-node1 mnt]# dnf install kubectl-1.30.0 -y
2.3.3 设置kubectl命令补齐
[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source ~/.bashrc
2.3.4 在节点安装cri-docker及其在master节点拉取K8S所需镜像



[root@k8s-master ~]# kubeadm config images pull \--image-repository registry.aliyuncs.com/google_containers \
> --kubernetes-version v1.30.0 \
> --cri-socket=unix:///var/run/cri-dockerd.sock
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.11.1
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.12-0
[root@k8s-master ~]# kubeadm config images pull \--image-repository registry.aliyuncs.com/google_containers \
> --kubernetes-version v1.30.0 \
> --cri-socket=unix:///var/run/cri-dockerd.sock
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.30.0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.11.1
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.12-0

2.3.5 集群初始化
[root@k8s-master ~]# systemctl status kubelet.service
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.timinglee.org/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >>
~/.bash_profile
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master.timinglee.org NotReady control-plane 4m25s v1.30.0
root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS
RESTARTS AGE
kube-system coredns-647dc95897-2sgn8 0/1 Pending
0 6m13s
kube-system coredns-647dc95897-bvtxb 0/1 Pending
0 6m13s
kube-system etcd-k8s-master.timinglee.org 1/1 Running
0 6m29s
kube-system kube-apiserver-k8s-master.timinglee.org 1/1 Running
0 6m30s
kube-system kube-controller-manager-k8s-master.timinglee.org 1/1 Running
0 6m29s
2.3.6 节点扩容
# node1与node2相同操作
[root@k8s-node1 ~]# kubeadm join 172.25.254.100:6443 --token
5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hash
sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --crisocket=unix:///var/run/cri-dockerd.sock[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.yee.org Ready control-plane 98m v1.30.0
k8s-node1.yee.org Ready <none> 21m v1.30.0
k8s-node2.yee.org Ready <none> 21m v1.30.0# 建立
[root@k8s-master ~]# kubectl run test --image nginx# 查看状态
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test 1/1 Running 0 6m29s# 删除
root@k8s-master ~]# kubectl delete pod
相关文章:
K8s简介及环境搭建
一、Kubernetes简介 kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能: 自我修复:一旦某一个容器崩溃&a…...
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割 利用Python的.rotate()方法和.mediabox属性对PDF页面进行旋转和切割,最终生成一个PDF。下面结合案例进行说明,本示例中的名为split_and_rotate.pdf文件在practice_files文件夹中, 示例(1&#…...
Android 10.0 修改Systemui三键导航栏虚拟按键颜色功能实现
1.前言 在10.0的系统ROM定制化开发中,在对systemui的相关定制化开发中,在某些产品中,需要修改相关的 导航栏三键导航的虚拟按键的颜色,修改掉原来默认的虚拟按键的黑白色,接下来就来实现相关的功能 2.修改Systemui三键导航栏虚拟按键颜色功能实现的核心类 frameworks\ba…...
『网络游戏』客户端使用PESorket发送消息到服务器【14】
上一章服务器已经完成使用PESorket 现在我们将其导出在客户端中使用 生成成功后复制 粘贴到Unity项目中 进入Assets文件夹 粘贴两个.dll 创建脚本:ClientSession.cs 编写脚本: ClientSession.cs 编写脚本:GameStart.cs 将GameStart.cs脚本绑定在摄像机上 运行服务器 运行客户端…...
JVM(学习预热 - 走进Java)(持续更新迭代)
目录 一、彻底认识Java虚拟机 开创世纪:Sun Classic 开创世纪:Exact VM 武林霸主:HotSpot VM 移动端虚拟机:Mobile/Embedded VM “三大”其二:BEA JRockit/IBM J9 VM 软硬结合:BEA Liquid VM/Azul VM…...
43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、realloc、_msize、free)、内存泄漏
目录 1 C 程序内存区域划分 1.1 代码区 (Code Section) 1.2 全局/静态区 (Global/Static Section) 1.3 栈区 (Stack Section) 1.4 堆区 (Heap Section) 1.5 动态内存分配 2 void 指针(无类型指针) 2.1 void 指针介绍 2.2 void 指针的作用 2.3 …...
编译链接的过程发生了什么?
一:程序的翻译环境和执行环境 在 ANSI C 的任何一种实现中,存在两个不同的环境。 第 1 种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第 2 种是执行环境,它用于实际执行代码 也就是说:↓ 1࿱…...
【D3.js in Action 3 精译_028】3.4 小节 DIY 实战:使用 Observable 在线绘制 D3 条形图
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...
【Linux】 TCP短服务编写和守护进程
文章目录 TCP 短服务编写流程进程组和会话和守护进程 TCP 短服务编写流程 TCP服务器是面向连接的,客户端在发送数据之前需要先与服务器建立连接。 因此,TCP服务器需要能够监听客户端的连接请求。为了实现这一功能,需要将TCP服务器创建的套接字…...
自学数据库-MYSQL
自学数据库-MYSQL 一.表和视图1.表1.1 表创建1.2 索引1.2.1 这里是废话,不感兴趣的可以直接更具目录的跳过这里的内容1.2.1.1 索引是什么1.2.1.2 相关数据结构:二叉树、红黑树、B-Tree、BTree、Hash…①普通索引②唯一索引③全文索引④组合索引 1.3 表数据操作(更新…...
机器学习——多模态学习
多模态学习:机器学习领域的新视野 引言 多模态学习(Multimodal Learning)是机器学习中的一个前沿领域,它涉及处理和整合来自多个数据模式(如图像、文本、音频等)的信息。随着深度学习的蓬勃发展࿰…...
ceph掉电后无法启动osd,pgs unknown
处理办法: 只有1个osd,单副本,掉电损坏osd,只能考虑重建pg,丢失部分数据了。生产环境务必考虑2,3副本设计。避免掉电故障风险。 掉电后osdmap丢失无法启动osd的解决方案 - 武汉-磨渣 - 博客园 https://zhuanlan.zhih…...
HTML5实现古典音乐网站源码模板1
文章目录 1.设计来源1.1 网站首页1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面2.效果和源码2.1 动态效果2.2 源代码源码下载万套模板,程序开发,在线开发,在线沟通作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/142…...
快速生成单元测试
1. Squaretest插件 2. 依赖 <dependency><groupId>junit</groupId>...
WebGL系列教程十一(光照原理及Blinn Phong着色模型)
快速导航(持续更新中) WebGL系列教程一(开篇) WebGL系列教程二(环境搭建及着色器初始化) WebGL系列教程三(使用缓冲区绘制三角形) WebGL系列教程四(绘制彩色三角形&…...
《ASP.NET Web Forms 实现短视频点赞功能的完整示例》
在现代Web开发中,实现一个动态的点赞功能是非常常见的需求。本文将详细介绍如何在ASP.NET Web Forms中实现一个视频点赞功能,包括前端页面的展示和后端的处理逻辑。我们将确保点赞数量能够实时更新,而无需刷新整个页面。 技术栈 ASP.NET We…...
Linux SSH服务
Linux SSH(Secure Shell)服务是一种安全的远程登录协议,用于在Linux操作系统上远程登录和执行命令。它提供了加密的通信通道,可以在不安全的网络环境中安全地进行远程访问。 SSH服务在Linux系统中通常使用OpenSSH软件包来实现。它…...
MySQL--视图(详解)
目录 一、前言二、视图2.1概念2.2语法2.3创建视图2.3.1目的 2.4查看视图2.5修改数据2.5.1通过真实表修改数据,会影响视图2.5.2通过修改视图,会影响基表 2.6注意2.7 删除视图2.8 视图的优点 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导&…...
Javascript 普通非async函数调用async函数
假设我们有一个异步函数 async function asyncFunction() {console.log("开始执行异步函数");await new Promise(resolve > setTimeout(resolve, 1000)); // 模拟异步操作console.log("异步函数执行完毕"); } 我们在调用这个异步函数时,比…...
【LeetCode】修炼之路-0004-Median of Two Sorted Arrays【python】
题目 Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O(log (mn)). Example 1: Input: nums1 [1,3], nums2 [2] Output: 2.00000 Explanation: merged…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

