centos7安装kubeadm

news2024/11/19 10:37:22

centos7安装kubeadm

一、基础设置

1、设置主机名

hostnamectl set-hostname master
hostnamectl set-hostname node01

vim /etc/hosts
192.168.198.169	master
192.168.198.170	note01

hostnamectl

hostnamectl 是在 centos7 中新增加的命令,它是是用来管理给定主机中使用的三种类型的主机名

在CentOS7中有三种定义的主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。“static”主机名是可由用户选择的传统 hostname,并保存在 /etc/hostname 文件中。 “transient” hostname 是由内核维护的动态主机名。它最初是默认的 static 主机名,其值默认为 “localhost”。 可由 DHCP 或 mDNS 在运行时更改其默认值。“pretty” hostname 是为用户提供的任意格式 UTF8 主机名

hostnamectl 用法

-h	--help	显示帮助
	--version	显示安装包的版本
	--transient	修改临时主机名
	--static	修改瞬态主机名
	--pretty	修改灵活主机名
-p	--privileged	在执行之前获得的特权
	--no-ask-password	输入密码不提示
-h	--host=[USER@]HOST	设置主机平台类型名

Commands:
	status	显示当前主机名设置
	set-hostname NAME	设置系统主机名
	set-icon-name	NAME	为主机设置icon名
	set-chassis	NAME	设置主机平台类型名

具体用法

hostnamectl status

如果未指定任何选项,则默认使用 status 选项
hostnamectl <==> hostnamectl status
设定所有主机名
hostnamectl set-hostname 主机名

这样会将 pretty 、 static 、 和 transient 主机名变得相似。 Static 和 transient 主机名会简化为 pretty 主机名格式。使用 “-” 替换空格,并删除特殊字符。

过程
# hostname
localhost.localdomain
# hostnamectl set-hostname xsnq
# hostname //查看主机名已近修改成功
xsnq
// 这里远程登录(CRT)重新连接服务器也可以
# init 6	//重启服务器
# // 主机名显示也修改完成

设定/清除特定主机名

hostnamectl set-hostname "" option...
过程
# hostname
xsnq
# hostnamectl set-hostname "" --static
# hostname	// 此时清除成功,但还未生效
xsnq
# init 6	// 重启
# hostname	// 已还原成默认形式
localhost.localdomain

hostname和hostnamectl 区别

hostname 临时修改主机名;
hostnamectl 永久修改主机名,是对 /etc/hostname 文件的内容进行修改

/etc/hosts

主机名查询静态表,是ip地址与域名快速解析的文件。ip地址与主机名之间的映射,包括主机的别名。

通常将常用的域名和ip地址映射加入到hosts文件中,实现快速方便的访问

如果没有域名解析(DNS),操作系统需要查询该文件来解析对应主机名的ip地址;如果有域名解析(DNS),也可以设置该文件,优先级:DNS缓存 > /etc/hosts/ > DNS服务

ssh免登录

ssh-keygen	# node 生成密钥, 一路回车

ssh-copy-id user@host	# master 拷贝密钥

ssh-keygen命令

ssh-keygen 用来生成ssh公钥认证所需的公钥和私钥文件

ssh 密钥登录特点:1、安全;2、免输密码

对于安全级别较高的服务器,建议配好 ssh 登录后禁掉密码登录。

缺点:略繁琐。如果你的只是临时登录一次,那么还是密码吧。

一、生成密钥

秘钥对需要在你自己的机器上生成,然后把公钥放到服务器相应用户的 ~/.ssh 目录

执行下面命令,默认生成位置是 ~/.ssh

ssh-keygen

系统会询问你文件名和秘钥密码,可以一路回车过去,会生成两个文件:

  • id_rsa 私钥
  • id_rsa.pub 公钥

默认使用rsa算法,你也可以用比较详细的指令,如

ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注"
参数解释
-b采用长度1024 bit 的密钥对,b=bits, 最长 4096,不过没啥必要
-t rsa采用 rsa 加密方式, t=type
-f生成文件名, f=output_keyfiles
-C备注, C=momment

