CentOS Stream 10 上 Kubernetes v1.35 集群部署与 GPU 调度配置全攻略
环境说明软件环境Kubernetes v1.35Docker 20.10.24系统环境CentOS Stream 101. 环境初始化所有步骤若无特殊说明则默认所有机器执行。1.1 配置静态 IP编辑网络连接配置文件[rootk8s-master-1 ~]# cd /etc/NetworkManager/system-connections/ [rootk8s-master-1 system-connections]# ls ens160.nmconnection [rootk8s-master-1 system-connections]# vim ens160.nmconnection配置文件内容示例[connection] idens160 typeethernet interface-nameens160 [ethernet] [ipv4] methodmanual #将auto修改为manual address1192.168.10.171/24 # 其他机器修改成另外的 IP 地址 gateway192.168.10.2 #配置网关 dns114.114.114.114 #配置dns [ipv6] addr-gen-modeeui64 methodauto [proxy]重启验证配置[rootk8s-master-1 system-connections]# reboot查看配置效果# 查看网关 ip route #查看 DNS 服务器地址 cat /etc/resolv.conf #查看 IP 地址确认是否为修改后的地址 ip add1.2 设置机器主机名# 在 master 上执行 hostnamectl set-hostname k8s-master-1 su #在 node-1 上执行 hostnamectl set-hostname k8s-node-1 su #在 node-2 上执行 hostnamectl set-hostname k8s-node-2 su1.3 配置 hosts配置 hosts 文件通过主机名互相访问每台宿主机都要执行cat /etc/hosts EOF 192.168.10.172 k8s-master-1 192.168.10.173 k8s-node-1 192.168.10.174 k8s-node-2 EOF1.4 关闭 SELinux# 临时关闭 setenforce 0 永久关闭 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config 修改 SELinux 配置文件之后重启机器SELinux 配置才能永久生效 reboot 检查 getenforce 显示 Disabled 说明 SELinux 已经关闭1.5 禁用 firewalld 和 iptables# CentOS systemctl stop firewalld systemctl disable firewalld1.6 关闭交换分区# 临时关闭 swapoff -a 永久关闭 sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab为什么要关闭交换分区因为交换分区是使用磁盘里的空间做内存使用的防止内存不足的时候让容器在交换分区里运行磁盘的运行速度比较慢会影响到 K8s 集群里启动的容器应用程序的性能所以要关闭。1.7 调整内核参数# 修改 Linux 的内核参数添加网桥过滤和地址转发功能转发 IPv4 并让 iptables 看到桥接流量 cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF 加载网桥过滤模块 modprobe overlay modprobe br_netfilter 编辑 /etc/sysctl.d/kubernetes.conf 文件主要是对容器虚拟网络的支持 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF 应用 sysctl 参数而不重新启动 sysctl -p 查看 br_netfilter 和 overlay 模块是否加载成功 lsmod | grep -e br_netfilter -e overlay br_netfilter 22256 0 bridge 151336 1 br_netfilter overlay 91659 0 另一种查看方式 [rootk8s-master-1 ~]# lsmod | egrep br_netfilter|overlay br_netfilter 22256 0 overlay 91659 0 bridge 151336 1 br_netfilter1.8 更新和配置软件源CentOS Stream 10 直接可以使用官方的源不需要额外配置。1.9 配置 IPVS 功能IPVS 是一个负载均衡的软件目前已经直接安装在 Linux 内核里了不需要额外安装。# 安装 ipset 和 ipvsadm主要是对 IPVS 进行传递参数的或者管理的 yum install ipset ipvsadm -y #添加需要加载的模块写入脚本文件 #modprobe 作用是加载模块到内核里 cat EOF /etc/modules-load.d/ipvs.conf #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF #为脚本文件添加执行权限 chmod x /etc/modules-load.d/ipvs.conf #执行脚本文件 /bin/bash /etc/modules-load.d/ipvs.conf #确保 ipvs.conf 里的配置会在系统重启的时候加载 [rootk8s-master-1 ~]# vim /etc/rc.local /bin/bash /etc/modules-load.d/ipvs.conf [rootk8s-master-1 ~]# chmod x /etc/rc.d/rc.local 重启 reboot #查看对应的模块是否加载成功 lsmod | egrep -e ip_vs -e nf_conntrack1.10 配置时间同步Chrony 是 CentOS 里的时间管理服务用来和其他的时间服务器同步时间。systemctl restart chronyd systemctl enable chronyd2. 配置 Containerd 环境2.1 安装 Containerd 环境# 第 2 步配置安装 Docker 的源使用 Docker 官方提供的源 [rootlocalhost ~]# sudo dnf -y install dnf-plugins-core yum-utils 默认使用官方的源在安装的时候出错下载不下来软件建议使用阿里云的源 [rootlocalhost yum.repos.d]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 第 3 步安装 Containerd [rootlocalhost ~]# sudo dnf install containerd.io-2.2.1 -y 因为没有指定 Docker 的版本默认会安装最新的版本 验证版本 [rootk8s-master-1 log]# containerd --version containerd containerd.io v2.2.1 dea7da592f5d1d2b7755e3a161be07f43fad8f752.2 配置 Containerd 的国内源# 1. 生成默认配置 containerd config default /etc/containerd/config.toml #2. 核心修改开启 systemd cgroup 驱动K8s 强制要求 替换 pause 镜像为国内源 sed -i s/SystemdCgroup \ false/SystemdCgroup \ true/g /etc/containerd/config.toml sed -i s/registry.k8s.io\/pause:3.10/registry.aliyuncs.com\/google_containers\/pause:3.10/g /etc/containerd/config.toml #3. 配置国内镜像仓库加速解决镜像拉取失败 cat /etc/containerd/config.toml EOF [plugins.io.containerd.grpc.v1.cri.registry.mirrors] [plugins.io.containerd.grpc.v1.cri.registry.mirrors.docker.io] endpoint [https://hub-mirror.c.163.com, https://mirror.baidubce.com] [plugins.io.containerd.grpc.v1.cri.registry.mirrors.k8s.gcr.io] endpoint [https://registry.aliyuncs.com/google_containers] [plugins.io.containerd.grpc.v1.cri.registry.mirrors.quay.io] endpoint [https://registry.aliyuncs.com/calico] EOF #验证配置输出 SystemdCgroup true 则成功 grep -n SystemdCgroup /etc/containerd/config.toml2.3 配置 Containerd 服务自启动systemctl restart containerd systemctl enable containerd 验证状态active (running) 则成功 systemctl status containerd2.4 检查 /etc/hosts 文件的配置测试网络连通性每台机器的 /etc/hosts添加下面的配置[rootk8s-master-1 docker]# cat /etc/hosts # Loopback entries; do not change. # For historical reasons, localhost precedes localhost.localdomain: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # See hosts(5) for proper format and other examples: # 192.168.1.10 foo.example.org foo # 192.168.1.13 bar.example.org bar 192.168.10.172 k8s-master-1 192.168.10.173 k8s-node-1 192.168.10.174 k8s-node-2在 node2 机器上进行测试通过访问域名是否可以 ping 通其他的机器# 在master节点上测试能否 ping 通其他主机和上互联网 ping k8s-master-1 ping k8s-node-1 ping k8s-node-2 ping www.jd.com此处建议在虚拟机里创建一个快照Containerd 已经安装好了。3. 配置 K8s 集群环境3.1 配置 K8s 组件源每台节点服务器都需要执行下面的命令#高版本的k8s的阿里云的源 cat EOF | tee /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/ enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/repodata/repomd.xml.key EOF # 更新索引缓冲 yum makecache3.2 安装kubeadm 是用来安装master节点上的组件apiserver、etcd、scheduler等部署k8s集群的。kubelet 是用来对容器运行时软件进行管理的管理docker和containerd等容器运行时软件的kubectl 是用来输入k8s的命令的是k8s给用户使用的软件是一个客户端命令# 安装kubeadm、kubelet、kubectl v1.35.0 dnf install -y kubelet-1.35.0 kubeadm-1.35.0 kubectl-1.35.0 --disableexcludeskubernetes # 验证安装版本均为v1.35.0则成功 kubeadm version kubelet --version kubectl version --client #设置 kubelet 开机自启kubelet 会由 kubeadm 自动启动先配置自启 systemctl enable kubelet # 此时kubelet为inactive状态属于正常现象 systemctl status kubelet3.3 拉取 K8s 集群所需镜像Master 节点初始化 K8s 集群 仅在 k8s-master 执行kubeadm初始化时会自动拉取镜像国内网络需要指定阿里云镜像仓库执行以下命令提前拉取也可初始化时指定kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.35.0 # 验证镜像containerd镜像列表包含apiserver、controller-manager等则成功 #crictl 是k8s里查看镜像的工具--》类似于docker命令 crictl images #执行crictl images命令查看镜像是否拉取成功 #说明crictl是k8s里命令行的工具用于替代 docker 命令操作 K8s 容器。4 集群初始化4.1 kubeadm init 仅在master节点上执行kubeadm init \ --apiserver-advertise-address192.168.1.10 # master节点实际IP \ --kubernetes-versionv1.35.0 # K8s版本 \ --image-repositoryregistry.aliyuncs.com/google_containers # 国内镜像源 \ --service-cidr10.96.0.0/12 # K8s Service网段固定不要修改 \ --pod-network-cidr10.244.0.0/16 # Pod网段与后续calico网络插件配置一致 \ --ignore-preflight-errorsall # 忽略预检错误如内存/CPU略低的情况成功后会有一大串信息暂存下面这一段Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.10.169:6443 --token 1zl0x4.w1ji9rp0wzvgf7n6 \ --discovery-token-ca-cert-hash sha256:9fa1c77ab31bce8850bc2ed87bb96023ee684ec8325e462c5494058f83c68f33 ## 暂存这条命令之后在master上继续执行mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config #查看master接口监听6443端口的进程是kube-apiserver ss -anplut|grep 64434.2将所有node节点加入集群# 在所有的node节点上面执行的命令 kubeadm join 192.168.10.169:6443 --token 1zl0x4.w1ji9rp0wzvgf7n6 \ --discovery-token-ca-cert-hash sha256:9fa1c77ab31bce8850bc2ed87bb96023ee684ec8325e462c5494058f83c68f33 #执行下面的命令也可以得到join集群的命令如果忘记了或者没有提前复制保存 [rootk8s-master-1 ~]# kubeadm token create --print-join-command kubeadm join 192.168.205.140:6443 --token yvq3xz.x0xfu68vz4rqldvw --discovery-token-ca-cert-hash sha256:1afc3cdd9442dfb8e1d6420c2cdb551a994e3972dbad5468193735b9ea18c086检查集群节点状态在master上执行# 在master上执行 kubectl get node分配worker role在master上执行# 在master上执行 kubectl label node k8s-node-1 node-role.kubernetes.io/workerworker kubectl label node k8s-node-2 node-role.kubernetes.io/workerworker ...在node节点上也能执行kubectl命令[rootk8s-node-1 ~]# mkdir -p $HOME/.kube [rootk8s-node-1 ~]# scp k8s-master-1:/etc/kubernetes/admin.conf /root/.kube/config [rootk8s-node-1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config kubectl get node4.3 安装calico插件仅在master节点执行解决pod网络互通k8s集群初始化后节点状态为NotReady因为缺少网络插件必须安装网络插件后pod和节点才能互通。选择calico官方推荐支持网络策略适配大规模集群calico是k8s集群中网络通信的一个组件实现集群内部不同的机器之间的 容器通信大的网络规模。k8s集群节点可达到5000节点1亿个容器flannel也是一个网络插件适合小规模的集群节点服务器的数量比较小例如1~500个节点terway 是阿里云自己研发的一个网络插件cilium 是网络插件实现集群内部不同的机器之间的容器的通信大的网络规模# master执行 # 下载Calico v3.28.0配置文件与K8s v1.35兼容 yum install wget -y wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -O calico.yaml # 替换Calico镜像为国内源解决拉取慢 sed -i s/docker.io\/calico/registry.aliyuncs.com\/calico/g calico.yaml # 验证Pod网段与kubeadm init的--pod-network-cidr10.244.0.0/16一致无需修改 [rootk8s-master-1 ~] grep -C 2 -E podCIDR|CALICO_IPV4POOL_CIDR calico.yaml # chosen from this range. Changing this value after installation will have # no effect. This should fall within --cluster-cidr. - name: CALICO_IPV4POOL_CIDR value: 192.168.0.0/16 # Disable file logging so kubectl logs works. #默认是value: 192.168.0.0/16 修改为--pod-network-cidr 保持一致10.244.0.0/16 #下面进行修改 [rootk8s-master-1 ~]# ls anaconda-ks.cfg calico.yaml [rootk8s-master-1 ~]# vim calico.yaml - name: CALICO_IPV4POOL_CIDR value: 10.244.0.0/16 #修改为--pod-network-cidr 保持一致4.4 应用calico配置文件下载containerd的镜像ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.28.0 ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.28.0 docker.io/calico/node:v3.28.0 ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.28.0 ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.28.0 docker.io/calico/cni:v3.28.0 ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.28.0 ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.28.0 docker.io/calico/kube-controllers:v3.28.0 ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.10.1 ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.10.1 registry.k8s.io/pause:3.10.1导出calico相关的4个镜像并导入到k8s.io命名空间中ctr images export calico-cni-v3.28.0.tar docker.io/calico/cni:v3.28.0 ctr images export kube-controllers-v3.28.0.tar docker.io/calico/kube-controllers:v3.28.0 ctr images export node-v3.28.0.tar docker.io/calico/node:v3.28.0 ctr images export k8s.io.pause-3.10.1.tar registry.k8s.io/pause:3.10.1 ctr -n k8s.io images import calico-cni-v3.28.0.tar ctr -n k8s.io images import kube-controllers-v3.28.0.tar ctr -n k8s.io images import node-v3.28.0.tar ctr -n k8s.io images import k8s.io.pause-3.10.1.tar #查看是否导入成功 crictl images安装calico插件kubectl apply -f calico.yaml # 查看Calico Pod状态所有Pod为Running则成功约1-3分钟 kubectl get pods -n kube-system -w #按ctrlc退出 #calico安装成功的效果 [rootk8s-master-1 ~]# kubectl get node 查看节点的状态都是ready NAME STATUS ROLES AGE VERSION k8s-master-1 Ready control-plane 125m v1.35.0 k8s-node-1 Ready worker 120m v1.35.0 k8s-node-2 Ready worker 120m v1.35.0 #查看kube-system命名空间里的pod都是running状态 kubectl get pod -n kube-system -o wide # 创建crictl配置文件指定containerd的运行时套接字 cat /etc/crictl.yaml EOF runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 10 debug: false pull-image-on-create: true EOF # 验证配置无警告即成功 crictl info4.5 k8s配置ipvsipvs是Linux中的一个负载均衡软件默认在Linux内核中就安装了修改k8s中的一个配置负载均衡时使用ipvs作为默认的负载均衡软件如果不修改默认是iptableskubectl edit configmap kube-proxy -n kube-system # 修改配置 mode: ipvs # 删除所有kube-proxy pod使之重启 kubectl delete pods -n kube-system -l k8s-appkube-proxy安装metrics-server在master节点中mkdir metrics #进入家目录创建metrics文件夹 cd metrics wget http://github.com/kubernetes-sigs/metrics-server/releases/download/v0.8.1/components.yaml - --kubelet-insecure-tls #components.yaml文件的140行的后一行加入此行 ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/metrics-server/metrics-server:v0.8.1 #此步骤在node节点中也进行 ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/metrics-server/metrics-server:v0.8.1 registry.k8s.io/metrics-server/metrics-server:v0.8.1 #所有节点上都进行 kubectl apply -f components.yaml kubectl get pod -n kube-system -o wide #查看是否Running5 常用软件5.1 安装dashboard只在master节点上执行mkdir dashboard cd daahboard yum install wget -y wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml # 修改Service部分改为NodePort对外暴露端口 vim recommended.yamlcontainers: - name: kubernetes-dashboard image: kubernetesui/dashboard:v2.7.0 imagePullPolicy: IfNotPresent #将195行的Always修改为IfNotPresent args: - --auto-generate-certificates - --namespacekubernetes-dashboard #201行 #在201行后加上此两行 - --token-ttl43200 - --enable-insecure-logintrue containers: - name: dashboard-metrics-scraper image: kubernetesui/metrics-scraper:v1.0.8 #281行 imagePullPolicy: IfNotPresent #在281行后加入此行镜像拉取建议在所有节点上都进行ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard:v2.7.0 ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/dashboard:v2.7.0 docker.io/kubernetesui/dashboard:v2.7.0 ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/metrics-scraper:v1.0.8 ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubernetesui/metrics-scraper:v1.0.8 docker.io/kubernetesui/metrics-scraper:v1.0.8 #安装 kubectl apply -f recommended.yaml #查看 running状态 kubectl get pods,svc -n kubernetes-dashboard创建、启动并访问dashboard#创建dashboard-access-token.yaml文件 # Creating a Service Account apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- # Creating a ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard --- # Getting a long-lived Bearer Token for ServiceAccount apiVersion: v1 kind: Secret metadata: name: admin-user namespace: kubernetes-dashboard annotations: kubernetes.io/service-account.name: admin-user type: kubernetes.io/service-account-token #执行 kubectl apply -f dashboard-access-token.yaml # 获取token kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath{.data.token} | base64 -d # 获取端口 kubectl get svc -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.109.73.125 none 8000/TCP 3d23h kubernetes-dashboard NodePort 10.101.254.225 none 443:30088/TCP 3d23h # 端口为30088浏览器访问https://ClusterIP:PORT注意https 页面中输入上一步获取到的token即可解决token默认15分钟过期的问题解决token默认15分钟过期的问题 [rootk8s-master-1 ~]# vim recommended.yaml 193 containers: 194 - name: kubernetes-dashboard 195 image: kubernetesui/dashboard:v2.7.0 196 imagePullPolicy: Always 197 ports: 198 - containerPort: 8443 199 protocol: TCP 200 args: 201 - --auto-generate-certificates 202 - --namespacekubernetes-dashboard 203 - --token-ttl43200 #添加这条配置超时时间调整为12小时 重新应用 [rootk8s-master-1 ~]# kubectl apply -f recommended.yaml5.2 安装kuborad在任意节点执行推荐masterkuborad是一个多k8s集群的管理软件假如公司内部有多套k8s集群可以使用kuborad进行管理sudo docker run -d \ --restartunless-stopped \ --namekuboard \ -p 80:80/tcp \ # 可根据需要修改第一个暴露的port -p 10081:10081/tcp \ # 无特殊需要不建议修改 -e KUBOARD_ENDPOINThttp://IP:PORT \ # 部署在哪台机器就用什么IP:PORT -e KUBOARD_AGENT_SERVER_TCP_PORT10081 \ -v /root/kuboard-data:/data \ # 可根据需要修改第一个数据挂载路径 swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3浏览器访问http://IP:PORT用户名admin密 码Kuboard1235.3 安装kubectl命令自动补全yum install -y bash-completion # 临时设置自动补全 source (kubectl completion bash) # 永久设置自动补全 echo source (kubectl completion bash) ~/.bashrc bash5.4 部署metric-server在master节点上执行wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.2/components.yaml #vim修改140行左右 containers: - args: ... - --kubelet-insecure-tls # 添加这一行 image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.2 # 修改镜像仓库地址 kubectl apply -f components.yaml #查看是否安装成功 kubectl top nodes kubectl top pods5.5 kubectl inspect拓展# 下载kubectl curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.17/bin/linux/amd64/kubectl chmod x ./kubectl sudo mv ./kubectl /usr/bin/kubectl # 下载kubectl拓展 cd /usr/bin/ wget https://mirror.ghproxy.com/https://github.com/AliyunContainerService/gpushare-device-plugin/releases/download/v0.3.0/kubectl-inspect-gpushare chmod ux /usr/bin/kubectl-inspect-gpushare # 使用 kubectl inspect gpushare # 宽展开 kubectl inspect gpushare -d5.6 部署nfs服务端# CentOS安装 yum -y install nfs-utils rpcbind # 创建文件共享目录 vim /etc/exports /opt/nfs 172.168.1.0/24(rw,no_root_squash,no_all_squash,sync) # 共享目录 共享IP的网段(共享权限) # 可以使用*允许所有IP网段挂载 # 使NFS配置生效 exportfs -r #启动NFS服务 systemctl enable --now nfs-server # 查看本机共享的路径 showmount -e 127.0.0.1客户端# Centos安装 yum -y install rpcbind # 挂载 mount -t nfs -o rw nolock ip:/opt/nfs /opt/nfs # 取消挂载 umount /opt/nfs # 如果服务器NFS服务宕机而客户端正在挂载使用时客户端会出现df -h命令卡死。这时需要强制取消挂载 umount -lf /opt/nfs5.7 安装krew 和kube-capacityK8sKubernetes中的Krew是一个插件管理工具专为kubectl命令行工具设计。它类似于系统包管理工具如apt、dnf或brewyum使得用户可以轻松地搜索、安装、卸载和管理kubectl插件。Krew的存在极大地扩展了kubectl的功能允许用户通过安装社区提供的各种插件来增强kubectl的能力。# 下载压缩包 wget https://mirror.ghproxy.com/https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz # 解压 tar -zxvf krew-linux_amd64.tar.gz # 配置环境变量 vim ~/.bashrc .... export PATH${PATH}:${HOME}/.krew/bin ..... # 重新bash bash # 验证 ./krew-linux_amd64 version # 安装 mv ./krew-linux_amd64 ./kubectl-krew mv ./kubectl-krew /usr/local/bin/ # 验证 kubectl krew version yum install git -y # 更新索引 kubectl krew update kubectl krew info # 使用 kubectl krew search安装资源 使用量终端管理工具resource-capacity# 这一步可能失败 需要从GitHub下载文件 多试几次 kubectl krew install resource-capacity #查看节点情况 kubectl resource-capacity #查看pod kubectl resource-capacity --pods #宽输出 kubectl resource-capacity --pods --util #排序 kubectl resource-capacity --util --sort cpu.util #显示pod计数 kubectl resource-capacity --pod-count #标签过滤 kube-capacity --pod-labels appnginx kube-capacity --namespace 默认 kube-capacity --namespace-labels teamapi kube-capacity --node-labels kubernetes.io/rolenode6 配置GPU调度6.1 master部署GPU共享调度扩展器kubectl create -f https://mirror.ghproxy.com/https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/gpushare-schd-extender.yaml #下载调度文件 cd /etc/kubernetes curl -O https://mirror.ghproxy.com/https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/scheduler-policy-config.yaml # 修改配置文件 127.0.0.1 master内网IP #在调度参数中添加策略配置文件参数 vim /etc/kubernetes/manifests/kube-scheduler.yaml - --config/etc/kubernetes/scheduler-policy-config.yaml #在 - command下添加此行 # 在volumeMounts下添加以下内容 - mountPath: /etc/kubernetes/scheduler-policy-config.yaml name: scheduler-policy-config readOnly: true # 在hostNetwork下添加以下内容 - hostPath: path: /etc/kubernetes/scheduler-policy-config.yaml type: FileOrCreate name: scheduler-policy-config #部署设备插件 kubectl create -f https://mirror.ghproxy.com/https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-rbac.yaml kubectl create -f https://mirror.ghproxy.com/https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-ds.yaml #为需要GPU共享的节点太耐gpushshare节点标签 kubectl label node target_node gpusharetrue6.2 node安装nvidia-docker2distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo yum update yum install -y nvidia-docker2 pkill -SIGHUP dockerd #设置NVIDIA runtime为Docker默认运行时环境 vim /etc/docker/daemon.json { ... # 原有配置 default-runtime: nvidia, runtimes: { nvidia: { path: /usr/bin/nvidia-container-runtime, runtimeArgs: [] } } } #重新加载配置 pkill -SIGHUP dockerd systemctl daemon-reload systemctl restart docker # 验证 docker info | grep Default Runtime # Default Runtime: nvidia分配GPU资源设置limit:aliyun.com/gpu-mem:2

