k8s的环境配置

news2024/9/25 1:19:55

一、前期系统环境准备

准备3台主机:硬盘50G cpu2个 内存2G

1、3台主机同时配置

1)关闭防火墙与selinux、NetworkManager
 [root@k8s-master ~]# systemctl stop firewalld
 [root@k8s-master ~]# systemctl disable firewalld
 Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
 Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
 [root@k8s-master ~]# setenforce 0
 [root@k8s-master ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
 [root@k8s-master ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
 [root@k8s-master ~]# systemctl disable --now NetworkManager
2)配置yum源
 [root@k8s-master yum.repos.d]# ls
 CentOS-Base.repo  epel.repo 
 docker-ce.repo    epel-testing.repo  kubernetes.repo
 [root@k8s-master ~]# yum clean all && yum makecache
3)配置主机映射
 [root@k8s-master ~]# yum -y install vim
 [root@k8s-master ~]# vim /etc/hosts
 10.0.0.66 k8s-master
 10.0.0.77 k8s-node01
 10.0.0.88 k8s-node02
4)配置主机间免密登录
 [root@k8s-master ~]# ssh-keygen 
 [root@k8s-master ~]# ssh-copy-id 10.0.0.77
 [root@k8s-master ~]# ssh-copy-id 10.0.0.88
5)安装必备工具
 [root@k8s-master ~]# yum install wget jq psmisc net-tools telnet yum-utils device-mapper-persistent-data lvm2 git tree -y
6)关闭swap 分区
 [root@k8s-master ~]# swapoff -a && sysctl -w vm.swappiness=0
 [root@k8s-master ~]# sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
7)同步时间
 [root@k8s-master ~]# yum -y install ntpdate
 [root@k8s-master ~]# ntpdate time2.aliyun.com
  4 Sep 10:08:59 ntpdate[1897]: adjust time server 203.107.6.88 offset 0.007780 sec
 [root@k8s-master ~]# which ntpdate
 /usr/sbin/ntpdate
 [root@k8s-master ~]# crontab -e
 * 5 * * * /usr/sbin/ntpdate time2.aliyun.com
 [root@k8s-master ~]# crontab -l
 * 5 * * * /usr/sbin/ntpdate time2.aliyun.com
8)配置 limit
 [root@k8s-master ~]# ulimit -SHn 65535 
 [root@k8s-master ~]# vim /etc/security/limits.conf 
 # 末尾添加如下内容
 * soft nofile 65536
 * hard nofile 131072
 * soft nproc 65535
 * hard nproc 655350
 * soft memlock unlimited
 * hard memlock unlimited

2、只有master主机配置

1)安装 k8s ⾼可⽤性 Git 仓库并重启
 # 在/root/⽬录下克隆⼀个名为k8s-ha-install.git的 Git仓库
 [root@k8s-master ~]# cd /root/ ; git clone https://gitee.com/dukuan/k8s-ha-install.git
 [root@k8s-master ~]# ls
 anaconda-ks.cfg  k8s-ha-install
 # 后续配置功能性pod的yaml文件
 [root@k8s-master k8s-ha-install]# tree -L 2
 .
 ├── calico.yaml
 ├── krm.yaml
 ├── LICENSE
 ├── metrics-server-0.3.7
 │   └── components.yaml
 ├── metrics-server-3.6.1
 │   ├── aggregated-metrics-reader.yaml
 │   ├── auth-delegator.yaml
 │   ├── auth-reader.yaml
 │   ├── metrics-apiservice.yaml
 │   ├── metrics-server-deployment.yaml
 │   ├── metrics-server-service.yaml
 │   └── resource-reader.yaml
 └── README.md
 2 directories, 12 files

二、配置内核模块

1、3台主机同时配置

使用该工具可以同时操作多个主机

1)配置ipvs模块
 [root@k8s-master ~]# yum install ipvsadm ipset sysstat conntrack libseccomp -y
 [root@k8s-master ~]# modprobe -- ip_vs
 [root@k8s-master ~]# modprobe -- ip_vs_rr
 [root@k8s-master ~]# modprobe -- ip_vs_wrr
 [root@k8s-master ~]# modprobe -- ip_vs_sh
 [root@k8s-master ~]# modprobe -- nf_conntrack
 # 在系统启动时加载下列 IPVS 和相关功能所需的模块
 [root@k8s-master ~]# vim /etc/modules-load.d/ipvs.config
 ip_vs
 ip_vs_lc
 ip_vs_wlc
 ip_vs_rr
 ip_vs_wrr
 ip_vs_lblc
 ip_vs_lblcr
 ip_vs_dh
 ip_vs_sh
 ip_vs_fo
 ip_vs_nq
 ip_vs_sed
 ip_vs_ftp
 ip_vs_sh
 nf_conntrack
 ip_tables
 ip_set
 xt_set
 ipt_set
 ipt_rpfilter
 ipt_REJECT
 ipip
 # 加载系统内核参数并应用它们
 [root@k8s-master ~]# sysctl --system
 # 开机⾃启systemd默认提供的⽹络管理服务
 [root@k8s-master ~]# systemctl enable systemd-modules-load.service
 [root@k8s-master ~]# systemctl start systemd-modules-load.service
 # 在已加载的内核模块列表中查找与 ip_vs(IP Virtual Server,IP 虚拟服务器)和 nf_conntrack(Netfilter Connection Tracking,网络过滤器连接跟踪)相关的模块信息
 [root@k8s-master ~]# lsmod | grep -e ip_vs -e nf_conntrack
 ip_vs_sh               12688  0 
 ip_vs_wrr              12697  0 
 ip_vs                 141432  4 ip_vs_sh,ip_vs_wrr
 nf_conntrack          133053  1 ip_vs
 libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
2)配置k8s内核
 [root@k8s-master ~]# vim /etc/sysctl.d/k8s.conf
 net.bridge.bridge-nf-call-iptables = 1
 net.bridge.bridge-nf-call-ip6tables = 1
 fs.may_detach_mounts = 1
 net.ipv4.conf.all.route_localnet = 1
 vm.overcommit_memory=1
 vm.panic_on_oom=0
 fs.inotify.max_user_watches=89100
 fs.file-max=52706963
 fs.nr_open=52706963
 net.netfilter.nf_conntrack_max=2310720
 net.ipv4.tcp_keepalive_time = 600
 net.ipv4.tcp_keepalive_probes = 3
 net.ipv4.tcp_keepalive_intvl =15
 net.ipv4.tcp_max_tw_buckets = 36000
 net.ipv4.tcp_tw_reuse = 1
 net.ipv4.tcp_max_orphans = 327680
 net.ipv4.tcp_orphan_retries = 3
 net.ipv4.tcp_syncookies = 1
 net.ipv4.tcp_max_syn_backlog = 16384
 net.ipv4.ip_conntrack_max = 65536
 net.ipv4.tcp_max_syn_backlog = 16384
 net.ipv4.tcp_timestamps = 0
 # 保存后,所有节点重启,保证重启后内核依然加载
 [root@k8s-master ~]# reboot

三、基本组件安装

1、3台主机同时配置

1)安装 Containerd
 # 卸载之前的containerd
 [root@k8s-master ~]# yum remove -y podman runc containerd
 # 安装Docker和containerd
 [root@k8s-master ~]# yum install containerd.io docker-ce dockerce-cli -y
 [root@k8s-master ~]# yum list installed | grep docker
 containerd.io.x86_64            1.6.33-3.1.el7                 @docker-ce-stable
 docker-buildx-plugin.x86_64     0.14.1-1.el7                   @docker-ce-stable
 docker-ce.x86_64                3:26.1.4-1.el7                 @docker-ce-stable
 docker-ce-cli.x86_64            1:26.1.4-1.el7                 @docker-ce-stable
 docker-ce-rootless-extras.x86_64
                                 26.1.4-1.el7                   @docker-ce-stable
 docker-compose-plugin.x86_64    2.27.1-1.el7                   @docker-ce-stable
2)配置 Containerd 所需模块
 [root@k8s-master ~]# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
 overlay
 br_netfilter
 EOF
 [root@k8s-master ~]# modprobe -- overlay
 [root@k8s-master ~]# modprobe -- br_netfilter
3)配置 Containerd 所需内核
 [root@k8s-master ~]# cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
 net.bridge.bridge-nf-call-iptables  = 1
 net.ipv4.ip_forward                 = 1 
 net.bridge.bridge-nf-call-ip6tables = 1 
 EOF
 [root@k8s-master ~]# sysctl --system
