kubeadm 安装k8s

news2024/9/24 8:34:22

目录

安装k8s

环境准备

所有节点,关闭防火墙规则,关闭selinux,关闭swap交换(必须关闭swap分区)

 //修改主机名

 //所有节点修改hosts文件

 //调整内核参数

所有节点安装docker 

所有节点安装kubeadm,kubelet和kubectl

定义kubernetes源

开机自启kubelet

部署K8S集群

查看初始化需要的镜像

//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录

复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件

 方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

//设定kubectl 

如果 kubectl get cs 发现集群不健康,更改以下两个文件

部署网络插件flannel

创建 pod 资源

部署 Dashboard

安装Harbor私有仓库

 kubeadm内核参数优化方案


安装k8s

master(2C/4G/cpu核心数要求大于2) 192.168.158.20	 docker、kubeadm、kubelet、kubectl、flannel
node01(2C/2G)			          192.168.158.21 docker、kubeadm、kubelet、kubectl、flannel
node02(2C/2G)		 	          192.168.158.22 docker、kubeadm、kubelet、kubectl、flannel
Harbor节点(hub.kgc.com)          192.168.158.23 docker、docker-compose、harbor-offline-v1.2.2

1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Node,将节点加入Kubernetes集群中
5、部署 Dashboard Web 页面,可视化查看Kubernetes资源
6、部署 Harbor 私有仓库,存放镜像资源

环境准备

master、node01、node02操作

所有节点,关闭防火墙规则,关闭selinux,关闭swap交换(必须关闭swap分区)

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a			#交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab	#永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

 //修改主机名

hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

 //所有节点修改hosts文件

vim /etc/hosts
192.168.158.20 master01
192.168.158.21 node01
192.168.158.22 node02

 //调整内核参数

cat > /etc/sysctl.d/kubernetes.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
EOF

所有节点安装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.io

#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。

systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 

docker info | grep "Cgroup Driver"
Cgroup Driver: systemd

所有节点安装kubeadm,kubelet和kubectl

定义kubernetes源

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

开机自启kubelet

systemctl enable kubelet.service
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

部署K8S集群

查看初始化需要的镜像

kubeadm config images list

//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录

unzip v1.20.11.zip -d /opt/k8s
cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件

scp -r /opt/k8s root@node01:/opt
scp -r /opt/k8s root@node02:/opt

 node01节点上操作

cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

 node02节点上操作

cd /opt/k8s/v1.20.11
for i in $(ls *.tar); do docker load -i $i; done

 master 节点上操作此处选用方法二的命令

//初始化kubeadm
方法一:
kubeadm config print init-defaults > /opt/kubeadm-config.yaml

cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12   advertiseAddress: 192.168.10.19		#指定master节点的IP地址
13   bindPort: 6443
......
34 kubernetesVersion: v1.20.11				#指定kubernetes版本号
35 networking:
36   dnsDomain: cluster.local
37   podSubnet: "10.244.0.0/16"				#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38   serviceSubnet: 10.96.0.0/16			#指定service网段
39 scheduler: {}
#末尾再添加以下内容
--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs									#把默认的kube-proxy调度方式改为ipvs模式

kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,K8S V1.16版本开始替换为 --upload-certs
#tee kubeadm-init.log 用以输出日志

//查看 kubeadm-init 日志
less kubeadm-init.log

//kubernetes配置文件目录
ls /etc/kubernetes/

//存放ca等证书和密码的目录
ls /etc/kubernetes/pki		
我使用方法二
方法二:
kubeadm init \
--apiserver-advertise-address=192.168.10.19 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.11 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0

初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
--service-cidr:service资源的网段
--service-dns-domain:service全域名的后缀,默认是cluster.local
--token-ttl:默认token的有效期为24小时,如果不想过期,可以加上 --token-ttl=0 这个参数 

 方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

kubectl edit cm kube-proxy -n=kube-system
修改mode: ipvs

//设定kubectl 

kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。

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

如果 kubectl get cs 发现集群不健康,更改以下两个文件

vim /etc/kubernetes/manifests/kube-scheduler.yaml 
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.10.19		#修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.10.19(有两处)
#- --port=0					# 搜索port=0,把这一行注释掉

systemctl restart kubelet
systemctl enable kubelet

#再次查看健康状态
kubectl get cs

部署网络插件flannel

node01操作

方法一此文使用的是此方法:
#所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
cd /opt
scp kuadmin-flannel.zip node02:/opt/
#解压
unzip kuadmin-flannel.zip
#加载
docker load -i flannel-cni-v1.2.0.tar 
docker load -i flannel-v0.22.2.tar 
#创建并解压到相关目录
mv cni cni_bak
mkdir cni/bin -p
tar zxvf cni-plugins-linux-amd64-v1.2.0.tgz -C cni/bin
#查看新的文件
ll cni/bin/