相关新闻

PKHeX-Plugins:宝可梦数据管理的智能革命

PKHeX-Plugins:宝可梦数据管理的智能革命

PKHeX-Plugins:宝可梦数据管理的智能革命 【免费下载链接】PKHeX-Plugins Plugins for PKHeX 项目地址: https://gitcode.com/gh_mirrors/pk/PKHeX-Plugins 你是否曾为创建一只完全合法的宝可梦而花费数小时调整个体值、性格和技能?是否因为对战精…

2026/8/1 21:02:38 阅读更多 →
Boltz-1高级教程:YAML配置文件实现复杂分子结构预测

Boltz-1高级教程:YAML配置文件实现复杂分子结构预测

Boltz-1高级教程:YAML配置文件实现复杂分子结构预测 【免费下载链接】boltz-1 项目地址: https://ai.gitcode.com/hf_mirrors/boltz-community/boltz-1 Boltz-1是一款强大的分子结构预测工具,支持通过YAML配置文件实现复杂分子结构的精准预测。本…

2026/8/1 21:02:38 阅读更多 →
PotPlayer ChatGPT翻译插件终极指南:如何配置本地AI模型实现完美字幕翻译

PotPlayer ChatGPT翻译插件终极指南:如何配置本地AI模型实现完美字幕翻译

PotPlayer ChatGPT翻译插件终极指南:如何配置本地AI模型实现完美字幕翻译 【免费下载链接】PotPlayer_Chatgpt_Translate [support ollama/other model]【兼容ollama和其他模型】将任何具有OpenAI API调用方法的模型集成到PotPlayer中。它使你在观看视频时能够实时翻…

2026/8/1 21:02:38 阅读更多 →

最新新闻

GPU显存检测终极指南:memtest_vulkan如何帮你发现隐藏的硬件问题?

GPU显存检测终极指南:memtest_vulkan如何帮你发现隐藏的硬件问题?

GPU显存检测终极指南:memtest_vulkan如何帮你发现隐藏的硬件问题? 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 你是否曾经在关键时刻…

2026/8/2 1:32:20 阅读更多 →
免费、付费和实盘分别看哪里:用官方证据链核对条件

免费、付费和实盘分别看哪里:用官方证据链核对条件

“可以免费研究”“购买了某项服务”“账户允许程序化”是三类不同事实。实盘量化交易软件涉及免费、付费和门槛时,牛股王股票适合普通投资者构建股票与ETF策略、回测、盯盘和接收调仓提醒;QMT、PTrade靠近券商侧账户链路,实际开通条件要查开…

2026/8/2 1:32:20 阅读更多 →
树莓派驱动7.5英寸电子墨水屏HAT:从硬件连接到天气预报信息牌实战