4)Containerd 配置⽂件
 [root@k8s-master ~]# mkdir -p /etc/containerd
 # 读取containerd的配置并保存到/etc/containerd/config.toml
 [root@k8s-master ~]# containerd config default | tee /etc/containerd/config.toml
 [root@k8s-master ~]# vim /etc/containerd/config.toml 
 # 找到第63行修改为sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
 # 找到containerd.runtimes.runc.options模块,添加SystemdCgroup = true,如果已经存在则直接修改(在第127行)
 # 添加sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"(第128行)
 # 加载systemctl控制脚本
 [root@k8s-master ~]# systemctl daemon-reload
 # 启动containerd并设置开机启动
 [root@k8s-master ~]# systemctl enable --now containerd
 Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
5)配置 crictl 客户端连接的运⾏位置
 # 配置容器运⾏环境的crictl.yml⽂件
 [root@k8s-master ~]# cat <<EOF | sudo tee /etc/crictl.yaml
 runtime-endpoint: unix:///run/containerd/containerd.sock
 image-endpoint: unix:///run/containerd/containerd.sock
 timeout: 10 
 debug: false 
 EOF
6)安装 Kubernetes 组件
 # 安装 Kubeadm、Kubelet 和 Kubectl
 [root@k8s-master ~]# yum install kubeadm-1.28* kubelet-1.28* kubectl-1.28* -y
 [root@k8s-master ~]# systemctl daemon-reload
 [root@k8s-master ~]# systemctl enable --now kubelet
 Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
 [root@k8s-master ~]# yum list installed | grep kube
 cri-tools.x86_64                1.26.0-0                       @kubernetes      
 kubeadm.x86_64                  1.28.2-0                       @kubernetes      
 kubectl.x86_64                  1.28.2-0                       @kubernetes      
 kubelet.x86_64                  1.28.2-0                       @kubernetes      
 kubernetes-cni.x86_64           1.2.0-0                        @kubernetes
问题解决:kubelet启动失败

 # 查看日志
 [root@k8s-master ~]# vim /var/log/messages
 # 配置文件未生成,重新安装kubelet

 # 问题解决:
 [root@k8s-master ~]# yum -y remove kubelet
 [root@k8s-master ~]# yum -y install kubelet-1.28*
 [root@k8s-master ~]# systemctl start kubelet
 [root@k8s-master ~]# systemctl status kubelet
 Active: active (running) since 三 2024-09-11 14:25:57 CST; 3s ago
 # 由于kubeadm依赖kubelet所以卸载前者时后者也卸载了,需要重新安装
 [root@k8s-master ~]# yum -y install kubeadm-1.28*
 # 查看kubelet端口是否启动
 [root@k8s-master ~]# netstat -lntup | grep kube
 tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      2392/kubelet        
 tcp6       0      0 :::10250                :::*                    LISTEN      2392/kubelet        
 tcp6       0      0 :::10255                :::*                    LISTEN      2392/kubelet 

2、只有master主机配置(Kubernetes 集群初始化)

1)Kubeadm 配置⽂件
 [root@k8s-master ~]# vim  kubeadm-config.yaml 
 # 粘贴文件内容并修改文件
 # 修改第12行、24行、29行的ip地址为自己本机的ip地址
 piVersion: kubeadm.k8s.io/v1beta3
 bootstrapTokens:
 - groups:
   - system:bootstrappers:kubeadm:default-node-token
   token: 7t2weq.bjbawausm0jaxury
   ttl: 24h0m0s
   usages:
   - signing
   - authentication
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 10.0.0.66
   bindPort: 6443
 nodeRegistration:
   criSocket: unix:///var/run/containerd/containerd.sock
   name: k8s-master
   taints:
   - effect: NoSchedule
     key: node-role.kubernetes.io/control-plane
 ---
 apiServer:
   certSANs:
   - 10.0.0.66
   timeoutForControlPlane: 4m0s
 apiVersion: kubeadm.k8s.io/v1beta3
 certificatesDir: /etc/kubernetes/pki
 clusterName: kubernetes
 controlPlaneEndpoint: 10.0.0.66:6443
 controllerManager: {}
 etcd:
    local:
      dataDir: /var/lib/etcd
 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
 kind: ClusterConfiguration
 kubernetesVersion: v1.28.2
 networking:
   dnsDomain: cluster.local
   podSubnet: 172.16.0.0/16
   serviceSubnet: 10.96.0.0/16
 scheduler: {}
 # 将旧的kubeadm配置⽂件转换为新的格式
 [root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
2)下载组件镜像
 # 通过新的配置⽂件new.yaml从指定的阿⾥云仓库拉取kubernetes组件镜像
 [root@k8s-master ~]# kubeadm config images pull --config /root/new.yaml 
