k8s最详细集群部署
安装kubeadm、kubectl、和 kubelet
这里通过百度网盘下载所需要的安装包:
链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000
1、下载部署包到本地后,在k8s部署包/k8s目录下
执行此yum命令安装:yum localinstall ./*.rpm 或 rpm -Uvh *.rpm --nodeps --force
2、在 /etc/sysconfig/kublet 中增加自定义 kubelet 配置
# 设置hostname
hostnamectl set-hostname master
mkdir -p /home/work/kubernetes/log
mkdir -p /home/work/kubernetes/kubelet_data
mkdir -p /home/work/docker
# 自定义kublet配置
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=" --hostname-override=master --logtostderr=false --log-dir=/home/work/kubernetes/log --v=0\
--root-dir=/home/work/kubernetes/kubelet_data "
3、设置 kubelet 开机启动
systemctl enable kubelet && systemctl start kubelet
docker安装
1、rpm包在k8s部署包/docker目录下
2、切换到该目录下安装
yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force
4、若是GPU机节点,需要安装nvidia-dcoker
1、切到k8s部署包/docker/nvidia-dcoker目录下
3、在该目录下执行
rpm -Uvh *.rpm --nodeps --force
4、sudo systemctl restart docker
5、修改docker配置,包括cgroup和仓库地址
vim /etc/docker/daemon.json
# gpu机器:
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": ["https://23h04een.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"default-runtime": "nvidia",
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
# cpu机器:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
6、修改docker服务参数,增加docker配置文件,指定docker数据文件目录
vim /etc/kubernetes/docker_opts.env
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1372"
DOCKER_OPTS=" --ip-masq=true --mtu=1372 --data-root=/home/work/docker "
vim /usr/lib/systemd/system/docker.service (EnvironmentFile 对应上面的文件绝对路径)
EnvironmentFile=/etc/kubernetes/docker_opts.env
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd:// --containerd=/run/containerd/containerd.sock
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
7、重启docker,设置开机启动
systemctl daemon-reload
systemctl restart docker
nfs准备
安装nfs,配置挂载
先进入到k8s部署包/nfs-utils目录下
执行命令安装:yum localinstall ./*.rpm 或rpm -Uvh *.rpm --nodeps --force
# 创建本地目录
mkdir /cfs
# 挂载远程目录到本地
mount -t nfs4 -o minorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport cfs-PJ5X3SRg7M.lb-d065a956.cfs.bj.baidubce.com:/ /cfs
# 设置开机启动
systemctl enable nfs.service
更改服务器配置
1. 关闭防火墙和selinux
[root@centos7 ~] systemctl stop firewalld && systemctl disable firewalld
# 永久关闭selinux
[root@centos7 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && cat /etc/selinux/config
# 临时关闭selinux
root@centos7 ~] setenforce 0
1. 禁用swap
# 临时禁用
[root@master ~] swapoff -a
# 永久禁用
[root@master ~] sed -i.bak '/swap/s/^/#/' /etc/fstab
1. 内核参数修改
部署的 k8s 网络使用 flannel,该网络需要设置内核参数 bridge-nf-call-iptables=1
# 临时修改
[root@master ~] sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables = 1
[root@master ~] sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables = 1
# 永久修改
[root@master ~] cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~] sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
1. 处理依赖的docker镜像
所需要的镜像为:
registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.5
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.5
registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.5
registry.aliyuncs.com/google_containers/kube-proxy:v1.23.5
registry.aliyuncs.com/google_containers/pause:3.6
registry.aliyuncs.com/google_containers/etcd:3.5.1-0
registry.aliyuncs.com/google_containers/coredns:v1.8.6
在k8s部署包/images下,逐个docker load -i 导入镜像。
kubeadm启动集群
1. 初始化
kubeadm reset -f
若是之前已经创建集群:
* 删除/root/.kube/config文件
* 若是安装了flannel网络,删除 /etc/cni/net.d/ 下的flannel网络文件,10-flannel.conflist
如果报错:[ERROR FileExisting-conntrack]: conntrack not found in system path
解决办法:先下载:yum install --downloadonly --downloaddir=/home/conntrack conntrack
安装到目标服务器上:rpm -Uvh *.rpm --nodeps --force
1. 通过命令+参数初始化集群
kubeadm init --kubernetes-version=v1.23.5 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap --apiserver-advertise-address=10.132.130.197 --image-repository registry.aliyuncs.com/google_containers --v=5
# apiserver-advertise-address 必须填充ip
1. 修改kubectl配置
把 kubectl 所需的 apiserver 服务地址和证书配置添加到环境变量中,否则会无权限访问 6443 端口
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
cp -p $HOME/.bash_profile $HOME/.bash_profile.bak$(date '+%Y%m%d%H%M%S')
echo "export KUBECONFIG=$HOME/.kube/config" >> $HOME/.bash_profile
source $HOME/.bash_profile
4、配置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
5、flannel网络搭建
需要的yaml文件:kube-flannel.yml
对应的镜像:
docker.io/flannel/flannel:v0.21.4
docker.io/flannel/flannel-cni-plugin:v1.1.2
在k8s部署包/flannel下,
先docker load -i 导入镜像,然后执行下面命令:
kubectl apply -f kube-flannel.yml
如果 flannel 的 pod 无法启动,显示 CrashLoopBackOff。通过 kubectl logs 显示 node“master“podcidr not assigned 错误,有两种解决方法:
1)安装 kubeadm Init的时候,没有增加 --pod-network-cidr 10.244.0.0/16 参数
注意,安装Flannel时,kubectl create -f https://bd.bcebos.com/datahub-online/k8s/kube-flannel.yml 如果 yml 中的 "Network": "10.244.0.0/16"和--pod-network-cidr 不一样,就修改成一样的。不然可能会使得Node间Cluster IP 不通。
如果你没有快照可以还原,采用方法(2),然后 kubectl delete pod -n kube-system kube-flannel-*, 将错误的 flannel-pod 删除,即可自动重新创建新的 flannel-pod。
如果你有恢复快照,那么在 kubeadm init 时加上 --pod-network-cidr=10.244.0.0/16 参数重新 init 即可。
在搭建完 flannel 网络后把 coredns 的 pod 删了自动重启一下应该就可以 running 了
6、节点加入集群
* 首先k8s集群的node节点同按照上述去安装kubeadmin、kubectl和kubelet,安装docker,更改服务器配置,安装nfs挂载服务
* node节点上不需要去部署集群,只需要安装好k8s的基础环境即可
* 再master节点上运行
kubeadm token create --print-join-command
kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35
在希望加入集群的节点执行上面命令输出的语句
在node节点上运行 kubeadm join 10.52.12.2:6443 --token 774333.jxfe29jzo86zsgfo --discovery-token-ca-cert-hash sha256:ffb898db137891d1eb88a8d0727d623312cac68dc84999a4978658b1cbeb3c35 即可加入集群中
注意:这里如果之前节点已经加入过集群了,需要做一些清理工作,否则加入不成功
重新初始化集群:kubeadm -f reset
清理网络:ifconfig查看网络,清理之前加入的网络,否则加入集群不成功
sudo ifconfig cni0 down
sudo ip link delete cni0
安装插件
1. 安装nvidia-device-plugin插件,使用gpu
1、在k8s部署包/nvidia-device-plugin文件下
2、在Gpu机器上导入镜像:docker load -i nvidia/k8s-device-plugin:1.0.0-beta6.tar
3、kubectl create -f nvidia-device-plugin.yml
1. 训练调度kube-queue的安装和使用
之前的基于k8s的调度是基于java单独写的一套,他需要不停的轮询队列去查信息进行调度,存在以下问题:
1. 与业务代码耦合,通用性差,可移植性差
2. 持续轮询,有性能瓶颈
3. 稳定性不高
基于此,我们引入了新的队列kube-queue,他基于k8s的informer机制进行时间监听和执行,kube-queue已经过大规模平台验证,稳定性比较高;我们通过编写不同的extender就可以支持job、tf-job、pytorch-job、mxnet-job等多个类型。
1)安装helm
1、在/k8s部署包/kube-queue文件夹下
2、解压:tar -zxvf helm-v3.9.3-linux-amd64.tar.gz
cp helm /usr/local/bin
# helm是一个可执行的二进制文件,可以直接执行,若是想全局执行,将文件复制到/usr/local/bin下
2)安装kube-queue
参考:http://agroup.baidu.com/zhongce_saas/md/article/4816652
1、在/k8s部署包/kube-queue文件夹下
2、解压:tar -zxvf kube-queue.tar.gz
3、cd kube-queue
修改charts/v0.1.0/templates/controller.yaml镜像拉取策略为Never
# 通过helm安装
4、helm install kube-queue -n kube-system ./charts/v0.1.0
#查看kube-queue-controller和job-extension进程是否存在
5、helm get manifest kube-queue -n kube-system | kubectl get -n kube-queue -f -
# 通过helm卸载kube-queue
6、helm uninstall kube-queue -n kube-system
3、NFS Server安装 & K8S适配NFS
1)NFS Server安装
参考:搭建NFS Server_山间漫步人生路的博客-CSDN博客
# 安装nfs server
在k8s部署包/nfs目录下安装:rpm -ivh *.rpm --force --nodeps
docker load -i busybox.tar
# 启动nfs server & 设置开机自启
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
# 创建共享目录
mkdir -p /nas/k8s
chmod -R 777 /nas/k8s
# 设置共享目录
vim /etc/exports
/nas/k8s 192.168.3.0/24(insecure,rw,sync,no_root_squash)
exportfs -a # 使exports的修改生效
# 将共享目录挂载到其他服务器,需要已安装nfs-utils
mount -t nfs 10.132.130.197:/nas/k8s /nas/k8s
# 设置开机自挂载,编辑/etc/fstab,增加一条挂载记录
vim /etc/fstab
192.168.3.81:/nas/k8s /data nfs defaults 0 1
2)nfs-provisioner 插件安装
参考:http://agroup.baidu.com/zhongce_saas/md/article/4826066
需要的镜像在k8s部署包/nfs文件夹下。
在k8s部署包/nfs下导入镜像:docker load -i nfs-provisioner.tar
# 解压
tar -xvf nfs-provisioner_file.tar
cd nfs-provisioner/nfs-subdir-external-provisioner
# 设置namespace的rbac权限
NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')
NAMESPACE=${NS:-default}
sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
kubectl create -f deploy/rbac.yaml
如有报错,参考:Error from server: Get “https://[::1]:6443/api/v1/namespaces/victor/resourcequotas“: dial tcp [::1]:_get "https://[::1]:6443/api/v1/namespaces/kube-sys_victorgk的博客-CSDN博客
配置 NFS subdir external provisioner的deploy/deployment.yaml,设置nfs地址和路径并执行,部署的时候需要指定对应的ns,并部署到指定机器上。编辑deployment.yaml,修改nfs-server的地址和共享目录
kubectl create -f deploy/deployment.yaml
执行deploy/class.yaml ,定义了NFS子目录外部提供给Kubernetes的存储目录的存储类
cd nfs-provisioner/nfs-subdir-external-provisioner
kubectl apply -f deploy/class.yaml
测试
# 创建pod,查看创建的pvc是否分配到了nfs共享目录中
kubectl create -f deploy/test-claim.yaml -f deploy/test-pod.yaml
kubectl delete -f deploy/test-pod.yaml -f deploy/test-claim.yaml
4、ingress-controller安装
参考:http://agroup.baidu.com/zhongce_saas/md/article/4890077
1、需要的tar包:ingress-nginx.tar.gz
2、镜像:
registry.baidubce.com/datahub/ingress-nginx-controller:v1.2.0
registry.baidubce.com/datahub/ingress-nginx-kube-webhook-certgen:v1.1.1
registry.cn-beijing.aliyuncs.com/google_registry/myapp:v1
3、tar包和镜像都在/k8s部署包/ingress-controller下
4、解压:tar -zxvf ingress-nginx.tar.gz
5、依次使用docker load -i导入上面的镜像
6、cd ingress-nginx
# 需要修改的地方:deploy.yaml
# externalTrafficPolicy:local -> externalTrafficPolicy: Cluster
# 如果改成Cluster, 含有kube-proxy进程的机器都可以通过端口访问。Local的话只能部署ingress-controller的那台机器可以访问。
# Service的type改成NodePort
# 安装
7、kubectl apply -f deploy.yaml
5、分布式任务的安装和使用
1、在/k8s部署包/分布式任务下
3、解压:tar -xvf training-operator.tar
4、cd training-operator
docker load -i training-operator.tar
5、kubectl apply -k manifests/overlays/standalone
6、filebeat安装
1、需要的包在/k8s部署包/filebeat下
2、解压:tar -zxvf filebeat-7.13.0-zhongcesaas.tar.gz
3、cd filebeat
# 修改的地方:filebeat/values.yaml,修改es的地址,docker
---
daemonset:
# Annotations to apply to the daemonset
annotations: {}
# additionals labels
labels: {}
affinity: {}
# Include the daemonset
enabled: true
# Extra environment variables for Filebeat container.
envFrom: []
# - configMapRef:
# name: config-secret
extraEnvs: []
# - name: MY_ENVIRONMENT_VAR
# value: the_value_goes_here
extraVolumes:
- name: extras
hostPath:
path: /home/work/docker/containers
type: DirectoryOrCreate
extraVolumeMounts:
- name: extras
mountPath: /home/work/docker/containers
readOnly: true
hostNetworking: false
# Allows you to add any config files in /usr/share/filebeat
# such as filebeat.yml for daemonset
filebeatConfig:
filebeat.yml: |
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*-job-*.log
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/log/containers"
output.elasticsearch:
host: '${NODE_NAME}'
hosts: '${ELASTICSEARCH_HOSTS:10.138.117.28:8200}'
# 创建namespace
kubectl create ns logs
# 指定ns安装
helm install filebeat -n logs filebeat/
# 卸载
helm uninstall filebeat -n logs
注意点:es的地址需要配置对,否则连接不上es
7、job-extension安装
1、需要的yaml文件:job-extension.yaml
tar包:job-extension-vtest2.tar
2、在/k8s部署包/job-extension下
导入镜像:docker load -i job-extension-vtest2.tar
3、kubectl apply -f job-extension.yaml
8、设置任务优先级资源
1、在/k8s部署包/job-extension下
2、kubectl apply -f priorityclass.yaml
生成ca证书脚本
export clientcert=$(grep client-cert ~/.kube/config |cut -d" " -f 6)
export certauth=$(grep certificate-authority-data ~/.kube/config |cut -d" " -f 6)
export clientkey=$(grep client-key-data ~/.kube/config |cut -d" " -f 6)
echo $clientcert | base64 -d > ./client.pem
echo $clientkey | base64 -d > ./client-key.pem
echo $certauth | base64 -d > ./ca.pem
7、部署node节点参考:
k8s 集群新增 Node 文档
8、k8s集群默认存在污点策略NoSchedule,master节点不会被调度到。如果需要master节点被调度,则需要做去除操作:
kubectl taint nodes --all for-node-role.kubernetes.io/master:NoSchedule-
参考:k8s污点策略与容忍的简单应用_prefernoschedule_xhredeem的博客-CSDN博客
相关文章:
k8s最详细集群部署
安装kubeadm、kubectl、和 kubelet 这里通过百度网盘下载所需要的安装包: 链接: k8s部署包.zip_免费高速下载|百度网盘-分享无限制 提取码: 0000 1、下载部署包到本地后,在k8s部署包/k8s目录下 执行此yum命令安装:yum localinstall ./*.r…...
Redis底层数据结构:字典
在 Redis 中,字典(Dictionary)是一种常用的底层数据结构,它被用于实现 Redis 的哈希表(Hash Table)数据结构。字典用于存储键值对,它提供了快速的键值查找、插入和删除操作。 Redis 字典的特点&…...
upload 文件自动上传写法,前后端 下载流文件流
<el-uploadv-model:file-list"fileList":action"app.api/student/student/import":headers"{// Content-Type: multipart/form-data;boundary----split-boundary, 此处切记不要加,否则会造成后端报错 Required request part file is…...
Python文件、文件夹操作汇总
目录 一、概览 二、文件操作 2.1 文件的打开、关闭 2.2 文件级操作 2.3 文件内容的操作 三、文件夹操作 四、常用技巧 五、常见使用场景 5.1 查找指定类型文件 5.2 查找指定名称的文件 5.3 查找指定名称的文件夹 5.4 指定路径查找包含指定内容的文件 一、概览 在…...
CHM Viewer Star 6.3.2(CHM文件阅读)
CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…...
【GIT】git分支命令,使用分支场景介绍git标签介绍,git标签命令,git标签使用的场景git查看提交历史
目录 一,git分支命令,使用分支场景介绍 二,git标签介绍,git标签命令,git标签使用的场景 三,git查看提交历史 前言: 今天我们来聊聊关于Git 分支管理。几乎每一种版本控制系统都以某种形式支持…...
Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态
波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成,将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动,并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…...
AM@方向导数概念和定理
文章目录 abstract方向导数二元函数方向导数偏导数是方向导数的特例偏导数存在一定有对应的方向导数存在方向导数存在不一定有偏导数存在例 三元函数方向导数例 方向导数存在定理和计算公式证明二元函数三元函数 abstract 方向导数的概念,定理和计算公式方向导数是对偏导的补充…...
微信小程序隐私政策不合规,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意
小程序隐私政策不合规,默认自动同意《用户服务协议》及《隐私政策》,应当由用户自主阅读后自行选择是否同意隐私政策协议,不得默认强制用户同意,请整改后再重新提交。 把 登录代表同意《用户协议》和《隐私政策》 改为 同意《用…...
Python中如何判断两个对象的内存地址是否一致?
目录 一、引言 二、Python的内存管理 三、对象的比较 四、使用id函数判断内存地址 五、总结 一、引言 在Python中,我们经常需要比较两个对象是否是同一个对象,或者说它们是否在内存中占据同一位置。在理解这个问题之前,我们需要了解Pyt…...
唯美仙侠3D手游2023【仙变3】画面精美/linux服务端+双端+GM后台+运营后台+详细教程
搭建资源下载地址:https://www.ldmzy.com/6618/6618.html...
React组件通信:如何优雅地实现组件间的数据传递
在React应用中,组件通信是至关重要的一部分。通过合适的数据传递和交互方式,我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式,并提供代码实现,帮助你更好地理解和应用这些技术。 1. 使用props进行父子…...
数据分析实战 | 逻辑回归——病例自动诊断分析
目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/d…...
Eigen::Matrix<double,3,1> F;Eigen::MatrixXd F (3, 2);这两行代码有什么区别?
这两行代码的区别在于定义的矩阵 F 的类型和维度不同。 第一行: Eigen::Matrix<double,3,1> F;这行代码创建了一个3x1的矩阵 F,其中元素类型为 double。这是一个静态大小的矩阵,其维度在编译时确定。 第二行: Eigen::Ma…...
Java Agent - 应用程序代理-笔记
Java Agent - 应用程序代理-笔记 概述说明 Java Agent 又叫做 Java 探针,该功能是 Java 虚拟机提供的一整套后门,通过这套后门可以对虚拟机方方面面进行监控与分析,甚至干预虚拟机的运行。 是在 JDK1.5 引入的一种可以动态修改 Java 字节码…...
gird 卡片布局
场景一:单元格大小相等 这承载了所有 CSS Grid 中最著名的片段,也是有史以来最伟大的 CSS 技巧之一: 等宽网格响应式卡片实现 .section-content {display: grid;grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));gap: 10px; …...
C#医学检验室(LIS)信息管理系统源码
LIS:实验室信息管理系统 (Laboratory Information Management System简称:LIS)。 LIS 是面向医院检验科、检验中心、动物实验所、生物医疗研究所等科研单位研发的集数据采集、传输、存储、分析、处理、发布等功能于一体的信息管理系统。 一、完善的质控: 从样本管理…...
建行广东江门分行:科技赋能,数据助力纠“四风”
为进一步深化落实中央八项规定精神,持续加大“四风”问题查处力度,建行驻江门市分行纪检组根据《广东省分行贯彻落实中央八项规定精神持之以恒纠治“四风”实施方案》(建粤党发〔2023〕1号)安排,对驻在市分行开展“四风…...
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C++版)》
3164:练27.1 叮叮当当 《信息学奥赛一本通编程启蒙(C版)》 【题目描述】 松鼠老师和尼克玩报数游戏。松鼠老师数到2的倍数时,尼克就说“叮叮”;松鼠老师数到3的倍数时,尼克就说“当当”;松鼠老…...
立体库堆垛机放货动作控制程序功能
放货动作程序功能块 DB11.DBX0.0 为左出货台有货 DB11.DBX1.0 为右出货台有货 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2 左出货台车就位 DB11.DBX0.2 右出货台车就位 DB11.DBX1.2...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