更多参数可运行 man ssh-keygen

ssh-copy-id 命令

ssh-copy-id 命令可以把本地的 ssh 公钥文件安装到远程主机对应的账户下。

达到的功能

ssh-copy-id - 将你的公钥 密钥 填充到一个远程机器上的 authorized_keys 文件中。

使用模式:

ssh-copy-id [-i [identity_file]][user@]machine

描述

ssh-copy-id 是一个实用 ssh 去登陆到远程服务器的脚本(假设使用一个登录密码,因此,密码认证应该被激活直到你已经清理了做 了多个身份的使用)。

​ 它也能够改变远程用户名的权限,~/.ssh 和 ~/.ssh/authorized_keys 删除群组写的权限(在其他方面,如果远程机上的 sshd 在它的位置文件中是严格模式的话,这能够组织你登陆)。

​ 如果这个 “-i” 选项已经给出了,然后这个认证文件(默认是 ~/.ssh/id_rsa.pub)被使用,不管在你的 ssh-agent 那里是 否有任何密钥。另外,命令 “ssh-add -L” 提供任何输出,它使用这个输出优先于身份认证文件。如果给出了 “-i” 选项, 或者 ssh-add 不产生输出, 它使用 ssh 将这些指纹填充到远程机 ~/.ssh/authorized_keys 文件中

ssh-keygen 产生公钥与私钥对。

ssh-copy-id 将本机的公钥复制到远程机器的 authorized_keys 文件中,

ssh-copy-id 也能让你有到远程机器的 home , ~./ssh , 和 ~/.ssh/authorized_keys 的权利

第一步:在本地机器上使用 ssh-keygen 产生公钥私钥对

ssh-keygen

第二步:用 ssh-copy-id 将公钥复制到远程机器中

ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

第三步:登录到 远程机器不用输入密码

ssh remote-host

常见问题:

ssh-copy-id -u eucalyptus -i ~eucalyptus/.ssh/id_ras.pub eucalyptus@remote_host

上述是给 eucalyptus 用户赋予无密码登录的权利

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

禁用 SELINUX

# 将 SElinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive' /etc/selinux/config

SELinux是什么?

SELinux 是 Security Enhanced Linux 缩写,采用委任式存取控制,是在进行程序、文件等细节权限设置依据的一个核心模块

SELinux(Security-Enhanced Linux)是 linux 系统中强制访问控制模块,是linux 历史上最杰出的新安全子系统,由 NSA (美国国家安全局)和 linux 社区共同开发出来的,它是一种访问控制体系,在这种访问控制体系下,进程只能访问进程任务中需要的文件。默认安装在 Fedora 和 Red Hat Enterprise Linux 上。也可安装在其他 linux发行版本上。

SELinux 是 2.6 及更高版本的 linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的 linux 安全模块来说, SELinux 是功能最全面,而且测试最充分的,已作为 linux 内核模块, 包含在 linux 内核中。启用该访问模块,进程无法随意访问不包含在任务之中的文件,或路径

存取控制

自主式(DAC)

当程序要操作文件时,系统根据程序 Owner/Group,对比文件的权限,若通过权限检查,则可操作文件,但可能造成问题:

  • root 具有最高权限,若某程序属于 root,则该程序可操作系统的任务文件
  • 使用者可利用程序来变更文件的权限

委任式(MAC)

也即是SELinux所采用的方式,可针对特定程序与特定文件来进行权限控制

  • 即使是 root ,在使用不同程序时所取到的权限也不一定是 root ,而是根据该程序的设定
  • 程序也不能任意使用系统文件,因为每个文件也有针对该程序可用的权限设定

SELinux组成

主要组成部分为 Subject、Object、Policy 和 security context

Subject 即是要管理的程序, Object 即是要操作的文件系统, Policy 为基本的存取安全性策略,分别为

  • targeted:针对网络服务限制较多,针对本机限制较少,是默认政策
  • minimun:由 target 修改而来,仅针对选择的程序来保护
  • mls:完整的权限限制,限制方面较为严格

Subject 与 Object 的 security context 要一致才能顺序存取,其分为3个部分

  • Identity:unconfined_u 表示文件来自不受限制程序产生, system_u 表示文件由系统产生
  • Role:object_r 表示文件, system_r 表示程序或一般使用者, unconfined_r 表示不受限角色
  • Type:在 Subject 则称为 domain, 在 Object 中称为 Type,两者需一致

SELinux 安装

systemctl stop apparmor
apt purge apparmor
apt update && sudo apt upgrade -yuf
apt install policycoreutils selinux-utils selinux-basics

SELinux开关及模式

  • enforcing:强制模式,表示 SELinux 运行中,且正在限制 domain/type
  • permissive:宽容模式,表示SELinux运行中,但仅有警告信息并未限制 domain/type,多用于 debug
  • disabled:关闭

命令 getenforce 可获取 SELinux 的模式,上面安装完后,默认为 disabled

命令 setenforce 设置 SELinux模式,0 为 permissive,1为enforcing,但实际上只能在开机状态下切换 enforcing 和 permissive ,而不能从 disabled 直接切换为 enforcing 或 permissive,反之也不行

故想要打开 SELinux,需通过 vi 将 /etc/selinux/config 的 SELINUX = disabled 改为 permissive 或 enforcing

关闭swap分区

swapoff -a 
sed -i 's/.*swap.*/#&/' /etc/fstab

Linux swap 分区及作用详解

我们在安装系统的时候已经建立了 swap 分区。 swap分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换区中,从而为当前运行的程序腾出足够的内存空间

允许 iptables 检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

放行端口

控制平面节点

协议方向端口范围作用使用者
TCP入站6443Kubernetes API 服务器所有组件
TCP入站2379-2380etcd 服务器客户端 APIkube-apiserver, etcd
TCP入站10250Kubelet APIkubelet 自身、控制平面组件
TCP入站10251kube-schedulerkube-scheduler 自身
TCP入站10252kube-controller-managerkube-controller-manager 自身

工作节点

协议方向端口范围作用使用者
TCP入站10250Kubelet APIkubelet 自身、控制平面组件
TCP入站30000-32767NodePort 服务†所有组件

安装 v-1.17 的 kubeadm/kubelet/kubectl

由于 kubeadm 的官方源在国外,所以如果不科学上网的情况下,直接下载 kubeadm 以及 kuberenets 集群组件镜像(k8s.gcr.io)会非常缓慢,这里我们直接采用阿里云的 kubernetes 镜像库来进行安装。

(1)先配置 kubeadm 的安装源:

CentOS / RHEL / Fedora

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0

查看可安装的 kubeadm 版本:

[root@node13 ~]# yum list kubeadm --showduplicates|sort -r
已加载插件:fastestmirror
已安装的软件包
可安装的软件包
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
kubeadm.x86_64                       1.9.9-0                         kubernetes 
kubeadm.x86_64                       1.9.8-0                         kubernetes 
kubeadm.x86_64                       1.9.7-0                         kubernetes 
kubeadm.x86_64                       1.9.6-0                         kubernetes 
kubeadm.x86_64                       1.9.5-0                         kubernetes 
kubeadm.x86_64                       1.9.4-0                         kubernetes 

选择安装 v1.17.17-0 的 kubeadm:

[root@node13 yum.repos.d]# yum install kubelet-1.17.17-0 kubeadm-1.17.17-0 kubectl-1.17.17-0 -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
...
kubernetes                                                                                                      | 1.4 kB  00:00:00
...
已安装:
  kubeadm.x86_64 0:1.17.17-0                              kubectl.x86_64 0:1.17.17-0                              kubelet.x86_64 0:1.17.17-0                             

作为依赖被安装:
  kubernetes-cni.x86_64 0:0.8.7-0                                   

完毕!

# 警用swap
[root@node13 ~]# sudo swapoff -a
#设置kubelet开机启动
[root@node13 yum.repos.d]# systemctl enable kubelet && systemctl start kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
#重启docker服务
[root@node13 ~]# systemctl daemon-reload 
[root@node13 ~]# systemctl restart docker

3. 预下载 k8s 集群组件镜像

执行 kubeadm init 执行节点安装 k8s 集群时,最大的问题是在此过程中会去 k8s.gcr.io 的 kubernetes 官方镜像源下载 k8s 组件的镜像,所以我们可以提前预下载所需要的组件镜像:

查看 kubeadm init 时所需要的组件镜像列表:

[root@node13 ~]# kubeadm config images list
I0415 13:20:10.609056    5888 version.go:251] remote version is much newer: v1.21.0; falling back to: stable-1.17
W0415 13:20:11.388040    5888 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0415 13:20:11.388070    5888 validation.go:28] Cannot validate kubelet config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.17
k8s.gcr.io/kube-controller-manager:v1.17.17
k8s.gcr.io/kube-scheduler:v1.17.17
k8s.gcr.io/kube-proxy:v1.17.17
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

编写脚本,使用阿里云的 k8s 官方镜像源来下载这些镜像:
脚本的作用是从阿里云的 kubernetes 镜像源拉取镜像到本地,然后修改镜像的标签,以符合 k8s.gcr.io 的地址格式

  • 根据kubeadm config images list命令,编辑pull-k8s-images.sh。
#创建pull-k8s-images.sh 
[root@node13 yum.repos.d]# vim pull-k8s-images.sh 

for i in k8s.gcr.io/kube-apiserver:v1.17.17 k8s.gcr.io/kube-controller-manager:v1.17.17 k8s.gcr.io/kube-scheduler:v1.17.17 k8s.gcr.io/kube-proxy:v1.17.17 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5; do
  temp=${i#k8s.gcr.io/}
  docker pull registry.aliyuncs.com/google_containers/${temp}
  docker tag registry.aliyuncs.com/google_containers/${temp} k8s.gcr.io/${temp}
  docker rmi registry.aliyuncs.com/google_containers/${temp};
done;

#修改会可执行文件
[root@node13 yum.repos.d]# chmod +x pull-k8s-images.sh 
#执行文件
[root@node13 yum.repos.d]# ./pull-k8s-images.sh 
..
..
Digest: sha256:7ec975f167d815311a7136c32e70735f0d00b73781365df1befd46ed35bd4fe7
Status: Downloaded newer image for registry.aliyuncs.com/google_containers/coredns:1.6.5
registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns@sha256:7ec975f167d815311a7136c32e70735f0d00b73781365df1befd46ed35bd4fe7

#检查是否下载成功
[root@node13 yum.repos.d]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.17.17            3ef67d180564        3 months ago        117MB
k8s.gcr.io/kube-controller-manager   v1.17.17            0ddd96ecb9e5        3 months ago        161MB
k8s.gcr.io/kube-apiserver            v1.17.17            38db32e0f351        3 months ago        171MB
k8s.gcr.io/kube-scheduler            v1.17.17            d415ebbf09db        3 months ago        94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        17 months ago       41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        17 months ago       288MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        3 years ago         742kB

4. master节点初始化 k8s 集群

以下步骤,只对于master节点

[root@node13 ~]# kubeadm init --apiserver-advertise-address=192.168.255.132 --kubernetes-version v1.17.17 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.81.0.0/16

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.255.132:6443 --token vkidlc.wmwtmuv4doua1b86 \
    --discovery-token-ca-cert-hash sha256:8ea01d6c8881b80004102447cf0b6c5d11700d771e88eaccbaddae5048688618

安装成功

#按安装成功提示的增加config
[root@node13 ~]#   mkdir -p $HOME/.kube
[root@node13 ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@node13 ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.slave节点加入集群

slave节点重复 2、3步骤。
加入集群节点只需执行master节点创建集群的命令

在这里插入图片描述

#加入集群
[root@node14 ~]# kubeadm join 192.168.255.132:6443 --token vkidlc.wmwtmuv4doua1b86 \
>     --discovery-token-ca-cert-hash sha256:8ea01d6c8881b80004102447cf0b6c5d11700d771e88eaccbaddae5048688618

#结果

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
o apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

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

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

相关文章

2023年我花费数小时整理的Java常用类进阶学习文档,你学会了吗?

文章目录1. 基本类型的包装类1.1 概念1.2 常用的属性1.3 常用的方法1.4 自动装箱和自动拆箱2. 字符串类2.1 String 类2.2 StringBuilder类2.3 StringBuffer类2.4 StringBuilder 的扩容机制3. 数字常用类3.1 Math 类3.2 Radom 类4. 枚举类5. 日期类5.1 Date 类5.2 DateFormat 类…

基于微信小程序的小区租拼车管理信息系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

学习理解10G Ethernet Subsystem之IEEE1588

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 学习理解10G Ethernet Subsystem之IEEE1588前言原理简介one step/two step1PPSIP 设置前言 1588大多是走在报文中&#xff0c;主要通过一些报文交互来完成同步过程&#xff…

在Docker中安装Gitea

目录在Docker中安装Gitea1、拉取最新Gitea官方镜像2、实例化一个Gitea容器3、Gitea需要数据源&#xff0c;因此使用mysql作为后端数据库4、在mysql中创建一个新数据库&#xff0c;起名gitea5、访问Gitea主页http://host:3000&#xff0c;进入初始配置页在Docker中安装Gitea 1、…

【自学Python】Python位运算符

Python位运算符 Python位运算符教程 在 Python 中&#xff0c;位运算符主要是用于 数值类型 的二进制的运算。 Python位运算符语法 位运算符说 明案例备注&按位与a & b返回 a 和 b 相与的结果|按位或a | b返回 a 和 b 相或的结果^按位异或a ^ b返回 a 和 b 相异或的…

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具&#xff0c;它几乎可以实现所有针对音视频的处理&#xff0c;本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例&#xff1a;编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题&#xff0d;&#xff1e;…

Java中的equals()方法和hashCode的关系

文章目录1.Java中equals()方法比较的是什么&#xff1f;2.equals方法和hashcode的关系3.什么是hashCode3.1 hashcode有什么作用呢&#xff1f;4.关于重写equals()方法的两条规范5.代码实例1.Java中equals()方法比较的是什么&#xff1f; 最直接的回答就是看调用equals()方法的…

联合评测 DapuStor Roealsen5 NVMe SSD在GreatSQL数据据库中的应用探索

1、合作背景 万里开源软件有限公司 ​ 北京万里开源软件有限公司&#xff0c;是专注于国产自主可控数据库产品研发超 20年的国家高新技术企业&#xff0c;参与多个国家级的数据库行业标准制定工作。本次用于测试的 GreatSQL 开源数据库是适用于金融级应用的国内自主 MySQL 版…

Redis 的基础数据结构(一) 可变字符串、链表、字典

这周开始学习 Redis&#xff0c;看看Redis是怎么实现的。所以会写一系列关于 Redis的文章。这篇文章关于 Redis 的基础数据。阅读这篇文章你可以了解&#xff1a; 动态字符串&#xff08;SDS&#xff09;链表字典 三个数据结构 Redis 是怎么实现的。 SDS SDS &#xff08;S…

从0到1完成一个Node后端(express)项目(二、下载数据库、navicat、express连接数据库)

往期 从0到1完成一个Node后端&#xff08;express&#xff09;项目&#xff08;一、初始化项目、安装nodemon&#xff09; 下载MySQL数据库&#xff08;PHPstudy&#xff09; 我们这里不采用官网下载MySQL的方式、因为启动不方便&#xff0c;而且多版本的MySQL大家也不好去管…

【MyBatis】| MyBatis概述、MyBatis⼊⻔程序

一、MyBatis概述1. 框架在⽂献中framework被翻译为框架。Java常⽤框架&#xff1a;SSM三⼤框架&#xff1a;Spring SpringMVC MyBatisSpringBootSpringCloud等。。。。框架其实就是对通⽤代码的封装&#xff0c;提前写好了⼀堆接⼝和类&#xff0c;我们可以在做项⽬的时候直接…

Frida零基础入门教程

阅读这篇文章,不仅能了解frida是什么,还能知道如何搭建Frida运行换以及学会用frida进行简单的java/native hook实战。 Xposed大家不陌生,在手机上运行的Hook框架,Xposed插件编写完成并在手机上通过hook框架加载,打开指定应用就能实现代码注入,也就是说Xposed插件的代码是…

FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。

0、本文中所用软件下载包 1、前置工作 1.1 下载 ffmpeg&#xff0c;Download FFmpeg&#xff0c; 1.1.1配置ffmpeg如下图 1.1.2测试ffmpeg 安装成功&#xff1a;ffmpeg -version 1.1.3 使用FFmpeg获取本地摄像头设备 ffmpeg -list_devices true -f dshow -i dummy video和aud…

【JavaSE】Java到底是值传递还是引用传递?

【JavaSE】Java到底是值传递还是引用传递&#xff1f; 文章目录【JavaSE】Java到底是值传递还是引用传递&#xff1f;一&#xff1a;基本数据类型和引用数据类型区别二&#xff1a;案例1&#xff1a;传递基本类型2&#xff1a;传递引用类型三&#xff1a;引用传递是怎么样的&am…

【Linux】进程信号万字详解(下)

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

搞账号登录限制?我直接用Python自制软件

前言 一个账号只能登录一台设备&#xff1f;涨价就涨价&#xff0c;至少还能借借朋友的&#xff0c;谁还没几个朋友&#xff0c;搞限制登录这一出&#xff0c;瞬间不稀罕了 这个年头谁还不会点技术了&#xff0c;直接拿python自制一个可以看视频的软件… 话不多说&#xff0…

【尚硅谷】Java数据结构与算法笔记05 -递归

文章目录一、应用场景二、递归的概念三、递归能解决的问题四、递归需要遵守的重要规则五、递归-迷宫问题六、递归-八皇后问题&#xff08;回溯算法&#xff09;6.1 问题介绍6.2 思路分析5.3 Java代码实现一、应用场景 二、递归的概念 简单的说: 递归就是方法自己调用自己, 每次…

[机器视觉]目标检测评价指标及其实现

一、模型分类目标 数据的分类情况为两类正例(Postive)和负例(Negtive)&#xff0c;分别取P和N表示。 同时在预测情况下&#xff0c;分类正确表示为T(True)&#xff0c;错误表示为F(False);便有了以下四类表示&#xff1a; TP:(True Positive 正确的判断为正例 …

投入式水位计工作原理及应用介绍

1、设备介绍&#xff1a; 投入式水位计采用国外进口传感器芯体&#xff0c;将液位压力信号转换成对应的数字信号&#xff0c;再通过数字电路处理&#xff0c;输出 RS485 两线制的标准信号。一体式设计是将隔离式传感器和数字处理电路封装在探头内&#xff0c;通过特种电缆直接…

前端性能优化(八):性能优化问题指南

目录 一&#xff1a;从输入 URL 到页面加载显示完成都发生了什么 二&#xff1a;首屏加载优化 三&#xff1a;JavaScript 内存管理 一&#xff1a;从输入 URL 到页面加载显示完成都发生了什么 UI 线程会判断输入的地址地址是搜索的关键词还是访问站点的 URL 接下来 UI 线程…