3)集群初始化
 [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
 # 根据提示信息完成配置
 [root@k8s-master ~]# mkdir -p $HOME/.kube
 [root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 [root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
 # 将node结点加入集群的信息保存到一个文件中,以便使用
 [root@k8s-master ~]# vim k8s.txt
 kubeadm join 10.0.0.66:6443 --token 7t2weq.bjbawausm0jaxury \
     --discovery-token-ca-cert-hash sha256:f3ac431e03dae7f972728eb71eef1828264d42ec20a163893c812a2a0289cf99
问题解决:集群初始化失败

 # 端口18258正被kubelet使用,初始化会自动启动kubelet,所以手动关闭kubelet服务
 [root@k8s-master ~]# systemctl stop kubelet
 # 修改ip_forward文件内容
 [root@k8s-master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
 [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs

 # 错误信息显示本机内存不够,cpu数量不够,我们现在将本机内存提到4个G,cpu数量提到4个
 # 注意要关闭本主机然后进行修改主机配置的操作
 [root@k8s-master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
 [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs

 # 检查kubelet为运行状态
 [root@master ~]# systemctl status kubelet
   Active: active (running) since 五 2024-09-06 17:33:30 CST; 5min ago
 # 可能是配置文件的地址没有改,所以找不到主机,所以超时
 [root@k8s-master ~]# vim new.yaml
 # 修改第12行、24行、29行的ip地址为自己本机的ip地址
 # 初始化重置
 [root@k8s-master ~]# kubeadm reset -f ; ipvsadm --clear ; rm -rf ~/.kube
 [root@k8s-master ~]# kubeadm init --config /root/new.yaml --upload-certs
4)加载环境变量
 [root@k8s-master ~]# vim /root/.bashrc
 export KUBECONFIG=/etc/kubernetes/admin.conf
 [root@k8s-master ~]# source /root/.bashrc
5)查看组件容器状态
状态名称中文说明
pending挂起当前pod没有工作
running运行中当前pod正常工作
containercreating正在创建容器正在创建容器
 [root@k8s-master ~]# kubectl get po -A
 NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
 kube-system   coredns-6554b8b87f-2v4tx             0/1     Pending   0          52m
 kube-system   coredns-6554b8b87f-zfqlb             0/1     Pending   0          52m
 kube-system   etcd-k8s-master                      1/1     Running   0          52m
 kube-system   kube-apiserver-k8s-master            1/1     Running   0          52m
 kube-system   kube-controller-manager-k8s-master   1/1     Running   0          52m
 kube-system   kube-proxy-9r6st                     1/1     Running   0          52m
 kube-system   kube-proxy-lx5wz                     1/1     Running   0          22m
 kube-system   kube-proxy-xmk6s                     1/1     Running   0          25m
 kube-system   kube-scheduler-k8s-master            1/1     Running   0          52m
6)查看集群信息
 [root@k8s-master ~]# kubectl get node
 NAME         STATUS     ROLES           AGE   VERSION
 k8s-master   NotReady   control-plane   25s   v1.28.2
7)Token 过期处理

Token 过期后⽣成新的 token:

 kubeadm token create --print-join-command

Master 需要⽣成 --certificate-key:

 kubeadm init phase upload-certs  --upload-certs

3、node结点执行

1)加入集群
 [root@k8s-node01 ~]# kubeadm join 10.0.0.66:6443 --token 7t2weq.bjbawausm0jaxury \
 > --discovery-token-ca-cert-hash sha256:f3ac431e03dae7f972728eb71eef1828264d42ec20a163893c812a2a0289cf99
问题解决:加入集群失败

 # 端口被占用,手动停止kubelet,加入集群的过程中会自动启动
 [root@k8s-node01 ~]# systemctl stop kubelet
 Warning: kubelet.service changed on disk. Run 'systemctl daemon-reload' to reload units.
 # 修改ip_forward文件
 [root@k8s-node01 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
 [root@k8s-node01 ~]# kubeadm join 10.0.0.66:6443 --token 7t2weq.bjbawausm0jaxury --discovery-token-ca-cert-hash sha256:f3ac431e03dae7f972728eb71eef1828264d42ec20a163893c812a2a0289cf99

4、master主机执行(Calico 组件安装)

1)查看集群状态与容器状态
 [root@k8s-master ~]# kubectl get node
 NAME         STATUS     ROLES           AGE    VERSION
 k8s-master   NotReady   control-plane   31m    v1.28.2
 k8s-node01   NotReady   <none>          4m4s   v1.28.2
 k8s-node02   NotReady   <none>          57s    v1.28.2
 [root@k8s-master ~]# kubectl get po -A
 NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
 kube-system   coredns-6554b8b87f-2v4tx             0/1     Pending   0          52m
 kube-system   coredns-6554b8b87f-zfqlb             0/1     Pending   0          52m
 kube-system   etcd-k8s-master                      1/1     Running   0          52m
 kube-system   kube-apiserver-k8s-master            1/1     Running   0          52m
 kube-system   kube-controller-manager-k8s-master   1/1     Running   0          52m
 kube-system   kube-proxy-9r6st                     1/1     Running   0          52m
 kube-system   kube-proxy-lx5wz                     1/1     Running   0          22m
 kube-system   kube-proxy-xmk6s                     1/1     Running   0          25m
 kube-system   kube-scheduler-k8s-master            1/1     Running   0          52m
 [root@k8s-master ~]# kubectl get po -Aowide
 NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE   IP          NODE         NOMINATED NODE   READINESS GATES
 kube-system   coredns-6554b8b87f-2v4tx             0/1     Pending   0          53m   <none>      <none>       <none>           <none>
 kube-system   coredns-6554b8b87f-zfqlb             0/1     Pending   0          53m   <none>      <none>       <none>           <none>
 kube-system   etcd-k8s-master                      1/1     Running   0          54m   10.0.0.66   k8s-master   <none>           <none>
 kube-system   kube-apiserver-k8s-master            1/1     Running   0          54m   10.0.0.66   k8s-master   <none>           <none>
 kube-system   kube-controller-manager-k8s-master   1/1     Running   0          54m   10.0.0.66   k8s-master   <none>           <none>
 kube-system   kube-proxy-9r6st                     1/1     Running   0          53m   10.0.0.66   k8s-master   <none>           <none>
 kube-system   kube-proxy-lx5wz                     1/1     Running   0          23m   10.0.0.88   k8s-node02   <none>           <none>
 kube-system   kube-proxy-xmk6s                     1/1     Running   0          26m   10.0.0.77   k8s-node01   <none>           <none>
 kube-system   kube-scheduler-k8s-master            1/1     Running   0          54m   10.0.0.66   k8s-master   <none>           <none>
2)部署calico的pod
 # 找到配置文件calico
 [root@k8s-master ~]# cd k8s-ha-install/
 # 切换 git 分⽀
 [root@k8s-master k8s-ha-install]# git checkout manual-installation-v1.28.x
 分支 manual-installation-v1.28.x 设置为跟踪来自 origin 的远程分支 manual-installation-v1.28.x。
 切换到一个新分支 'manual-installation-v1.28.x'
 # 修改 Pod ⽹段
 [root@k8s-master k8s-ha-install]# ls
 bootstrap  CoreDNS       dashboard               metrics-server  README.md
 calico     csi-hostpath  kubeadm-metrics-server  pki             snapshotter
 [root@k8s-master k8s-ha-install]# cd calico/
 [root@k8s-master calico]# ls
 calico.yaml
 [root@k8s-master calico]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
 # 获取已定义的Pod⽹段
 [root@k8s-master calico]# POD_SUBNET=`cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr= | awk -F= '{print $NF}'` 
 [root@k8s-master calico]# echo $POD_SUBNET
 172.16.0.0/16
 # 修改配置文件,将文件中的POD_CIDR替换成172.16.0.0/16
 [root@k8s-master calico]# sed -i "s#POD_CIDR#${POD_SUBNET}#g" calico.yaml
 # 创建pod
 [root@k8s-master calico]# kubectl apply -f calico.yaml 
3)查看容器状态
 [root@k8s-master calico]# kubectl get po -A
 NAMESPACE     NAME                                       READY   STATUS     RESTARTS        AGE
 kube-system   calico-kube-controllers-6d48795585-v5d7x   0/1     Pending    0               69s
 kube-system   calico-node-747k8                          0/1     Init:0/3   0               69s
 kube-system   calico-node-7klq9                          0/1     Init:0/3   0               69s
 kube-system   calico-node-j9b44                          0/1     Init:0/3   0               69s
 kube-system   coredns-6554b8b87f-2v4tx                   0/1     Pending    0               104m
 kube-system   coredns-6554b8b87f-zfqlb                   0/1     Pending    0               104m
 kube-system   etcd-k8s-master                            1/1     Running    0               104m
 kube-system   kube-apiserver-k8s-master                  1/1     Running    0               104m
 kube-system   kube-controller-manager-k8s-master         1/1     Running    1 (7m42s ago)   7m27s
 kube-system   kube-proxy-9r6st                           1/1     Running    0               104m
 kube-system   kube-proxy-lx5wz                           1/1     Running    0               74m
 kube-system   kube-proxy-xmk6s                           1/1     Running    0               77m
 kube-system   kube-scheduler-k8s-master                  1/1     Running    0               104m

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

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

相关文章

ctfshow-web入门-sql注入-web248-UDF 注入

udf 全称为&#xff1a;user defined function&#xff0c;意为用户自定义函数&#xff1b;用户可以添加自定义的新函数到 Mysql 中&#xff0c;以达到功能的扩充&#xff0c;调用方式与一般系统自带的函数相同&#xff0c;例如 contact()&#xff0c;user()&#xff0c;versio…

VUE实现刻度尺进度条

一、如下图所示效果: 运行后入下图所示效果: 实现原理是用div画图并动态改变进度, 二、div源码 <div style="width: 100%;"><div class="sdg_title" style="height: 35px;"><!--对话组[{{ dialogGroup.index }}]编辑-->&…

如何在微信中使用AI智能回复,真AI大模型;微加机器人免费智能回复功能

之前一直想实现在微信中使用AI大模型进行消息回复&#xff0c;也使用过很多开源的工具自己调OpenAI的API&#xff0c;但是整体太复杂&#xff0c;而且跑在自己电脑上也不稳定 今天发现微加机器人也支持AI回复&#xff0c;而且AI功能还是免费的&#xff0c;没有tokens收费 微加…

【Gephi】可视化教程

此教程专供欣欣向荣及其舍友使用 文章目录 导入数据上色改变布局设置节点大小统计拓扑结构输出图形保存文件 导入数据 点击【文件】-【导入电子表格】 先选择csv格式的network 直接下一步 点击完成 【图的类型】改为“有向的” 点击确认 会弹出报错&#xff0c;直接clos…

CSS 响应式设计(补充)——WEB开发系列36

随着移动设备的普及&#xff0c;网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示&#xff0c;还要适应不同设备的特性。 一、响应式设计之前的灵活布局 在响应式设计流行之前&#xff0c;网页布局通常是固定的或流动的。固定布局使用固定…

vc-upload源码分析 -- ant-design-vue系列

vc-upload源码分析 – ant-design-vue系列 1 整体结构 上传组件的使用分两种&#xff1a;点击上传和拖拽上传。 点击的是组件或者是卡片&#xff0c;这个是用户通过插槽传递的。除上传外的其他功能&#xff0c;比如预览、自定义文件渲染等功能&#xff0c;也不是上传的核心功…

2. 变量和指令(omron 机器自动化控制器)——1

机器自动化控制器——第二章 变量和指令 1 2-1 变量一览表MC通用变量轴变量▶ 轴组变量 运动控制指令的输入变量输入变量的有效范围▶ 枚举体一览表 运动控制指令的输出变量运动控制指令的输入输出变量 2-1 变量一览表 MC功能模块使用的变量分为两类。 一类是监视轴等的状态及…

【SQL】百题计划:SQL对于空值的比较判断。

[SQL]百题计划 方法&#xff1a; 使用 <> (!) 和 IS NULL [Accepted] 想法 有的人也许会非常直观地想到如下解法。 SELECT name FROM customer WHERE referee_Id <> 2;然而&#xff0c;这个查询只会返回一个结果&#xff1a;Zach&#xff0c;尽管事实上有 4 个…

