如何在Google Cloud Kubernetes节点安装Python库(以gcsfs为例)
我平时在管理GKE集群的时候,常用这几种方法来安装Python库(包括你需要的gcsfs),分享给你:
一、通用方法:在GKE节点上安装Python库
1. 直接登录节点执行命令(适合小集群或临时操作)
这种方法最直接,手动登录每个节点安装:
- 先获取集群的节点列表:
kubectl get nodes - 用
gcloud登录目标节点(替换<节点名称>和<节点区域>):gcloud compute ssh <节点名称> --zone <节点所在区域> - 登录后先安装pip(如果节点没装的话),再安装目标库:
# 更新包索引(针对Debian/Ubuntu系节点,COS节点可能需要调整) sudo apt-get update && sudo apt-get install python3-pip -y # 安装Python库,比如gcsfs sudo pip3 install gcsfs注意:如果是Container-Optimized OS(COS)节点,默认的Python环境可能需要用
pip3的完整路径,或者先安装必要的依赖包。
2. 用DaemonSet自动批量安装(适合大集群)
如果集群节点数量多,手动一个个登太麻烦,可以用DaemonSet让每个节点自动执行安装命令:
创建一个daemonset-install-gcsfs.yaml文件,内容如下:
apiVersion: apps/v1 kind: DaemonSet metadata: name: install-gcsfs spec: selector: matchLabels: app: gcsfs-installer template: metadata: labels: app: gcsfs-installer spec: containers: - name: installer image: python:3.9-slim command: ["sh", "-c", "apt-get update && apt-get install -y python3-pip && pip3 install gcsfs && sleep infinity"] securityContext: privileged: true volumeMounts: - name: host-python-site-packages mountPath: /usr/local/lib/python3.9/site-packages volumes: - name: host-python-site-packages hostPath: path: /usr/local/lib/python3.9/site-packages type: Directory
- 应用这个DaemonSet:
kubectl apply -f daemonset-install-gcsfs.yaml - 安装完成后可以删除这个DaemonSet:
kubectl delete daemonset install-gcsfs
提示:要根据节点实际的Python版本调整
site-packages的路径,比如Python3.8的话路径是/usr/local/lib/python3.8/site-packages。
3. 自定义节点镜像(适合长期稳定的集群)
如果你的集群需要长期运行,不想每次添加节点都重复安装,可以自定义GKE节点镜像,预先把需要的库装进去:
- 先找到当前集群使用的节点镜像版本,比如COS镜像:
gcloud container get-server-config --zone <集群区域> - 创建
Dockerfile:# 替换成你获取到的节点镜像 FROM cos-cloud/cos-89-16108-544-43:latest RUN apt-get update && apt-get install -y python3-pip RUN pip3 install gcsfs - 构建并推送到Google Container Registry(GCR):
gcloud builds submit --tag gcr.io/<你的GCP项目ID>/custom-gke-node:v1 . - 创建新的节点池时指定这个自定义镜像:
gcloud container node-pools create custom-pool \ --cluster <集群名称> \ --zone <集群区域> \ --image-type=custom \ --image-url=gcr.io/<你的GCP项目ID>/custom-gke-node:v1
二、gcsfs的额外权限配置
安装完gcsfs后,节点还需要有访问GCS Bucket的权限:
- 找到节点使用的服务账号(可以通过
kubectl describe node <节点名>查看Node Labels里的cloud.google.com/service-account) - 给这个服务账号添加GCS访问权限,比如只读权限:
gcloud projects add-iam-policy-binding <你的GCP项目ID> \ --member=serviceAccount:<节点服务账号邮箱> \ --role=roles/storage.objectViewer
三、更推荐的方式:在Pod内安装(符合K8s最佳实践)
其实在Kubernetes里,更推荐在Pod层面管理依赖,而不是节点层面,这样不会污染节点环境,也更灵活。比如用Init Container提前安装gcsfs:
apiVersion: apps/v1 kind: Deployment metadata: name: my-data-processing-app spec: replicas: 3 selector: matchLabels: app: data-app template: metadata: labels: app: data-app spec: initContainers: - name: install-gcsfs image: python:3.9-slim command: ["pip", "install", "gcsfs"] volumeMounts: - name: python-libs mountPath: /usr/local/lib/python3.9/site-packages containers: - name: app-container image: <你的应用镜像> volumeMounts: - name: python-libs mountPath: /usr/local/lib/python3.9/site-packages volumes: - name: python-libs emptyDir: {}
这样每个Pod启动前都会先安装gcsfs,应用容器直接就能用,而且不会影响其他Pod或节点。
内容的提问来源于stack exchange,提问作者Brendan Martin
相关产品推荐
相关产品推荐

