JupyterHub on K8S私有化部署
环境准备:k8s环境>=1.18
一、使用镜像suggest123/k8s-hub:0.0.11 此镜像使用jwt验证登录
之后可以教大家如何自定义一个jupyterhub镜像。
二.存储选择
1. localpath(本地存储):
提供文件 local-path-storage.yaml。
apiVersion: v1
kind: Namespace
metadata:name: local-path-storage---
apiVersion: v1
kind: ServiceAccount
metadata:name: local-path-provisioner-service-accountnamespace: local-path-storage---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: local-path-provisioner-role
rules:- apiGroups: [ "" ]resources: [ "nodes", "persistentvolumeclaims", "configmaps" ]verbs: [ "get", "list", "watch" ]- apiGroups: [ "" ]resources: [ "endpoints", "persistentvolumes", "pods" ]verbs: [ "*" ]- apiGroups: [ "" ]resources: [ "events" ]verbs: [ "create", "patch" ]- apiGroups: [ "storage.k8s.io" ]resources: [ "storageclasses" ]verbs: [ "get", "list", "watch" ]---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: local-path-provisioner-bind
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: local-path-provisioner-role
subjects:- kind: ServiceAccountname: local-path-provisioner-service-accountnamespace: local-path-storage---
apiVersion: apps/v1
kind: Deployment
metadata:name: local-path-provisionernamespace: local-path-storage
spec:replicas: 1selector:matchLabels:app: local-path-provisionertemplate:metadata:labels:app: local-path-provisionerspec:serviceAccountName: local-path-provisioner-service-accountcontainers:- name: local-path-provisionerimage: rancher/local-path-provisioner:v0.0.20imagePullPolicy: IfNotPresentcommand:- local-path-provisioner- --debug- start- --config- /etc/config/config.jsonvolumeMounts:- name: config-volumemountPath: /etc/config/env:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumes:- name: config-volumeconfigMap:name: local-path-config---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: local-path
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete---
kind: ConfigMap
apiVersion: v1
metadata:name: local-path-confignamespace: local-path-storage
data:config.json: |-{"nodePathMap":[{"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES","paths":["/opt/local-path-provisioner"]}]}setup: |-#!/bin/shwhile getopts "m:s:p:" optdocase $opt inp)absolutePath=$OPTARG;;s)sizeInBytes=$OPTARG;;m)volMode=$OPTARG;;esacdonemkdir -m 0777 -p ${absolutePath}teardown: |-#!/bin/shwhile getopts "m:s:p:" optdocase $opt inp)absolutePath=$OPTARG;;s)sizeInBytes=$OPTARG;;m)volMode=$OPTARG;;esacdonerm -rf ${absolutePath}helperPod.yaml: |-apiVersion: v1kind: Podmetadata:name: helper-podspec:containers:- name: helper-podimage: busyboximagePullPolicy: IfNotPresent
修改对应路径,具体想要了解的话可以去看下k8s的volumeMounts介绍。挂载卷
设置本地存储运行命令 kubectl apply -f .
2.nfs (网络存储): 提供文件 rbac.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]- apiGroups: [""]resources: ["services", "endpoints"]verbs: ["get"]- apiGroups: ["extensions"]resources: ["podsecuritypolicies"]resourceNames: ["nfs-provisioner"]verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-provisioner
subjects:- kind: ServiceAccountname: nfs-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-provisioner
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-provisioner
subjects:- kind: ServiceAccountname: nfs-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-provisionerapiGroup: rbac.authorization.k8s.io
storageclass.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: newlandedu-nfs
provisioner: example.com/nfs
mountOptions:- vers=4.1
deployment.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisioner
---
kind: Service
apiVersion: v1
metadata:name: nfs-provisionerlabels:app: nfs-provisioner
spec:ports:- name: nfsport: 2049- name: nfs-udpport: 2049protocol: UDP- name: nlockmgrport: 32803- name: nlockmgr-udpport: 32803protocol: UDP- name: mountdport: 20048- name: mountd-udpport: 20048protocol: UDP- name: rquotadport: 875- name: rquotad-udpport: 875protocol: UDP- name: rpcbindport: 111- name: rpcbind-udpport: 111protocol: UDP- name: statdport: 662- name: statd-udpport: 662protocol: UDPselector:app: nfs-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-provisioner
spec:selector:matchLabels:app: nfs-provisionerreplicas: 1strategy:type: Recreate template:metadata:labels:app: nfs-provisionerspec:serviceAccount: nfs-provisionercontainers:- name: nfs-provisionerimage: suggest123/nfs-provisioner:v3.0.0ports:- name: nfscontainerPort: 2049- name: nfs-udpcontainerPort: 2049protocol: UDP- name: nlockmgrcontainerPort: 32803- name: nlockmgr-udpcontainerPort: 32803protocol: UDP- name: mountdcontainerPort: 20048- name: mountd-udpcontainerPort: 20048protocol: UDP- name: rquotadcontainerPort: 875- name: rquotad-udpcontainerPort: 875protocol: UDP- name: rpcbindcontainerPort: 111- name: rpcbind-udpcontainerPort: 111protocol: UDP- name: statdcontainerPort: 662- name: statd-udpcontainerPort: 662protocol: UDPsecurityContext:capabilities:add:- DAC_READ_SEARCH- SYS_RESOURCEargs:- "-provisioner=example.com/nfs"env:- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: SERVICE_NAMEvalue: nfs-provisioner- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespaceimagePullPolicy: "IfNotPresent"volumeMounts:- name: export-volumemountPath: /exportvolumes:- name: export-volumehostPath:path: /data
修改对应路径
设置网络存储运行命令kubectl apply -f .
三.部署jupyterhub
对应压缩包 jupyterhub.zip。 修改相应的jupyterhub-config.yaml文件(存储、资源、调度、自定义参数) jupyterhub_config.py为jupyterhub 程序运行参数。可以自定义设置。 部署命令,使用helm命令部署jupyterhub,helm版本>=v3.5.3
使用命令部署:helm upgrade --cleanup-on-fail \ --install jupyterhub ./jupyterhub-1.1.3.tgz \ --namespace jhub \ --create-namespace \ --values jupyterhub-config.yaml \ --set-file hub.extraFiles.my_config.stringData=jupyterhub_config.py
最后的效果
大家需要安装包、或者有其他问题可以私信我,或者扫描关注我的公众号。
JupyterHub on K8S私有化部署相关推荐
- SaaS服务的私有化部署,这样做最高效|云效工程师指北
简介:为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程,云效团队也结合云原生的基础设施和标准化工具(比如helm)进行了一系列的探索和实践,并将其中一些通能的能力进行了产品化.本文从问题 ...
- 为什么Mendix重视私有化部署
私有化部署的诉求 现在很多企业在考察基础设施的时候,都会考虑许多因素.诚然云计算在目前和未来,因为它的灵活性.从节省时间到金钱.从提高敏捷性到更好的伸缩性,因此越来越受欢迎.但另一方面,如果上升到企业 ...
- 神策数据张铎:一文读懂神策私有化部署的架构演进
在神策 2021 数据驱动大会北京场技术论坛上,神策数据首席架构师张铎发表了主题为<神策私有化部署的架构演进>的演讲,本文为精选内容.主要包括: 私有化部署的意义 神策私有化部署的演进及技 ...
- k8s aws 部署_如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署
k8s aws 部署 by Adam Watt 通过亚当·瓦特 如何在短短30分钟内使用CircleCI设置到AWS S3的持续部署 (How to setup Continuous Deployme ...
- centos7 如何安装部署k8s_五步教你如何使用k8s快速部署ES
前言 今天小编打算用五步教大家如何使用k8s快速部署ES,有兴趣的小伙伴可以了解一下~ 由于是使用本地存储,所以需要先创建pv 1.创建存储类 local-elasticsearch.yaml kin ...
- k8s pod部署到不同node_部署Dotnet Core应用到Kubernetes(一) - 老王Plus
最近闲了点,写个大活:部署Dotnet应用到K8s. 写在前边的话 一直想完成这个主题.但这个主题实在太大了,各种拖延症的小宇宙不时爆发一下,结果就拖到了现在. 这个主题,会是一个系列.在这个系列中, ...
- 小时级部署,客户数上千,神策数据的私有化部署靠什么取胜?
秉承着"做正确的事情,而不做简单的事情"的理念,神策数据自创立之初,就采用"私有化部署 + SaaS "的企业服务模式,这无疑是一条更难的路,但通过在这一方向上 ...
- 策小编脑中的“私有化部署”
大家好,上个策小编被开除了, 换王富贵儿来给大家讲故事, 哈哈逗你们的-- 王小明辛苦搬砖在五环, 后厂村路互联网做运营, 老板引进数据驱动理念, 不懂技术咋分析求产品. 二表哥根正苗红在北京, 通州 ...
- 三家逐鹿,私有化部署能帮神策数据杀出重围么?| 公司调研
2015年5月,桑文锋离开百度,创建神策数据. 桑文锋从浙大毕业后去了百度,在百度工作的九年间,大部分时间都在与数据打交道.从日志统计分析到百度数仓,再到搭建数据平台.建立神策数据后,尽管做的事情不同 ...
最新文章
- Vivado下几条 Verilog 综合规则
- 下载服务器 linux系统,如何搭建Linux服务器
- matplotlib 第二次执行报错在 django web服务中
- 大一计算机应用基础答案李小艳,13级幼师班期末考试计算机试题A卷
- 博士的浪漫,就是把你写进论文致谢,保存一辈子
- ORM框架之Mybatis(四)MyBatis生成器,逆向工程生成实体类和SQL
- Windows API数据类型表
- 利用python将图片版PDF转文字版PDF
- xcode ios 模拟器下载安装
- DynamipsGUI 2.3中文版
- windows必备的驱动软件推荐
- Excel学习日记:L4-资料排序
- Unity3D 实现阴阳师 画符
- 不安全!!!都2020年了,你的网站还没上HTPPS说得过去吗?
- Linux常用快捷键、文件管理和查询
- 省市县地址联动插件distpicker 代码及示例
- 软件公司如何才能接到项目
- IO密集型线程和CPU密集型线程
- 日入上万,Jack 年入百万?
- Pycharm工具栏等菜单设置
热门文章
- 斗牛太危险,来斗HEXA吧
- 高级Android研发面试必问:Android屏幕适配全方位解析
- 使用Unity3D提取王者荣耀英雄模型 VR资源
- Wsl与Windows互相访问
- 【Vegas原创】wordpress 从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。此响应不是合法的JSON响应。解决方法。...
- Easy Binding(DataContext,TwoWay)
- 准大学生必看!这10个建议,真希望计算机专业的学生早点知道
- linux中如何查看某个端口是否被占用
- 华为防火墙查看日志命令_华为USG防火墙运维命令大全word精品
- [转]Bram和Dram的区别