关于使用HAWQ量化框架执行训练前推理的性能崩溃问题

问题描述 今天debug量化模型遇到一个比较奇怪的问题&#xff0c;之前从来没有注意过&#xff1a; 现在量化模型的流程是&#xff1a; 1&#xff09;加载预训练好的浮点数权重模型&#xff1b; 2&#xff09;将模型架构替换成量化架构&#xff08;逐模块替换&#xff09;&#…

Linux和C语言(Day11)

一、学习内容 讲解有参函数 形参 和 实参 形参——定义时的参数&#xff0c;形式上的参数&#xff0c;没有实际意义&#xff0c;语法上必须带有数据类型 void fun(int a,int b); void fun(int a[],int n); void fun(char *s); 可以是&#xff1a;变量、数组、指针 实参——调用…

【笔记】物理化学绪论

文章目录 1. 物理化学的目的和研究内容什么是物理化学&#xff1f;目的内容 2. 物理化学的学习方法3. 物理量的表示和运算&#xff08;1&#xff09;物理量的表示&#xff08;2&#xff09;量值计算 4. 课程安排 1. 物理化学的目的和研究内容 用物理变化 P、V、T热效应电效应…

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分&#xff0c;排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想&#xff0c;它们引领着我们不断探索算法的奥秘之处。所以&#xff0c;学习排序…

黑神话悟空大圣残躯怎么打 头目大圣残躯攻略

​面对《黑神话&#xff1a;悟空》中的终极挑战——大圣残躯&#xff0c;掌握其打法要点&#xff0c;是通往胜利的关键。下面&#xff0c;就让我们一步步解析如何战胜这位强大的最终BOSS吧。 一、BOSS位置 随主线流程必解锁。击败石猿后&#xff0c;齐天大圣的真身——大圣残躯…

IIC通信中设备的交互流程

本文主要叙述&#xff0c;当两个设备进行 IIC 通信时&#xff0c;两个设备的交互流程&#xff0c;即主机的动作和从机的动作。当通过软件编程的方式实现设备间的 IIC 通信时&#xff0c;我们就是按照主机的动作或从机的动作来编写对应的代码。实际上&#xff0c;主机和从机是按…

小怡分享之栈和队列

前言&#xff1a; &#x1f308;✨前面小怡给大家分享了顺序表和链表&#xff0c;今天小怡给大家分享一下栈和队列。 1.栈 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#x…

聚焦:clicOH 借助 NVIDIA cuOpt 实现最后一英里交付速度 20 倍提升

受消费者行为转变和疫情影响&#xff0c;电子商务继续呈爆炸式增长和转型。因此&#xff0c;物流和运输公司发现自己处于包裹配送革命的前沿。这新的现实情况在最后一英里配送中尤为明显&#xff0c;而后者现在已经成为供应链物流中成本最高的要素&#xff0c;占从零售到制造等…

Learn ComputeShader 13 Adding a mesh to each particle

这次要给每个粒子加上网格。 添加的网格只是一个简单的四边形&#xff0c;它需要分成两个三角形。并且三角形的顶点必须按照顺时针排列&#xff0c;同时每个顶点都应该有UV信息。 所以接下来就要添加顶点结构体以及相关的compute buffer struct Vertex{public Vector3 positi…

大数据新视界 --大数据大厂之 Spark 性能优化秘籍:从配置到代码实践

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构————栈的讲解(超详细!!!)

1 栈的概念和结构 1.1 栈的概念 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作&#xff0c;进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵循后进先出&#xff08;先进后出&#xff09;原则。特性与栈的…

杂七杂八-必备软件下载

必备软件下载 学术软件工作软件tips软件 仅个人笔记使用&#xff0c;后续持续更新&#xff0c;感谢点赞关注 学术软件 幕布&#xff1a;记录各种笔记&#xff0c;文本和思维导图快捷互换边界AIchat&#xff1a;集成了多个最新大模型工具&#xff0c;功能丰富&#xff0c;推荐使…