node02操作

cd /opt
unzip kuadmin-flannel.zip
docker load -i flannel-cni-v1.2.0.tar 
docker load -i flannel-v0.22.2.tar 
mv cni cni_bak
mkdir cni/bin -p
tar zxvf cni-plugins-linux-amd64-v1.2.0.tgz -C cni/bin
#查看新的文件
ll cni/bin/

scp kube-flannel.yml master01:/opt/

node01和node02节点操作

#执行 kubeadm join 命令加入群集
#复制master中执行过这个命令的kubeadm init \在node节点操作
kubeadm join 192.168.198.11:6443 --token 41u9qh.bku8bq9t8ibxejxs \
    --discovery-token-ca-cert-hash sha256:0f128acf6bec78b03810ea3f6cb5c0bb10da0adeb2bc8a1dcffe385a12bb3293 

在master节点操作

#在master节点查看节点状态
kubectl get nodes

#在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml 

#再次查看节点状态
kubectl get nodes

kubectl get pods -n kube-system
kubectl get pods -n kube-flannel

如执行kubectl get pods -n kube-flannel发现有不是running或者查看节点状态 kubectl get
nodes出现NoReady

解决方法:查看所有的机器防火墙等是否关闭

执行:

删除再次生成

kubectl delete -f kube-flannel.yml

kubectl apply -f kube-flannel.yml

执行后需等待可再次查看状态

kubectl get pods -n kube-flannel

创建 pod 资源

在master节点操作

#创建 pod 资源创建
kubectl create deployment nginx --image=nginx
#查看创建的资源,需等待
kubectl get pods -o wide

#暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc
或kubectl get service

#测试访问
curl http://node01:32404
注意此处的端口是kubectl get svc执行出来的nginx端口
http://192.168.198.12:31128/

#扩展pod副本(3个)
kubectl scale deployment nginx --replicas=3
#刷新查看pod,需等待查看
kubectl get pods -o wide

部署 Dashboard

master01 节点上操作

#上传dashboard.tar到opt下
scp dashboard.tar node01:/opt
scp dashboard.tar node02:/opt

node节点上操作

#加载
docker load -i dashboard.tar 

master01 节点上操作

#在 master01 节点上操作
#上传 recommended.yaml 文件到 /opt/k8s 目录中
cd /opt/k8s
vim recommended.yaml

#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:

   - port: 443
     targetPort: 8443
     nodePort: 30001     
       type: NodePort         
       selector:
         k8s-app: kubernetes-dashboard
#启动
kubectl apply -f recommended.yaml
#
#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InZuekF5cFVGVHpjc24xRm05Q2x4aGp0UmRUdGlqMUxSZHVoyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYnBna2MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvY3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOTBhYTExYWEtMDRkMy00MTFmMzMyMTQ0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbnU4g-OFJStZDxjQiicaUh8Ef947W7zuRYWzHXQX7gfQZN75CGhXOGtbzIEbF_UuIjAueb1FV9F3T34aEY3aOLiQ1HD0HMImjkvxHUyNOMFAjShRrSHKQtVkcrBIKtSdSFag5yn3Y4d7H4KVHMGn9Aw26JYCqBgcWeBrm8ebEHFY8LaiqXtJXUcYB23M5rQV4OVHcuPYYfg_iiL7_24Z7HOKGiGTBdbaSQNwJEBJQX-2K6aoZOwe73LATR1WxEigyALoFS7Bf2fLy3FWAAQmj3Bu3kw

#查看创建的所有即有创建的用户dashboard-admin
kubectl -n kube-system get sa

#使用输出的token登录Dashboard
#此处是nodeIP地址
https://192.168.198.12:30001

空敲this is unsafe (不用空格),回车即可

选择token输入查到的token登录即可

安装Harbor私有仓库

Harbor节点上操作

#修改主机名
hostnamectl set-hostname hub.blue.com
bash
#关闭防火墙规则,关闭selinux,关闭swap交换
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

所有节点上操作

#所有节点加上主机名映射
echo '192.168.198.14 hub.blue.com' >> /etc/hosts

Harbor节点上操作

#安装 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.io

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["https://hub.blue.com"]
}
EOF
systemctl start docker
systemctl enable docker

Harbor节点上操作

#安装 Harbor
#上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose

tar zxvf harbor-offline-installer-v1.2.2.tgz
cd harbor/
vim harbor.cfg
5  hostname = hub.blue.com
9  ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor12345

 

#生成证书
mkdir -p /data/cert
cd /data/cert
#生成私钥,2048密码长度数值
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456

