centos单机-k8s上部署jupyterhub - Go语言中文社区

centos单机-k8s上部署jupyterhub


1. Centos下安装k8s

1.1 安装Docker

yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker
systemctl start docker

1.2 安装Kubeadm

配置阿里的源。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

重建yum缓存。

yum -y install epel-release
yum clean all
yum makecache

安装Kubeadm。

yum -y install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet && systemctl start kubelet

1.3 配置Kubeadm所用到的墙内镜像

版本需要替换一下

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.4
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.4
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.4
docker pull mirrorgooglecontainers/kube-proxy:v1.13.4
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6

docker tag mirrorgooglecontainers/kube-apiserver:v1.13.4 k8s.gcr.io/kube-apiserver:v1.13.4
docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.4 k8s.gcr.io/kube-controller-manager:v1.13.4
docker tag mirrorgooglecontainers/kube-scheduler:v1.13.4 k8s.gcr.io/kube-scheduler:v1.13.4
docker tag mirrorgooglecontainers/kube-proxy:v1.13.4 k8s.gcr.io/kube-proxy:v1.13.4
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag docker.io/coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6

1.4 关闭swap

• 临时禁用

	sudo swapoff -a

• 永久禁用
打开/etc/fstab注释掉swap那一行。

1.5 关闭SELinux

• 临时禁用selinux

setenforce 0

• 永久关闭
修改/etc/sysconfig/selinux文件设置

	sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux

1.6配置转发参数

配置转发相关参数,否则可能会出错

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.all.forwarding = 1
vm.swappiness = 0
EOF

使配置生效,查看输出中的相关参数是否被其它文件覆盖

sysctl --system

为防止被覆盖,可执行下面的命令

sysctl -p /etc/sysctl.d/k8s.conf

1.7初始化相关镜像

kubeadm init

1.8配置kubectl认证信息

• 临时生效

export KUBECONFIG=/etc/kubernetes/admin.conf

• 永久生效

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile #这步很关键,不然kubectl命令会提示can’t connection

1.9 部署Weave网络插件

kubectl apply -f https://git.io/weave-kube-1.6

参考网址:https://juejin.im/post/5c36fd906fb9a049f8197c9b?tdsourcetag=s_pctim_aiomsg

2. 安装helm

安装helm客户端

  1. 下载需要的helm版本(此处下载2.13.1版)
curl -O https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
  1. 解压
 tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
  1. 在解压后的文档中找到helm并把它移动到bin文件夹下:
mv linux-amd64/helm /usr/local/bin
  1. 在终端输入helm help验证是否安装成功。
    注意:终端可能会提示没有helm命令,使用命令
    export PATH=/usr/local/bin:$PATH添加环境变量即可(该方法只是临时添加),重启后失效。

在k8s集群初始化helm

在进行下列操作前,要先获得root用户权限,使用sudo -i获得root用户权限,不然终端会报“The connection to the server localhost:8080 was refused”。在root用户下,需添加环境变量export PATH=/usr/local/bin:$PATH,否则会终端会提示无helm命令。

  1. 建立一个serviceAccount供tiller使用
kubectl --namespace kube-system create serviceaccount tiller
  1. 给予seviceAccount管理集群的完整权限
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
  1. 安装helm和tiller
helm init --service-account tiller
  1. 使用kubectl patch对tiller做如下配置
kubectl patch deployment tiller-deploy --namespace=kube-system --type=json --patch='[{"op": "add", "path": "/spec/template/spec/containers/0/command", "value": ["/tiller", "--listen=localhost:44134"]}]'
  1. 验证helm安装
helm version

终端同时显示client和server端的version信息且匹配,则安装成功。
注意:
在第五步验证时候,终端提示“could not find a ready tiller pod”,代表tiller的pod已经存在,但是没有运行起来。使用kubectl get pod --all-namespaces找到tiller对应的pod。
在这里插入图片描述
然后使用kubectl describe pod + pod名(上图红色矩形框中的名字)查看错误描述,可以看到” 1 node(s) had taints that the pod didn’t tolerate”,这是因为kubernetes出于安全考虑默认情况下无法在master节点上部署pod,使用如下命令解决:kubectl taint nodes --all node-role.kubernetes.io/master-

参考网址:
https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-helm.html
https://github.com/helm/helm/blob/master/docs/install.md
https://www.hi-linux.com/posts/21466.html
https://my.oschina.net/eima/blog/1860598

3. 安装jupyterhub

准备配置文件

  1. 生成随机字符串作安全标识:
openssl rand -hex 32
  1. 创建一个名为config.yaml的文件
touch config.yaml
  1. 使用命令vi config.yaml添加以下内容:
proxy:
  secretToken: "<RANDOM_HEX>"

  其中<RANDOM_HEX>表示第一步中随机生成的字符串

注意:secretToken: "<RANDOM_HEX>"中冒号后有一个空格,缺少空格则后续操作无法进行。

  1. wq保存并退出

安装jupyterhub

  1. helm添加软件仓库并更新仓库:
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
helm repo update
  1. 在config.yaml所在目录下执行下列命令安装chart:
RELEASE=jhub
NAMESPACE=jhub

helm upgrade --install $RELEASE jupyterhub/jupyterhub 
  --namespace $NAMESPACE  
  --version=0.8.0 
  --values config.yaml
  1. 使用 kubectl get service --namespace jhub命令找到proxy-public对应的端口号
  2. 打开浏览器,地址栏输入主机ip:端口号访问并使用jupyterhub。

注意:

  1. proxy-public如果处于pending状态,是因为svc暴露给外网的方式为LoadBalancer,又没有配转发,所以获取不到ip;修改svc中的type为NodePort,通过使用本机ip+端口的方式暴露给外网。使用如下命令:
kubectl -n jhub get svc
kubectl -n jhub edit svc proxy-public

   找到type字段将LoadBalancer修改为NodePort

  1. hub的pod处于pending状态,kubectl describe pod + pod名,如果报错“pod has unbound immediate PersistentVolumeClaims”,则修改helm安装jupyterhub时的config.yaml文件,添加以下内容:
    hub:
      db:
        type: sqlite-memory
    singleuser:
       storage:
          type: none

   然后重新执行以下命令:

RELEASE=jhub
NAMESPACE=jhub

helm upgrade --install $RELEASE jupyterhub/jupyterhub 
  --namespace $NAMESPACE  
  --version=0.8.0 
      --values config.yaml
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u012174752/article/details/89173916
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