前言
安装前请注意捋清楚版本关系,如kubeflow版本对应的K8S版本及其相关工具版本等等
我们此处使用的是是kubeflow-1.6.1和K8s-v1.22.8
单机部署
部署K8S
初始化Linux
1.关闭selinux
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3.设置hostname
hostnamectl set-hostname ai-node
4.关闭swap
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
5.修改内核参数和模块
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#使内核参数配置生效
sysctl --system
modprobe br_netfilter
lsmod | grep br_netfilter
6.更新系统及内核(可选)
安装docker
1.安装docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
2.替换国内镜像
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
3.启动docker-ce
systemctl start docker
systemctl enable docker
安装kubernetes
1.配置yum源
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=1
# repo_gpgcheck要设置为0,如设置为1会导致后面在install kubelet、kubeadm、kubectl的时候报[Errno -1] repomd.xml signature could not be verified for kubernetes Trying other mirror.
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2.安装kubernetes基础服务
yum install -y kubelet-1.22.8 kubeadm-1.22.8 kubectl-1.22.8
systemctl start kubelet
systemctl enable kubelet.service
3.初始化K8S
# apiserver-advertise-address指定master的interface,版本号与安装的K8S版本要一致,pod-network-cidr指定Pod网络的范围,这里使用flannel网络方案。
# 安装成功之后,会打印kubeadm join的输出,记得要保存下来,后面需要这个命令将各个节点加入集群中
kubeadm init --apiserver-advertise-address=192.168.0.240 --kubernetes-version v1.22.8 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
## 如果初始化过程中出现错误,就reset之后重新init
# kubeadm reset
# rm -rf $HOME/.kube/config
# 查看是否所有的pod都处于running状态
kubectl get pod -n kube-system -o wide
4.初始化kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.设置kubectl自动补充
source <(kubectl completion bash)
可以加入~/.bashrc中以便在新的session中不需要手动加载
6.网络插件
比较常用的时flannel和calico,flannel的功能比较简单,不具备复杂网络的配置能力,calico是比较出色的网络管理插件,单具备复杂网络配置能力的同时,往往意味着本身的配置比较复杂,所以相对而言,比较小而简单的集群使用flannel,考虑到日后扩容,未来网络可能需要加入更多设备,配置更多策略,则使用calico更好
以下网络插件二选一即可
6.1 安装calico网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
##这个地址现在404了,应该是官方改版了,请参考官方文档
calico应该改版了,新的部署方式参考官方:install-calico
6.2 安装flannel网络插件
For Kubernetes v1.17+
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
7.解除master限制
默认k8s的master节点是不能跑pod的业务,需要执行以下命令解除限制
kubectl taint nodes --all node-role.kubernetes.io/master-
部署kubeflow
下载安装脚本
官方仓库地址:https://github.com/kubeflow/manifests
安装kustomize
kustomize 是一个通过 kustomization 文件定制 kubernetes 对象的工具,它可以通过一些资源生成一些新的资源,也可以定制不同的资源的集合。
wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
mv kustomize_3.2.0_linux_amd64 kustomize
chmod +x kustomize
mv kustomize /usr/bin/
镜像同步
1.说明
因为kubeflow的镜像存储在google镜像仓库,国内被墙,因此正常安装方式是不会安装成功的,此时提供两种途径
1.使用国内的同步镜像
2.自己从google仓库同步镜像
第一种方式显然比较简单,但是问题也和明显,镜像很多时候同步并不及时,因此很多镜像都是老版本的,如果想用全新版本安装,想要找到一个合适的镜像仓库,还是比较费劲的
第二种方式就一个要求:使用科技上网【不懂的话还是选第一种方式吧】
因为我们当前需要安装的kubeflow-1.6.1是最新版本,国内的同步仓库目前没发现最新版本,因此,我们选择第二种方式
2.同步
2.1 网络问题搞定后【可以科技上网】,将刚才下载的manifests-1.6.1.tar.gz包解压
tar -zxvf manifests-1.6.1.tar.gz
2.2 进入目录
cd manifests-1.6.1
获取gcr镜像,因为我的网络只无法获取gcr.io, quay.io正常,可以根据需求修改
kustomize build example |grep 'image: gcr.io'|awk '$2 != "" { print $2}' |sort -u
检查一下如果有镜像不带tag,说明提取的时候有问题,将awk去掉后仔细看看,gcr.io仓库下载是需要带tag的,换句话说,好像没有latest
2.3 使用脚本将以上获取的镜像同步至指定仓库,可以是dockerhub,也可以是私有镜像仓库
脚本配置,此脚本是网友编写,源码地址:https://github.com/kenwoodjw/sync_gcr
# tree sync_gcr
sync_gcr/
├── images.txt
├── load_image.py
├── README.md
└── sync_image.py
将步骤2.2获取的镜像列表放到images.txt中
修改sync_image.py中的镜像仓库及相关登录信息(如果是public仓库,则不需要login)
# coding:utf-8
import subprocess, os
def get_filename():
with open("images.txt", "r") as f:
lines = f.read().split('\n')
# print(lines)
return lines
def pull_image():
name_list= get_filename()
for name in name_list:
if 'sha256' in name:
print(name)
sha256_name = name.split("@")
new_name = sha256_name[0].split("/")[-1]
tag = sha256_name[-1].split(":")[-1][0:6]
#此处为了加载镜像速度,我放在内网的私有镜像仓库中
image = "192.168.8.38:9090/grc-io/" + new_name + ":"+ tag
cmd = "docker tag {0} {1}".format(name, image)
subprocess.call("docker pull {}".format(name), shell=True)
subprocess.run(["docker", "tag", name, image])
#subprocess.call("docker login -u user -p passwd", shell=True)
subprocess.call(

该文详细介绍了如何在单机环境中部署Kubernetes(K8S)v1.22.8,然后安装Kubeflow1.6.1。包括关闭selinux、防火墙,设置hostname,禁用swap,修改内核参数,安装docker和kubernetes,初始化K8S集群,以及处理由于Google镜像仓库被墙导致的镜像同步问题。文中提供了完整的配置文件修改和镜像替换方法,最后展示了如何解决部署过程中的权限问题和镜像拉取失败的问题。
部署&spm=1001.2101.3001.5002&articleId=129085208&d=1&t=3&u=f269c2fc498e47faa4abe55394cf43cf)
604

被折叠的 条评论
为什么被折叠?