#生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123456
输入国家名:CN
输入省名:NJ
输入市名:NJ
输入组织名:BLUE
输入机构名:BLUE
输入域名:hub.blue.com
输入管理员邮箱:admin@blue.com
其它全部直接回车
#备份私钥
cp server.key server.key.org
#清除私钥密码
openssl rsa -in server.key.org -out server.key
输入私钥密码:123456
#签名证书,x509证书认证格式,-signkey迁移到server.key
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt

ls
chmod +x /data/cert/*

 

cd /opt/harbor/
./install.sh
docker-compose ps

在本地使用火狐浏览器访问:https://hub.blue.com
添加例外 -> 确认安全例外
用户名:admin
密码:Harbor12345

node02节点上操作

#在一个node节点上登录harbor
docker login -u admin -p Harbor12345 https://hub.blue.com

 

报错:

docker login -u admin -p Harbor12345 https://hub.blue.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get “https://hub.blue.com/v2/”: tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

证书验证失败的问题。这可能是由于 Harbor 的 SSL 证书未正确配置,导致 Docker 无法验证证书的有效性。

考虑更新 Harbor 的 SSL 证书,确保证书中的 Subject Alternative Names (SANs) 字段正确配置,并包含正确的登录地址和其他必要信息。获取有效的 SSL 证书

(1)从新获取证书验证

(2)重新部署Harbor服务器,注意添加node主机、harbor主机名映射

(3)node 节点都修改 docker 配置文件结束后需要重启

systemctl daemon-reload
systemctl restart docker

 

#上传镜像
#Docker 镜像重命名
docker tag nginx:latest hub.blue.com/library/nginx:v1
docker push hub.blue.com/library/nginx:v1

master01节点上操作

#在master节点上删除之前创建的nginx资源
kubectl get pods
kubectl delete deployment nginx

kubectl create deployment nginx-deployment --image=hub.blue.com/library/nginx:v1 --port=80 --replicas=3

kubectl expose deployment nginx-deployment --port=30000 --target-port=80

kubectl get svc,pods
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP        16h
service/nginx              NodePort    10.96.213.1     <none>        80:31128/TCP   15h
service/nginx-deployment   ClusterIP   10.96.165.162   <none>        30000/TCP      7s

NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-6cff9b4c45-l892b   1/1     Running   0          23s
pod/nginx-deployment-6cff9b4c45-qjc87   1/1     Running   0          23s
pod/nginx-deployment-6cff9b4c45-tcwjx   1/1     Running   0          23s

yum install ipvsadm -y

ipvsadm -Ln

node节点操作

curl 10.96.165.162:30000

 master01节点操作,对外访问

kubectl edit svc nginx-deployment
#把调度策略改成NodePort,26行   
type: NodePort						
kubectl get svc

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP           16h
nginx              NodePort    10.96.213.1     <none>        80:31128/TCP      15h
nginx-deployment   NodePort    10.96.165.162   <none>        30000:31231/TCP   4m8s
浏览器访问:
192.168.198.11:31231
192.168.198.12:31231
192.168.198.13:31231

 

 

#将cluster-admin角色权限授予用户system:anonymous,设置用户的管理员权限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

 kubeadm内核参数优化方案

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0									#禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1							#不检查物理内存是否够用
vm.panic_on_oom=0								#开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963							#指定最大文件句柄数
fs.nr_open=52706963								#仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

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

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

相关文章

在线考试组卷Word文档导出|废纸篓|支持搜索组员查看练习情况|官网上线

土著刷题微信小程序v1.16&#xff0c;主要是对系统功能的优化&#xff0c;同时迭代开发了反馈热度比较高的【在线考试组卷word文档导出】和废纸篓功能。 下面将逐条介绍一下这一版的新功能和优化点。 在线考试组卷Word文档导出 【组卷Word导出】这个功能对于线下组织考试是个刚…

自动化运维工具Ansible教程(二)【进阶篇】

文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题&#xff08;例如&#xff1a;角色、动态清单、变量管理等&#xff09;**1. 角色&#xff08;Roles&#xff09;**&#x…

linux-进程-execl族函数

exec函数的作用&#xff1a; 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时&#xff0c;该进程被完全替换为新程序。因为调用exec函数并不创建新进程&#xff0c;所以前后进程的ID并没有改变。 简单来说就是&…

看完这篇 教你玩转渗透测试靶机Vulnhub——Momentum:1

Vulnhub靶机Momentum:1渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞发现&#xff1a;③&#xff1a;漏洞利用&#xff1a;④&#…

《Effective STL》读书笔记(二):vector和string

vector 和 string 优先于动态分配数组 当使用new动态分配内存时&#xff0c;我们需要关注以下内容 必须保证动态分配的内存会被delete&#xff0c;否则会造成资源泄露必须确保使用了正确的delete形式。如果分配了单个对象&#xff0c;则必须使用delete&#xff1b;如果分配了…

选择最适合您的Bug管理软件:市场比较与推荐

“Bug管理软件哪家好&#xff1f;市场上有许多优秀的Bug管理系统品牌如&#xff1a;Zoho Projects、JIRA、Redmine、Bugzilla、MantisBT。” 一款高效的Bug管理系统可以帮助团队更有效地发现、记录和解决软件中的问题&#xff0c;从而提高产品质量和用户满意度。本文将为您介绍…

JavaScript基础07——变量拓展-数组

哈喽&#xff0c;大家好&#xff0c;我是雷工! 每天打卡学习一点点&#xff0c;今天继续学习JavaScript基础知识&#xff0c;以下是学习笔记。 一、数组的基本介绍 数组 &#xff08;Array&#xff09;——一种将一组数据存储在单个变量名下的优雅方式。 数组的作用和变量一样…

【电源专题】典型设备的接地设计

在文章:【电源专题】接地的类型 中我们讲到不同的历史时期接地概念是不同的,有为了安全的电气接地和物理接地,也有为了提供参考电位的接地。 那么在设备接地的设计中,我们会怎么进行操作呢? 在文章【电源专题】接地的类型讲到一个混合接地的例子,我们可以把大功率的地接…

DF竞赛平台化身隐私计算大赛“超强助攻”,助力打造专业人才试炼场!

在技术可用性提升、应用需求增强以及政策大力支持的共同作用下&#xff0c;作为保障数据要素安全可信流通的有效技术手段&#xff0c;隐私计算技术火热发展&#xff0c;应用开始逐渐落地。在此背景下&#xff0c;中国信息通信研究院和中国通信学会联合行业多方力量&#xff0c;…

【MySQL】MySQL的安装,登录,配置和相关命令

文章目录 前言一. 卸载不需要的环境二. 获取MySQL的yum源三. 安装MySQL和启动四. 尝试登录MySQL方法1&#xff1a;获取临时root密码方法2&#xff1a;没有密码方法3&#xff1a;配置文件 五. 简单配置结束语 前言 本篇文章是基于云服务器&#xff1b;Linux&#xff1a;Centos7…

【excel密码】excel文件加密方法总结:

想要给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff0c;只有输入了正确的密码才能打开并且编辑文件&#xff0c;如果密码错误…

[A题]2023 年全国大学生数学建模比赛思路、代码更新中.....

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java高并发系列: 使用wait - notify实现高效异步方法

1. 背景 在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示: 2. 一个简…

Discourse 附件无法显示的跟进

今天登录表以后&#xff0c;发现数据又被清理了部分。 然后我们又重新使用 SQL 导入了数据。 这个让我们感觉 Discourse 的系统中应该设置了自动清理程序&#xff0c;在这个自动清理程序中会对认为没有使用的附件或者图片进行清理。 因为我们更换了存储空间&#xff0c;所以这…

在Linux中使用shell指令完成文件打包、压缩、解压缩

一、写一个1.sh脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件dir在dir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移动到dir1中解压dir1中的压缩包…

triton 客戶端用https协议访问服务

背景 平时调用模型服务&#xff0c;都是用httpIP的链接调用。但由于笔者环境的特殊性&#xff0c;访问模型必须经过一个https的公网URL&#xff0c;所以&#xff0c;如何用triton client访问https链接成为了一个问题 参考 TensorRT&Triton学习笔记(一)&#xff1a;trito…

win7安装python3.8.10遇到的问题及解决办法和相关资源

在我的另一篇文章中&#xff0c;已经测试了win7安装不了python3.10.8 https://blog.csdn.net/kxltsuperr/article/details/132666737 那么&#xff0c;经过搜索&#xff0c;说win7最高可以安装python3.8.10&#xff0c;于是进行安装&#xff0c;结果报错&#xff0c;如下图&a…

【实战】React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(总结展望篇)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

结构型模式-过滤器模式

允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式&#xff0c;它结合多个标准来获得单一标准。 AllArgsConstructor Data public class Person {private String name;private String gender;p…

【Three.js】第二十一章 Physics 物理

介绍 物理是WebGL可以添加到项目体验中最酷的功能之一。人们喜欢真实物理感的物体&#xff0c;看到它们碰撞、倒塌、坠落和弹跳&#xff0c;就像我的作品集一样&#xff1a; https: //bruno-simon.com/ 有很多方法可以将物理功能添加到您的项目中&#xff0c;这取决于您想要实…