K8s部署安装

news2024/11/26 7:36:17

目录

一.K8s简介

1.Kubernetes 的关键概念

2.Kubernetes 的功能优势

3.节点(Node)

4.组件(Component)

二.Kubernetes集群架构

三.安装部署环境

1.初始化系统环境

2.安装容器引擎

3. 安装containerd

4.安装crictl工具

5.安装nerdctl工具

6.CNI工具

7.初始化K8S环境

四.正式安装K8S-kubeadm

 五.安装calico


一.K8s简介

Kubernetes(通常缩写为K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。它最初由Google开发,现在由云原生计算基金会(CNCF)维护。Kubernetes 的核心目标是提供一个一致且可扩展的框架来管理容器化应用的生命周期。

单个容器没有价值,需要实现容器的编排功能

常见的容器编排:

  • docker-compose (单机 小型的容器编排工具)

    • 网络编排

    • 存储卷编排

  • X(推特) Mesos, Marathon ( Mesos云操作系统,只可以编排虚拟机,二次开发后Marathon 可以编排容器)

    • DC/OS

  • kubernetes: k8s

    • Borg --> Kubernetes

Kubernetes最初源于谷歌内部的Borg,Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理,Borg的目的是让用户能够不必操心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。

Borg主要由BorgMaster、Borglet、borgcfg和Scheduler组成:

https://research.google/pubs/pub43438/ #Borg论文

谷歌在容器出现很多年前就已经在使用容器技术,只不过谷歌公司中的 工程师都是极客,不需要使用高级运行时的容器工具,所以没有在前期关注容器工具的研发,让docker这家初创公司异军突起,但是在使用容器的这么多年的中,谷歌公司从borg 系统中挑选人员,组建了 k8s 研发团队, 为了打消所有人的闭源顾虑,将k8s 捐给cncf 基金会, cncf 也属于 Linux基金会

k8s官网

https://kubernetes.io/zh/ #官网

github官网

 https://github.com/kubernetes/kubernetes #github

1.Kubernetes 的关键概念

  1. Pod: Kubernetes 的最小部署单元,一个 Pod 可以包含一个或多个容器,这些容器共享相同的网络和存储资源。Pod 允许容器在同一个环境中运行并相互通信。

  2. Service: 用于定义和管理一组 Pod 的网络访问策略。Service 提供稳定的网络接口和负载均衡,将请求分发到其背后的 Pod。

  3. Deployment: 用于声明式地管理 Pod 和 ReplicaSet 的副本。Deployment 可以自动更新、回滚和扩展应用。

  4. ReplicaSet: 确保指定数量的 Pod 副本在任何时候都在运行。通常,ReplicaSet 是由 Deployment 管理的。

  5. Namespace: 用于将集群资源分隔成逻辑分组,提供资源隔离、权限管理和配额控制。

  6. ConfigMap 和 Secret: 用于管理配置数据和敏感信息(如密码),这些信息可以注入到容器中而无需硬编码在镜像中。

  7. Volume: 提供持久存储能力,可以将数据持久化到 Pod 的生命周期之外。Kubernetes 支持多种类型的存储卷,如本地磁盘、网络存储和云存储。

  8. Ingress: 管理外部 HTTP 和 HTTPS 访问到 Kubernetes 集群内部的服务。Ingress 提供了基于 URL 路径或主机名的路由功能。

  9. Node: Kubernetes 集群中的一个计算节点,可以是物理服务器或虚拟机。每个 Node 上运行一个 Kubelet 进程,它负责管理该 Node 上的 Pod。

  10. Cluster: 由多个 Node 组成的 Kubernetes 集群,包含一个 Master 节点(控制平面)和多个 Worker 节点(承载实际的应用和服务)。

2.Kubernetes 的功能优势

  1. 自动化部署和管理: Kubernetes 可以自动化应用的部署、升级、修复和回滚过程,减少手动操作。

  2. 负载均衡和服务发现: Kubernetes 提供内置的负载均衡和服务发现机制,确保应用的高可用性和稳定性。

  3. 弹性伸缩: 支持根据负载自动扩展和收缩容器实例,优化资源利用率。

  4. 自愈能力: 能够自动替换失败的容器,并重新调度到健康的节点上,确保应用持续运行。

  5. 集成和生态系统: Kubernetes 拥有一个活跃的生态系统,与许多第三方工具和服务兼容,支持各种云提供商和本地部署环境。

3.节点(Node)

Kubernetes 集群中的每个机器都被称为节点。节点可以是物理服务器或虚拟机,它们运行 Kubernetes 的组件来支持集群的功能。节点分为两种类型:

  1. Master 节点(控制平面节点):

    • 负责管理集群的整体状态,包括调度 Pod、管理 API 请求、协调应用部署等。
    • 控制平面节点的主要组件包括:
      • kube-apiserver:Kubernetes 的 API 服务器,负责处理客户端请求、验证、授权等。
      • etcd:一个高可用的键值存储系统,用于存储集群的所有数据和状态信息。
      • kube-scheduler:负责根据调度策略选择适当的节点来运行 Pod。
      • kube-controller-manager:负责运行集群控制器,这些控制器监控集群状态并确保实际状态与期望状态一致。
      • cloud-controller-manager(可选):用于与云提供商交互,管理云环境中的资源。
  2. Worker 节点:

    • 负责运行实际的容器化应用和服务。
    • Worker 节点的主要组件包括:
      • kubelet:负责确保容器运行在 Pod 中,并与 API 服务器通信,报告 Pod 状态。
      • kube-proxy:负责处理网络通信和负载均衡,为服务提供网络代理功能。
      • container runtime:负责实际的容器运行和管理,例如 Docker、containerd 或 CRI-O。

4.组件(Component)

Kubernetes 集群中的各个组件可以分为以下几类:

  1. 控制平面组件:

    • kube-apiserver:提供 API 接口,处理来自用户、控制器和调度器的请求。
    • etcd:存储集群状态和配置信息,保证数据的一致性和持久性。
    • kube-scheduler:负责将 Pod 分配到适当的节点,基于资源需求和调度策略做决策。
    • kube-controller-manager:运行不同的控制器,如 ReplicaSet 控制器、Job 控制器等,确保集群的期望状态与实际状态一致。
    • cloud-controller-manager:(在使用云提供商时)管理云资源,如负载均衡器、卷等。
  2. Node 组件:

    • kubelet:在每个节点上运行,负责管理 Pod 和容器的生命周期,与 API 服务器沟通。
    • kube-proxy:处理网络流量,支持 Service 的负载均衡和网络代理功能。
    • container runtime:负责容器的启动、停止、管理和运行。
  3. 网络和存储组件:

    • Ingress Controller:处理 HTTP 和 HTTPS 请求的路由,根据规则将流量分发到后端服务。
    • Volume Plugins:支持各种存储插件,为 Pod 提供持久存储。
  4. 附加组件:

    • Dashboard:Kubernetes 提供的 Web UI,用于可视化集群和应用的状态。
    • Helm:Kubernetes 的包管理工具,用于简化应用的部署和管理。

二.Kubernetes集群架构

Kubernetes属于典型的Server-Client形式的二层架构

  • Master主要由API Server、Controller-Manager和Scheduler三个组件,以及一个用于集群状态存储的Etcd存储服务组成,它们构成整个集群的控制平面

  • 而每个Node节点则主要包含Kubelet、Kube Proxy及容器运行时(docker是最为常用的实现)三个组件,它们承载运行各类应用容器

API Server

kube-apiserver | Kubernetes

Kubernetes API server 提供了k8s各类资源对象的增删改查及watch等HTTP Rest接口 ,这些对象包括pods 、services、 replicationcontrollers等 ,API Server为REST操作提供服务 ,并为集群的共享状态提供前端 ,所有其他组件都通过该前端进行交互。

  • 该端口默认值为6443 , 可通过启动参数“ -- secure-port ”的值来修改默认值。

  • 默认监听IP为0.0.0.0及本机所有IP , 可以通过 启动参数“ --bind-address ”设置监听指定的 内网IP。

  • 该端口用于接收客户端 、dashboard等外部 HTTPS请求。

  • 实现基于Tocken文件或客户端证书及HTTP Base的认证。

  • 实现基于策略的账户鉴权及准入。

  • 客户端通过API Server实现对kubernetes的API 远程以实现对kubernetes内部资源的增删改查 等管理任务的分发。

  • 整个集群的API网关,相关应用程序为kube-apiserver

  • 基于http/https协议以REST风格提供,几乎所有功能全部抽象为“资源”及相关的“对象”

  • 声明式API,用于只需要声明对象的“终态”,具体的业务逻辑由各资源相关的Controller负责完成

  • 无状态,数据存储于etcd中

 Cluster Store

◼ 集群状态数据存储系统,通常指的就是etcd

◼ 仅会同API Server交互

 Controller Manager

◼ 负责实现客户端通过API提交的终态声明,相应应用程序为kube-controller-manager

◼ 由相关代码通过一系列步骤驱动API对象的“实际状态”接近或等同“期望状态”

◆ 工作于loop模式

 Scheduler

◼ 调度器,负责为Pod挑选出(评估这一刻)最合适的运行节点

◼ 相关程序为kube-scheduler

三.安装部署环境

master: 172.16.227.11

node1:  172.16.227.12

node2:  172.16.227.13

1.初始化系统环境

ubuntu:系统环境初始化

hostnamectl  hostname  master
#主
hostnamectl  hostname  node1
#node1
hostnamectl  hostname  node2
#node2

2.安装容器引擎

k8s 1.23版本之前包括1.23版本使用docker作为容引擎

k8s 1.24版本之后 containerd取代了docker
    containerd:
        是一个开源的容器运行时工具,它为容器提供了核心功能。
        OCI是一个开放标准组织,其主要目标是推动容器技术的开放标准化,以促进容器生态系统的发展和互操作性。
    docker和containerd的区别和联系:
        containerd取代了docker引擎,目的是提高效率。

切换主机的源为阿里源

官网

## Sources Of Ubuntu
阿里云仓库地址:https://opsx.alibaba.com/mirror    https://developer.aliyun.com/mirror/
中科:http://mirrors.ustc.edu.cn/help/ubuntu.html
清华:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
华为:https://mirrors.huaweicloud.com/

sed -i 's/https:\/\/archive.ubuntu.com/http:\/\/mirrors.cloud.aliyuncs.com/g' /etc/apt/sources.list

3. 安装containerd

apt update
	apt install containerd[=版本号] -y
	/lib/systemd/system/containerd.service (二进制安装参考此配置)
	mkdir /etc/containerd/  ## 存放containerd的配置文件
	#配置containerd
	containerd config default > /etc/containerd/config.toml
	修改pause镜像地址:
		sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"  #阿里镜像地址
		sandbox_image = "harbor.hiuiu.com/kubernetes/google_containers/pause:3.9" #本地harbor镜像地址
	修改镜像加速配置
		168       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
		169      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
		170      endpoint = ["https://hzsbbqty.mirror.aliyuncs.com"]
	修改为true
		137             SystemdCgroup =  true
systemctl  restart  containerd

 

 

4.安装crictl工具

下载crictl安装包:
	wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
	安装
	mkdir /usr/local/bin/crictl
	tar xvf crictl-v1.29.0-linux-amd64.tar.gz -C /usr/local/bin/crictl
	vim /etc/profile
	export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/crictl
	source /etc/profile
	crictl -v
	#配置crictl
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: "unix:///run/containerd/containerd.sock"
image-endpoint: "unix:///run/containerd/containerd.sock"
timeout: 10
debug: false
EOF

5.安装nerdctl工具

下载路径
	wget https://github.com/containerd/nerdctl/releases/download/v1.3.0/nerdctl-1.3.0-linux-amd64.tar.gz
	安装
	tar xvf nerdctl-1.7.6-linux-amd64.tar.gz -C /usr/local/bin/
	nerdctl version
	mkdir /etc/nerdctl
cat > /etc/nerdctl/nerdctl.toml <<EOF
namespace = "k8s.io"
debug = false
debug_full = false
insecure_registry = true
EOF

6.CNI工具

CNI是什么?
		为容器提供网桥,如果不安装CNI,容器只有host网络模式。
	安装CNI:
		wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
		
mkdir /opt/cni/bin -p
tar xvf cni-plugins-linux-amd64-v1.5.1.tgz -C /opt/cni/bin/

7.初始化K8S环境

1.安装基本的软件
apt install chrony ipvsadm tree ipset -y

2.关闭防火墙和关闭selinux
systemctl stop ufw

3.关闭swap ,交换分区
		
swapoff -a 
sed -i '/swap.img/s/^/#/' /etc/fstab

4.配置时间服务器
为什么要配置时间服务器?
sed -i 's/pool ntp.ubuntu.com/pool 时间服务器地址/' /etc/chrony/chrony.conf
systemctl restart chronyd

5.加载模块
modprobe br_netfilter && lsmod |grep br_netfilter
modprobe ip_conntrack && lsmod | grep conntrack
cat >/etc/modules-load.d/modules.conf<<EOF
ip_vs
ip_vs_lc
ip_vs_lblc
ip_vs_lblcr
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_dh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
ip_tables
ip_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
xt_set
br_netfilter
nf_conntrack
overlay
EOF
systemctl restart systemd-modules-load.service
lsmod | grep -e ip_vs -e nf_conntrack

6.修改内核参数
vim  /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0

sysctl -p

7.如果是克隆的需要修改machin-id
cat /etc/machine-id
rm -f /etc/machine-id
systemd-machine-id-setup

四.正式安装K8S-kubeadm

1.修改/etc/hosts

11.zxy.com     192.168.240.11   4c2G  master
12.zxy.com     192.168.240.12   4c4G  node1
13.zxy.com     192.168.240.13   4c4G  node2

2.安装kubeadm,kubelet,kubectl

## ----- 线上同学安装方式
	apt update
	apt install apt-transport-https ca-certificates curl gpg
	mkdir -p -m 755 /etc/apt/keyrings
	curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg   
	## 阿里源
	echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" |  tee /etc/apt/sources.list.d/kubernetes.list
	## 安装命令
apt-get update && apt-cache madison kubeadm
apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1
	## ----- 线上同学安装方式

	##线下同学本地安装:
	apt-get update
	apt-get upgrade
	apt-get install socat ebtables conntrack -y
	dpkg -i kubernetes-cni_1.4.0-1.1_amd64.deb
	dpkg -i cri-tools_1.30.1-1.1_amd64.deb
	dpkg -i kubeadm_1.30.3-1.1_amd64.deb 
	dpkg -i kubectl_1.30.3-1.1_amd64.deb 
	dpkg -i kubelet_1.30.3-1.1_amd64.deb 
 #线下需拉取镜像
	bash imagesFromlocal.sh

3.创建MASTER(主上操作)

kubeadm init --v=5 --apiserver-advertise-address=192.168.240.11 \
              --apiserver-bind-port=6443 \
              --kubernetes-version=v1.30.3 \
              --pod-network-cidr=10.200.0.0/16 \
              --service-cidr=10.96.0.0/16 \
              --service-dns-domain=cluster.local \
              --image-repository=registry.aliyuncs.com/google_containers \
              --ignore-preflight-errors=swap

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

4.node节点加入集群

kubeadm join 192.168.240.11:6443 --token 1vowbe.7s6vqmc2r2dc1su1 \
	--discovery-token-ca-cert-hash sha256:7d1aaa5d467cbb98a1d4265c9c9f7acc9ba82a6ec027e4cbd05c70117fde8205

5.查看集群节点

kubectl get nodes

6.拉取镜像

nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.30.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.30.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.30.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.30.3
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.12-0
nerdctl pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1

 五.安装calico

1.主和node解压安装包

tar -zxvf calico-release-v3.28.0.tgz 

2.主和node查找到calico配置文件并修改

root@master:~# cd release-v3.28.0/
root@master:~/release-v3.28.0# ls
bin  images  manifests
root@master:~/release-v3.28.0# cd images/
root@master:~/release-v3.28.0/images# ls
calico-cni.tar  calico-dikastes.tar  calico-flannel-migration-controller.tar  calico-kube-controllers.tar  calico-node.tar  calico-pod2daemon.tar  calico-typha.tar
root@master:~/release-v3.28.0/images# cd ..
root@master:~/release-v3.28.0# cd manifests/
root@master:~/release-v3.28.0/manifests# ls
alp                  calicoctl.yaml           calico-vxlan.yaml  crds.yaml              generate.sh                                   operator-crds.yaml
apiserver.yaml       calico-etcd.yaml         calico.yaml        csi-driver.yaml        grafana-dashboards.yaml                       README.md
calico-bpf.yaml      calico-policy-only.yaml  canal-etcd.yaml    custom-resources.yaml  ocp                                           tigera-operator.yaml
calicoctl-etcd.yaml  calico-typha.yaml        canal.yaml         flannel-migration      ocp-tigera-operator-no-resource-loading.yaml
root@master:~/release-v3.28.0/manifests# vim  calico.yaml 
vim查找  /CALICO_IPV4POOL_CIDR
取消开头注释
- name: CALICO_IPV4POOL_CIDR
  value: "10.200.0.0/16"
root@master:~/release-v3.28.0/manifests# cat calico.yaml | grep image:
          image: docker.io/calico/cni:v3.28.0
          image: docker.io/calico/cni:v3.28.0
          image: docker.io/calico/node:v3.28.0
          image: docker.io/calico/node:v3.28.0
          image: docker.io/calico/kube-controllers:v3.28.0
root@master:~/release-v3.28.0/manifests# 

3.主和node导入镜像

root@master:~/release-v3.28.0/images# nerdctl load -i  calico-cni.tar

root@master:~/release-v3.28.0/images# nerdctl load -i  calico-kube-controllers.tar

root@master:~/release-v3.28.0/images# nerdctl load -i  calico-node.tar

4.主上执行安装

kubectl  apply  -f  calico.yaml

5.拖入镜像查看

kubectl  get nodes
kubectl run  nginx11  --image=harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u sleep 10000
kubectl run  nginx22  --image=harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u sleep 10000
kubectl get pod -o wide
kubectl exec nginx11 -it bash
添加hosts
vim  /etc/hosts
10.200.104.1  nginx22
ping nginx22		  
kubectl exec nginx22 -it bash

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

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

相关文章

鸿蒙(API 12 Beta3版)【DRM会话管理(C/C++)】数字版权保护开发

DRM会话管理&#xff08;MediaKeySession&#xff09;支持媒体密钥管理及媒体解密等&#xff0c;MediaKeySession实例由系统管理里的MediaKeySystem实例创建和销毁。 开发步骤 导入NDK接口&#xff0c;接口中提供了DRM相关的属性和方法&#xff0c;导入方法如下。 #include &…

YoloV8训练单通道数据方法+单通道Onnx模型转换

1. ultralytics/cfg/models/v8/yolov8-xxx.yaml 添加ch: 1 2. ultralytics/utils/checks.py 注释assert amp_allclose(YOLO("yolov8n.pt"), im) 3. ultralytics/nn/tasks.py 添加&#xff1a;batch[img] batch[img][:,:1,:,:] 4. ultralytics/nn/autobacken…

文件存储系统的总结

仪表试验报告整理技巧和反思 仪表调试报告技巧 目的&#xff1a;签字更顺利。报告依据、减少页数、正确率、工作量 表1/2 序号 目的 原因方法 降低签字页数 减少报告页数&#xff0c;增加回路测试类报告的每页信息容量 单元格高度&#xff1a;0.7cm&#xff1b;可以正…

ASP.NET Core 6.0 ServiceCollection 实现依赖注入

ASP.NET Core6 lOC容器 控制反转&#xff08;Inversion of Control, IoC&#xff09;是一种软件设计模式&#xff0c;其目的是降低代码之间的耦合度。在C#中&#xff0c;可以使用依赖注入&#xff08;Dependency Injection, DI&#xff09;来实现控制反转。 一般系统分为 UI …

将iso格式的镜像文件转化成云平台能安装的镜像格式(raw/vhd/QCOW2/VMDK )亲测--图文详解

1.首先,你将你的iso的文件按照正常的流程和需求安装到你的虚拟机中,我这里使用的是vmware,安装完成之后,关机。再次点开你安装好的那台虚拟机的窗口,如下图 选中要导出的镜像,镜像需要关机 2.点击工具栏的文件------选择 导出 整个工程到 ovf 格式—这里你可以选择你要导…

LearnOpenGL——SSAO学习笔记

LearnOpenGL——SSAO学习笔记 SSAO一、基本概念二、样本缓冲三、法向半球四、随机核心转动五、SSAO着色器六、环境遮蔽模糊七、应用SSAO遮蔽因子 SSAO 一、基本概念 环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。散射应…

数字图像处理【14】特征检测——Harris角点检测

在上一篇文章已经介绍了opencv特征检测中的一些必要的概念&#xff0c;介绍了什么是特征&#xff0c;什么是角点&#xff0c;这些角点特征可以做什么。今天来看看对于我们人来说很容易就识别到角点特征&#xff0c;对于计算机来说是如何识别的&#xff0c;具体的步嘴原理是怎样…

78.内存对齐

目录 一.什么是内存对齐 二.为什么要内存对齐 三.视频教程 一.什么是内存对齐 有下面例子 #include <stdio.h>struct TEST {char a;int b; };int main(void) {struct TEST test;test.a A;test.b 1;printf("sizeof %ld\n",sizeof(test));return 0;} …

JVM指令重排序

文章目录 什么是指令重排序编译器优化JIT 编译优化处理器优化重排序数据依赖性 硬件层的内存屏障指令重排的代码验证好处减少管道阻塞提高缓存利用率利用并行执行单元性能提升更好地利用硬件资源 问题内存可见性问题编程复杂性增加调试困难 解决方案&#xff1a;Java内存模型&a…

AICon 全球人工智能与机器学习技术大会参会有感

目录 引言 大会背景 大会议程 参会体验 会后感想 结束语 引言 在数字化浪潮席卷全球的今天&#xff0c;人工智能和机器学习技术已成为推动社会进步和产业升级的关键力量。作为一名对AI技术非常感兴趣的开发者&#xff0c;在 8 月 18 日至 19 日这两天&#xff0c;我有幸参…

代码随想录算法训练营43期 | Day 15——110.平衡二叉树、 257. 二叉树的所有路径、404. 左叶子之和、222. 完全二叉树的节点个数

代码随想录算法训练营 代码随想录算法训练营43期 | Day 15110.平衡二叉树257. 二叉树的所有路径404. 左叶子之和222. 完全二叉树的节点个数 代码随想录算法训练营43期 | Day 15 110.平衡二叉树 /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

【读点论文】Adaptive degraded document image binarization,真难复现,流程有点复杂

Adaptive degraded document image binarization Abstract 本文介绍了一种新的自适应方法&#xff0c;用于对退化文档进行二值化和增强。所提出的方法不需要用户进行任何参数调整&#xff0c;并且可以处理由于阴影、不均匀照明、低对比度、大信号相关噪声、污点和应变而发生的…

Spring 的 Aop 支持

Spring 的 Aop 支持 一、AOP基本概念1_AOP基本术语2_通知类型回顾3_AOP基于代理4_SpringBoot整合AOP 二、整体流程剖析1_AspectJAutoProxyRegistrar2_AnnotationAwareAspectJAutoProxyCreator1_继承结构2_初始化时机3_AnnotationAwareAspectJAutoProxyCreator的作用时机 3_收集…

【C++】_string类字符串详细解析(1)

假如没有给你生命&#xff0c;你连失败的机会都没有。你已经得到了最珍贵的&#xff0c;还需要抱怨什么!&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是string&#xff1f; •&#x1f330;1.string类的概念 •&#x1…

嘉立创PCB4层板

视频&#xff1a; 四层板PCB设计保姆级教程&#xff08;1&#xff09;&#xff1a;3.0HUB设计概述_哔哩哔哩_bilibili&#xff08;虽然是四层板实际这个还是两层板&#xff01;&#xff09; 不太建议看这个。 四层PCB 最简单终教学 高校培训课程 深入浅出 不会电路也能学会 设…

Nginx的核心!!! 负载均衡、反向代理

目录 负载均衡 1.轮询 2.最少连接数 3.IP哈希 4.加权轮询 5.最少时间 6.一致性哈希 反向代理 测试 之前讲过Nginx 的简介和正则表达式&#xff0c;那些都是Nginx较为基础的操作&#xff0c;Nginx 最重要的最核心的功能&#xff0c;当属反向代理和负载均衡了。 负载均…

YOLOv8实例分割+双目相机实现物体尺寸测量

1&#xff0c;YOLOv8实例分割原理介绍 YOLOv8是YOLO系列的最新版本&#xff0c;它在目标检测和实例分割方面都进行了显著的改进和创新。以下是YOLOv8实例分割原理的一些关键点&#xff1a; 先进的骨干和颈部架构&#xff1a;YOLOv8采用了先进的骨干和颈部架构来提高特征提取和物…

分治,1875C - Jellyfish and Green Apple

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1875C - Jellyfish and Green Apple 二、解题报告 1、思路分析 n 个苹果…

小阿轩yx-Kubernetes Pod入门

小阿轩yx-Kubernetes Pod入门 前言 Kubernetes 中 一个重要的概念就是 Pod&#xff08;豆荚&#xff09;并不直接管理容器&#xff0c;它的最小管理单元叫做 Pod。 Docker 应用中 把一个应用程序封装在一个镜像中&#xff0c;之后启动这个镜像并映射个宿主机端口号&#x…

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…