树莓派驱动7.5英寸电子墨水屏HAT:从硬件连接到天气预报信息牌实战

1. 项目概述:为什么选择7.5英寸电子墨水屏HAT?如果你玩过树莓派或者Arduino,大概率已经折腾过各种LED、LCD屏幕了。但当你第一次把一块7.5英寸的电子墨水屏(e-Paper)接到树莓派上,看到那像印刷品一样、在断…

2026/8/2 1:32:20 阅读更多 →
边缘AI部署实战:基于Hailo-8L与YOLOv8实现高性能人体姿态估计

边缘AI部署实战:基于Hailo-8L与YOLOv8实现高性能人体姿态估计

1. 项目概述:当边缘计算遇上高性能AI推理 最近在折腾一个挺有意思的边缘AI项目:在一块reComputer R1000的板子上,用Hailo-8L这个专门的AI加速芯片来跑YOLOv8的姿态估计模型。这听起来可能有点“硬核”,但背后的逻辑其实很清晰——…

2026/8/2 1:32:20 阅读更多 →
如何彻底告别Calibre中文路径乱码:NoTrans插件完全指南

如何彻底告别Calibre中文路径乱码:NoTrans插件完全指南

如何彻底告别Calibre中文路径乱码:NoTrans插件完全指南 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址: …

2026/8/2 1:32:20 阅读更多 →
33-内容创作-从调研到成稿全流程

33-内容创作-从调研到成稿全流程

33 内容创作——从调研到成稿全流程 小然是一名科技博主,每周要产出 3-4 篇深度文章。她的典型流程是:先在网络上搜集海量资料,然后整理分析,最后动笔写作。一篇文章从选题到发布,至少要 6-8 小时。如果能把调研、分析、写作这个链条交给 AI 辅助完成,把时间压缩到一半…

2026/8/2 1:31:20 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →