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/10/15 6:58:00 阅读更多 →
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/9/29 0:39:49 阅读更多 →
PotPlayer ChatGPT翻译插件终极指南:如何配置本地AI模型实现完美字幕翻译

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

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

2026/10/8 13:59:18 阅读更多 →

最新新闻

第一次用Bambu Studio切片:从导入模型到出件的完整上手教程

第一次用Bambu Studio切片:从导入模型到出件的完整上手教程

第一次用Bambu Studio切片:从导入模型到出件的完整上手教程 【免费下载链接】BambuStudio PC Software for BambuLab and other 3D printers 项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio Bambu Studio 是一款面向 Bambu Lab 及其他品牌 3…

2026/10/15 6:57:51 阅读更多 →
Docker部署Mycat:实现MySQL读写分离与主从复制实战

Docker部署Mycat:实现MySQL读写分离与主从复制实战

前几天一个后端朋友跑来找我,说他们的订单库最近扛不住了:单台 MySQL 读写混跑,查询一多,CPU 直接飙到 80%,关键业务写操作被拖得特别慢。这个场景太典型了,读多写少、数据库连接动不动被慢查询占满。当时我…

2026/10/15 6:57:51 阅读更多 →
DeepSeek大模型工程化落地:本地部署、接口调用与避坑指南

DeepSeek大模型工程化落地:本地部署、接口调用与避坑指南

简介:这份PPT资料围绕DeepSeek大模型展开系统介绍与前景展望,面向对大模型技术感兴趣的学习者、AI从业者及希望了解国产大模型发展现状的技术人员。内容从大模型概念与趋势切入,依次讲解DeepSeek的模型架构、多层神经网络与模块化设计&#x…

2026/10/15 6:57:51 阅读更多 →
HarmonyOS高精图像处理与头像裁剪持久化实战

HarmonyOS高精图像处理与头像裁剪持久化实战

开了几个项目之后,我对HarmonyOS开发里“图像处理”这块算是摸出了一些门道。尤其是高精图像处理与头像裁剪持久化,这两个词听起来不复杂,但真做起来,整条链路上全是细节:解码精度怎么保证、裁剪框跟不跟手、坐标怎么映…

2026/10/15 6:57:51 阅读更多 →
Zustand状态管理中实现计算属性的最佳实践

Zustand状态管理中实现计算属性的最佳实践

1. Zustand 状态管理中的计算属性需求在 React 生态中,Zustand 因其简洁的 API 和出色的性能成为越来越受欢迎的状态管理方案。但在实际业务开发中,我们经常遇到这样的场景:某个状态值需要基于 store 中的其他状态经过计算得到。类似 Vue 中的…

2026/10/15 6:57:51 阅读更多 →
Java反射机制原理、优化与实践指南

Java反射机制原理、优化与实践指南

1. 反射机制的本质与核心价值Java反射是运行时动态获取类信息并操作类成员的能力集合。与静态编码不同,反射允许程序在编译期未知具体类的情况下,通过Class对象完成方法调用、字段存取等操作。这种能力源于JVM的类型信息保留机制——即使经过编译擦除&am…

2026/10/15 6:56:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →