2.部署kubernetes的组件

文章目录

  • 部署kubernetes
    • 单master的K8S集群
    • Linux初始化
    • 部署etcd
      • 证书环境
      • etcd软件
      • 备份还原etcd
    • 部署master组件
      • 部署apiserver
      • 部署controller-manager
      • 部署scheduler
      • 部署kubectl
    • 部署node组件
      • 部署docker
      • node01节点
      • node02节点
      • 部署kube-proxy
    • K8S 二进制搭建总结

部署kubernetes

  • 常见的K8S安装部署方式:

    • Minikube
      • Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。
      • 部署地址:https://kubernetes.io/docs/setup/minikube
    • Kubeadm
      • Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相对简单。
      • https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
    • 二进制安装部署
      • 生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8S集群,新手推荐。
      • https://github.com/kubernetes/kubernetes/releases
  • k8s部署 二进制与高可用的区别

    • 二进制部署
      • 部署难,管理方便,集群伸展性能好
      • 更稳定,集群规模到达一定的规模(几百个节点、上万个Pod),二进制稳定性是要高于kubeadm部署
      • 遇到故障,宿主机起来了,进程也会起来
    • kubeadm部署
      • 部署简单,管理难
      • 是以一种容器管理容器的方式允许的组件及服务,故障恢复时间比二进制慢
      • 遇到故障,启动宿主机,再启动进程,最后去启动容器,集群才能恢复,速度比二进制慢

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liV6yrxx-1691041858712)(E:\Typora\images\image-20230802121024683.png)]

单master的K8S集群

master01:192.168.242.66etcd集权节点01:192.168.242.66
etcd集权节点02:192.168.242.67
etcd集权节点03:192.168.242.68node01:192.168.242.67
node01:192.168.242.68

Linux初始化

#关闭防火墙systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#关闭selinuxsetenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#关闭swapswapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
#根据规划设置主机名hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
#在master添加hostscat >> /etc/hosts << EOF
192.168.242.66 master01
192.168.242.67 node01
192.168.242.68 node02
EOF
#调整内核参数cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOFcat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOFsysctl --system
#时间同步yum install ntpdate -y
ntpdate ntp.aliyun.comcrontab -e
*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null

部署etcd

  • etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。
  • etcd 作为服务发现系统,有以下的特点:
    • 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
    • 安全:支持SSL证书验证
    • 快速:单实例支持每秒2k+读操作
    • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
  • etcd 目前默认使用2379端口提供HTTP API服务, 2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
  • etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。

证书环境

  • CFSSL 是 CloudFlare 公司开源的一款 PKI/TLS 工具。 CFSSL 包含一个命令行工具和一个用于签名、验证和捆绑 TLS 证书的 HTTP API 服务。使用Go语言编写。
  • CFSSL 使用配置文件生成证书,因此自签之前,需要生成它识别的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
    CFSSL 用来为 etcd 提供 TLS 证书,
  • 它支持签三种类型的证书:
    1. client 证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如 kube-apiserver 访问 etcd;
    2. server 证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如 etcd 对外提供服务;
    3. peer 证书,相互之间连接时使用的证书,如 etcd 节点之间进行验证和通信。
    4. 这里全部都使用同一套证书认证。
##在  master01  节点中操作##在  opt  目录中创建目录mkdir /opt/k8s        ##用来存放k8s的各种文件的
cd /opt/k8s
##上传  etcd.sh 文件##创建 存放证书文件的目录
mkdir /opt/k8s/etcd-cert##上传文件 etcd-cert.sh  到  /opt/k8s/etcd-cert  中
etcd-cert.sh  :用来生成证书的文件
etcd.sh  :做etcd配置和启动etcd进程的文件##同时上传三个工具
cfssl
cfssl-certinfo
cfssljson##为两个目录中的所有文件添加执行权限
chmod +x *##将  cfssl的文件添加到系统目录中
mv cfssl* /usr/local/bin
##通过脚本生成证书##通过这个脚本文件可以生成9个文件
ca-config.json  :  证书生成策略文件
ca-csr.json : 生成CA证书和私钥的配置文件
server-csr.json : 服务器证书和私钥生成的配置文件#ca-key.pem:根证书私钥
#ca.pem:根证书
#ca.csr:根证书签发请求文件
#server.csr:服务器的证书请求文件
#server-key.pem:服务器的私钥
#server.pem:服务器的数字签名证书##修改  etcd-cert.sh  脚本文件
vim etcd-cert.sh修改  etcd的IP地址"hosts": ["192.168.242.66","192.168.242.67","192.168.242.68"],

etcd软件

##上传  etcd 软件包  到  /opt/k8s
etcd-v3.4.26-linux-amd64.tar.gz##解压文件
tar xf etcd-v3.4.26-linux-amd64.tar.gzcd etcd-v3.4.26-linux-amd64/  中有两文件
etcd :etcd 服务进程的启动文件
etcdctl  : etcdctl客户端工具
###创建etcd 的一些目录mkdir -p /opt/etcd/{cfg,bin,ssl}
cfg:存放etcd配置文件
bin:存放etcd可执行文件
ssl:存放etcd的证书##移动可执行文件
cd /opt/k8s/etcd-v3.4.26-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/##复制私钥和证书文件
cd /opt/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/
##通过脚本文件启动  etcd
cd /opt/k8s
./etcd.sh etcd01 192.168.242.66 etcd02=https://192.168.242.67:2380,etcd03=https://192.168.242.68:2380##会做三件事
生成etcd的配置文件
生成etcd.service的服务管理文件
启动etcd
###etcd02节点复制etcd01的配置文件到etcd02和etcd03
scp -r /opt/etcd 192.168.242.67:/opt/
scp -r /opt/etcd 192.168.242.68:/opt/复制服务管理文件到etcd02和etcd03
scp /usr/lib/systemd/system/etcd.service 192.168.242.67:/usr/lib/systemd/system/scp /usr/lib/systemd/system/etcd.service 192.168.242.68:/usr/lib/systemd/system/
##etcd02和etcd03中修改配置文件vim /opt/etcd/cfg/etcd修改IP地址和名字#[Member]
ETCD_NAME="etcd02"          ##名字唯一
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.242.67:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.242.67:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.242.67:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.242.67:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.242.66:2380,etcd02=https://192.168.242.67:2380,etcd03=https://192.168.242.68:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
##启动  etcd服务systemctl enable --now etcd.service##查看etcd集群的状态
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379,https://192.168.242.67:2379,https://192.168.242.68:2379" endpoint health --write-out=table--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况
#查看etcd集群成员列表ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379,https://192.168.80.242:67,https://192.168.242.68:2379" --write-out=table member list
###查看etcd群集的健康状态ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379,https://192.168.242.67:2379,https://192.168.242.68:2379" endpoint status --write-out=table

备份还原etcd

###备份etcdETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379" snapshot save /data/backup/etcd-snapshot.db
###查看etcd备份ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379" snapshot status /data/backup/etcd-snapshot.db
###还原etcdETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.242.66:2379" snapshot restore /data/backup/etcd-snapshot.db

部署master组件

部署apiserver

###在master01节点上部署##上传  master.zip和  k8s-cert.sh  文件到  /opt/k8s中master.zip:包含master组件运行所需的脚本k8s-cert.sh:master组件上传证书用的##解压 master.zip
unzip master.zipchmod +x *.sh
#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
##创建 k8s证书目录mkdir /opt/k8s/k8s-cert##运行证书脚本,生成证书和私钥
##修改里面的IP地址vim k8s-cert.sh"10.0.0.1",
"127.0.0.1",
"192.168.80.10",		#master01
"192.168.80.20",		#master02
"192.168.80.100",		#vip,后面 keepalived 使用
"192.168.80.14",		#load balancer01(master)
"192.168.80.15",		#load balancer02(backup)##运行脚本文件
./k8s-cert.sh
##复制私钥和证书到  k8s  的配置目录中cp ca*.pem apiserver*.pem /opt/kubernetes/ssl/
###上传  kubernetes的软件包kubernetes-server-linux-amd64.tar.gz
tar xf kubernetes-server-linux-amd64.tar.gz##复制运行文件到  kubernetes 中cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin/##做运行文件软连接到系统目录中
ln -s /opt/kubernetes/bin/* /usr/local/bin/
#创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权cd /opt/k8svim token.sh
#!/bin/bash
#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOFchmod +x token.sh
./token.sh
###启动  apiservercd /opt/k8s./apiserver.sh 192.168.242.66 https://192.168.242.66:2379,https://192.168.242.67:2379,https://192.168.242.68:2379netstat -lntp | grep api

部署controller-manager

cd /opt/k8svim controller-manager.sh
---59行---
KUBE_APISERVER="https://192.168.242.66:6443"./controller-manager.shps aux | grep controller

部署scheduler

cd /opt/k8svim scheduler.sh
---48行---
KUBE_APISERVER="https://192.168.242.66:6443"./scheduler.shps aux | grep scheduler

部署kubectl

cd /opt/k8svim admin.sh
---4行---
KUBE_APISERVER="https://192.168.242.66:6443"./admin.sh##kubectl的目录
cd /root/.kube
##查看master状态kubectl get cs

部署node组件

部署docker

###安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker.service
systemctl enable docker.service 
##修改配置文件和镜像加速mkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ysmprsek.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "500m", "max-file": "3"}
}
EOFsystemctl daemon-reload
systemctl restart docker

node01节点

#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
##创建 k8s目录mkdir /opt/k8s
mv /opt/node.zip /opt/k8s#上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.sh
cd /opt/k8s
unzip node.zip
chmod +x kubelet.sh proxy.sh
###在  master01节点中,发送  kubelet和kube-proxy 二进制文件cd /opt/k8s/kubernetes/server/bin/scp kubelet kube-proxy 192.168.242.67:/opt/kubernetes/bin/
scp kubelet kube-proxy 192.168.242.68:/opt/kubernetes/bin/
###在master01
##创建 opt/k8s/kubeconfig目录mkdir /opt/k8s/kubeconfig##上传kubeconfig.sh
运行脚本chmod +x kubeconfig.sh./kubeconfig.sh 192.168.242.66 /opt/k8s/k8s-cert/
##创建kubelet首次 访问apiserver加入集群的引导文件
##发送引导文件的到  node节点
scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.242.67:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.242.68:/opt/kubernetes/cfg/
##在master01节点
#RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
##node01节点#启动 kubelet 服务
cd /opt/k8s
./kubelet.sh 192.168.242.67ps aux | grep kubelet
#检查到 master01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书
kubectl get csr
###master01节点#通过 CSR 请求
kubectl certificate approve node-csr-mX0Cz0tISS5ISKGVyzuwefiQgshqyBtS-AswKkuA8Fk
##查看node节点kubectl get node
###自动批准CSR请求
##master01节点运行kubectl create clusterrolebinding node-autoapprove-bootstrap --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap kubectl create clusterrolebinding node-autoapprove-certificate-rotation --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --user=kubelet-bootstrap

node02节点

###运行  
cd /opt/k8s
./kubelet.sh 192.168.242.68ps aux | grep kubelet
###查看  自动生成私钥文件cd /opt/kubernetes/ssl/
ls

部署kube-proxy

###查看ipvs模块cd /usr/lib/modules/3.10.0-1160.el7.x86_64/kernel/net/netfilter/ipvs/##加载  ipvs  模块for i in $(ls | grep -o "^[^.]*"); do modprobe $i; donecat /proc/net/ip_vs
##运行 脚本 ,创建  proxy模块cd /opt/k8s ./proxy.sh 192.168.242.68ps aux | grep kube-proxy

K8S 二进制搭建总结

  1. etcd集群
    • 使用cfssl签发证书和私钥
    • 解压etcd软件包,获取二进制文件 etcd etcdctl
    • 准备etcd配置文件
    • 启动etcd服务进程,加入到etcd集群
  2. master
    • 使用cfssl签发证书和私钥
    • 准备bootstrap-token认证文件
    • 解压服务端软件包,获取二进制文件 kube-apiserver kube-controller-manager kubectl kube-scheduler
    • 准备apiserver、controller-manager、scheduler的服务配置文件
    • 准备controller-manager、scheduler、kubectl的 kubeconfig集群配置文件(加入K8S集群的引导文件)
    • 依次启动apiserver、controller-manager、scheduler服务进程
  3. node
    • 获取二进制文件 kubelet kube-proxy
    • 准备 kube-proxy.kubeconfig bootstrap.kubeconfig(kubelet初次访问apiserver加入集群的引导文件)
    • 准备 kubelet、kube-proxy 的服务配置文件
    • 启动 kubelet 进程,发起 csr 请求证书,master 通过 csr 请求,颁发证书给 kubelet
    • 加载 ipvs 模块,启动 kube-proxy 进程
    • 安装 CNI 网络插件(flannel、calico等),CoreDNS
  4. 多 master 高可用
    • 复制 master 的 k8s 相关的 证书、配置文件、二进制文件 和 etcd 的证书
    • 修改 配置文件启动参数 启动 master 组件(apiserver、controller-manager、scheduler)的服务进程
    • 部署 负载均衡器 和 keepalived 高可用
    • 修改 node 组件(kubelet、kube-proxy)和 kubectl 的 kubeconfig 配置文件中的 server 参数地址为 VIP

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

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

相关文章

ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

java反射机制原理、获取Class方式和其应用场景

1、反射是什么&#xff1a; 反射是一种动态地获取和操作类信息的行为。类信息包括类的属性、方法、构造函数等。 类信息在Java中通常存储在.class文件中。当我们编写Java代码并进行编译时&#xff0c;编译器&#xff08;javac&#xff09;将源代码转换为字节码&#xff0c;并将…

Mapper层公共字段自动填充

公共字段自动填充 问题分析 我们在进行一些新增修改操作时&#xff0c;我们需要设置创建时间、创建人、修改时间、修改人等字段。 这些字段属于公共字段&#xff0c;也就是也就是在我们的系统中很多表中都会有这些字段&#xff0c;如下&#xff1a; 序号字段名含义数据类型1c…

【分布式流控组件 Sentinel 快速入门】——图文详解操作流程

&#x1f4a7; 分布式流控组件 S e n t i n e l 快速入门 \color{#FF1493}{分布式流控组件 Sentinel 快速入门} 分布式流控组件Sentinel快速入门&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#…

智慧工地云平台源码,基于微服务+Java+Spring Cloud +UniApp +MySql开发

智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术&#xff0c;通过工地中台、三维建模服务、视频AI分析服务等技术支撑&#xff0c;实现智慧工地高精度动态仿真&#xff0c;趋势分析、预测、模拟&#xff0c;建设智能化、标准化的智慧工地…

华为云交付

文章目录 一、华为云-公有云架构华为公有云的主要服务1.华为云服务—计算类2.华为云服务——存储类3.华为云服务—网络类4.华为云服务—管理和监督类5.华为云数据库 二、待续 一、华为云-公有云架构 华为公有云的主要服务 ECS&#xff1a;弹性云服务器&#xff08; Elastic Cl…

概念解析 | ChatGPT技术概览

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:ChatGPT技术概览 参考资料:Deng J, Lin Y. The benefits and challenges of ChatGPT: An overview[J]. Frontiers in Computing and Intelligent Systems, 2022, 2(2): 81-83. …

穷举深搜暴搜回溯剪枝(3)

一)字母大小写全排列 784. 字母大小写全排列 - 力扣&#xff08;LeetCode&#xff09; 1)从每一个字符开始进行枚举&#xff0c;如果枚举的是一个数字字符&#xff0c;直接忽视 如果是字母的话&#xff0c;进行选择是变还是不变 2)当进行遍历到叶子结点的时候&#xff0c;直接将…

(三)Node.js - 模块化

1. Node.js中的模块化 Node.js中根据模块来源不同&#xff0c;将模块分为了3大类&#xff0c;分别是&#xff1a; 内置模块&#xff1a;内置模块由Node.js官方提供的&#xff0c;例如fs、path、http等自定义模块&#xff1a;用户创建的每个.js文件&#xff0c;都是自定义模块…

jmeter 5.1彻底解决中文上传乱码

1.修改源码,然后重新打jar包,就是所有上传文件名重新获取文件名 参考链接:多种Jmeter中文乱码问题处理方法 - 51Testing软件测试网 2.修改Advanced,必须选java

RaabitMQ(三) - RabbitMQ队列类型、死信消息与死信队列、懒队列、集群模式、MQ常见消息问题

RabbitMQ队列类型 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中&#xff0c;拥有比较高的消息可靠性。 经典队列可以选择是否持久化(Durability)以及是否自动删除(Auto delete)两个属性。 Durability有两个选项&#xff0c;Durable和Transient。 Durable表…

【ARM Coresight 系列文章 2.5 - Coresight 寄存器:PIDR0-PIDR7,CIDR0-CIDR3 介绍】

文章目录 1.1 JEDEC 与 JEP1061.2 PIDR0-PIDR7(peripheral identification registers)1.2 CIDR0-CIDR3(Component Identification Registers) 1.1 JEDEC 与 JEP106 JEDEC和JEP106都是来自美国电子工业联合会&#xff08;JEDEC&#xff0c;Joint Electron Device Engineering C…

深度学习(34)—— StarGAN(1)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09;1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…

4个顶级的支持消费级硬件的NeRF软件平台

似乎每天都有大量的创新发布&#xff0c;人们很容易感到不知所措。因此&#xff0c;让我们放慢脚步&#xff0c;看看4个主流的支持消费级硬件的NeRF 平台。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、Instant-NGP&#xff08;Instant-NeRF&#xff09; 2022 年…

【CTF】Python原型链污染

Python原型链污染 原型链 在Python中每个对象都有一个原型&#xff0c;原型上定义了对象可以访问的属性和方法。当对象访问属性或方法时&#xff0c;会先在自身查找&#xff0c;如果找不到就会去原型链上的上级对象中查找&#xff0c;原型链污染攻击的思路是通过修改对象原型…

计算机网络-三种交换方式

计算机网络-三种交换方式 电路交换(Circuit Switching) 电话交换机接通电话线的方式称为电路交换从通信资源分配的角度来看&#xff0c;交换(Switching)就是按照某种方式动态的分配传输线路的资源 电话交换机 为了解决电话之间通信两两之间连线过多&#xff0c;所以产生了电话…

认识 spring AOP (面向切面编程) - springboot

前言 本篇介绍什么是spring AOP, AOP的优点&#xff0c;使用场景&#xff0c;spring AOP的组成&#xff0c;简单实现AOP 并 了解它的通知&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 什么是s…

快速制作美容行业预约小程序

随着科技的不断进步&#xff0c;移动互联网的快速发展&#xff0c;小程序成为了很多行业迅速发展的利器。对于美容行业来说&#xff0c;一款美容预约小程序不仅可以方便用户进行预约&#xff0c;还可以提升美容店铺的服务质量和管理效率。下面&#xff0c;我们来介绍一下如何快…

K8S deployment 重启的三种方法

一般重启deployment&#xff0c;常规操作是删掉对应的pod, 但如果有多个副本集的话&#xff0c;一个个删很麻烦。 除了删除pod&#xff0c;还可以&#xff1a; 方案一&#xff1a; 加上环境变量 kubectl patch deploy <deployment-name> -p {"spec":{"…

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c;后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会。CNCF孵化的第一个项目…