Ubuntu18.04 server部署kubernetes详细记录(含显卡配置) | Ubuntu+Kubernetes

kubernetes平台|从操作系统开始搭建

1.安装配置操作系统

1.1工具准备

  • 主机

  • U盘

  • Ubuntu18.04 server 【官网地址

  • Rufus【官网地址

1.2安装系统

安装操作系统简单,如果你是安装服务器版本,仅需要注意的是安装的时候换一下源:http://mirrors.aliyun.com/ubuntu。如果是桌面版,安装完之后也需要换源。

1.3换源(如果之前没换)

换源

sudo vim /etc/apt/sources.list

删除原来的源,并替换为以下内容。

ubuntu 18.04(bionic) 阿里云 源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新软件源

sudo apt update
sudo apt upgrade

1.4配置openssh-server

安装openssh-server

sudo apt install openssh-server

开放端口并允许Root登陆

sudo vim /etc/ssh/sshd_config

如果需要指定端口,需添加以下内容:

Port <your-port>
PermitRootLogin yes

e.g.
Port 8848
PermitRootLogin yes

# 若指定端口 ssh登陆时也需要使用 -p 参数指定相应端口

如果使用默认端口(22),仅需添加以下内容:

PermitRootLogin yes

2.安装docker-ce

不要使用apt直接安装docker,本文使用版本docker18(一般大版本对得上就没问题)

2.1卸载旧版本docker

sudo apt-get remove docker docker-engine docker.io containerd runc

2.2安装docker

# 先安装安装docker需要的工具
sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
# 设置稳定的存储库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
# 查询可选docker版本
apt-cache madison docker-ce

# 会出现类似以下内容
docker-ce | 5:18.09.9~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:18.09.8~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
 docker-ce | 5:18.09.7~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
  ...
# 安装指定版本docker
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
# 本文使用的安装命令
sudo apt-get install docker-ce=5:19.03.14~3-0~ubuntu-bionic docker-ce-cli=5:19.03.14~3-0~ubuntu-bionic containerd.io

2.3验证docker是否安装成功

sudo docker run hello-world

# 成功会输出带 Hello from Docker! 字样的信息

2.4docker换源及配置

阿里云提供免费的镜像加速器 地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

# 更换源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    
    
  "registry-mirrors": ["https://<上面地址直达获取>.mirror.aliyuncs.com"]
}
EOF

# 添加用户到docker组 否则每次使用docker命令都需要加sudo
sudo usermod -aG docker $USER

# 允许docker后台驻留
sudo systemctl enable docker

# 重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker

2.5卸载docker

sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker

3.安装nvidia-docker(若需用显卡)

3.1卸载旧版本nvidia-docker

sudo apt-get purge -y nvidia-docker

3.2安装nvidia-docker

添加到软件仓库

sudo vim /etc/hosts

# 添加以下内容 (解析nvidia.github.io)
185.199.108.153		nvidia.github.io				  
185.199.109.153		nvidia.github.io				  
185.199.110.153		nvidia.github.io				  
185.199.111.153		nvidia.github.io
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# apt 更新
sudo apt-get update

查看nvidia-docker与docker兼容的版本

apt-cache madison nvidia-docker2

# 部分输出信息
nvidia-docker2 | 2.0.3+docker18.09.7-3 | https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  Packages
nvidia-docker2 | 2.0.3+docker18.09.6-3 | https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  Packages
nvidia-docker2 | 2.0.3+docker18.09.5-3 | https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  Packages
...

查看依赖

apt-cache madison nvidia-container-runtime

# 部分输出信息
nvidia-container-runtime | 2.0.0+docker18.09.7-3 | https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64  Packages
nvidia-container-runtime | 2.0.0+docker18.09.6-3 | https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64  Packages
nvidia-container-runtime | 2.0.0+docker18.09.5-3 | https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64  Packages
...

安装nvidia-docker及其依赖

# 安装命令
sudo apt-get install -y nvidia-docker2=<VERSION_STRING> nvidia-container-runtime=<VERSION_STRING>
# 本文命令
sudo apt-get install -y nvidia-docker2=2.3.0-1 nvidia-container-runtime=3.3.0-1

查看nvida-docker版本

nvidia-docker version

3.3配置显卡

sudo vim /etc/docker/daemon.json

# 修改内容如下 "registry-mirrors"是阿里云容器镜像加速器的地址
{
    
    
  "registry-mirrors": ["https://<就是配置docker时的 不变>.mirror.aliyuncs.com"],
  "default-runtime": "nvidia",
  "runtimes": {
    
    
    "nvidia": {
    
    
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}

# 生效
sudo pkill -SIGHUP dockerd

3.4安装显卡驱动

第一种方法

查看显卡型号

sudo apt install ubuntu-drivers-common
ubuntu-drivers devices

自动安装显卡驱动

sudo ubuntu-drivers autoinstall

安装指定版本显卡驱动

sudo apt install <Version>

e.g.
sudo apt install nvidia-340

查看显卡

nvidia-smi

第二种方法

到nvidia官网下载显卡相应的驱动[官网地址]

安装依赖

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install build-essential libc6:i386

禁用Ubuntu默认驱动

sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

# 验证操作是否成功
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
# 得到以下输出
blacklist nouveau
options nouveau modeset=0

重启操作系统

sudo reboot

解决 WARNING: Unable to find suitable destination to install 32-bit compatibility libraries

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386

查看显卡

nvidia-smi

4.安装cuda和cudnn(也是用显卡才装)

4.1CUDA

以下过程需要注意版本号

根据操作系统下载对应的cuda(runfile):官网地址

# 安装cuda
sudo chmod 777 cuda_10.2.2_linux.run
sudo ./cuda_10.2.2_linux.run

# 配置环境变量
sudo vim ~/.bashrc
# 添加以下内容
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH

# 使配置生效
source ~/.bashrc

# 查看cuda版本
cat /usr/local/cuda/version.txt
# 或
nvcc -V

4.2安装cudnn

以下过程需要注意版本号

官网下载cudnn(需注册)

tar -zxvf cudnn-*    # (仅)此处*号用tab补全即可 就是下载的包的名称

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

# 查看cudnn版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

5.安装部署kubernetes(K8S)

5.1安装kubeadm kubelet kubectl

sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# tee: 读取标准输入的数据 并将其内容输出成文件; cat也可
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt-get update

# 查看可安装版本 查看kubectl的即可 三个工具版本需一致 (同查看nvidia-docker命令相同)
apt-cache madison kubectl

# 安装指定版本的 kubeadm kubelet kubectl (安装最新版不加版本号即可 不推荐)
sudo apt install kubelet=1.15.12-00 kubeadm=1.15.12-00 kubectl=1.15.12-00
sudo apt-mark hold kubelet kubeadm kubectl

# 查看是否安装成功
kubectl version

5.2禁用swap分区

必须做这一步,否则无法初始化master节点

# 临时关闭 重启后就无效了
sudo swapoff -a

# 持续化禁用
sudo vim /etc/fstab
# 注释掉 /swapfile 字样所在行

5.3初始化master节点

# 注: 
# 这里使用了非默认的CIDR(172.16.0.0/16)防止与局域网网段冲突 用10.244.0.0/16之类也可
# --image-repository: 国内用阿里云流畅些 可不用
sudo kubeadm init --pod-network-cidr 172.16.0.0/16 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

# 完成之后执行以下命令 (系统也有提示)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 记录好你自己的加入工作节点的命令和token, 我的输出结果如下:
# 记录你自己电脑的输出!!! 这只是例子(下同)
kubeadm join 192.168.1.101:6443 --token 8evfdy.hl9yvreluqrle6vr \
    --discovery-token-ca-cert-hash sha256:7f619150f8b5c7c97a56f8b48f6b1344d16a2247fe57d02c74eb6583c1e11908

5.4安装网络插件

本文选择安装calico,你可以搜索“Kubernetes网络插件对比分析”选择合适的网络插件。

# 如果下载文件失败可以访问网址获取内容
# ubuntu-server没有图形界面 可使用scp命令  或mobaXterm(很方便)
# 同样可以访问官网查询版本
wget https://docs.projectcalico.org/v3.13/manifests/calico.yaml

# 修改 CALICO_IPV4POOL_CID 与上文(172.16.0.0/16)对应
# vim命令模式下搜索方法: 输入/CALICO_IPV4POOL_CID回车 按n跳转至下一个结果 N反之
# 防止与主机所在的局域网网段冲突

# 安装calico
kubectl apply -f calico.yaml

# 查看pods
kubectl get pods -A

5.5 加入工作节点

将你的另一台主机作为工作节点加入到k8s集群(就是5.3节的命令):

kubeadm join 192.168.1.101:6443 --token 8zpuf4.3m2gm7o8ahlqf58u \
    --discovery-token-ca-cert-hash sha256:673a4120d7ddfa7c4e5d04f90f7c128629c20ffb4c0024160f2420f4eecb

如果token过期,在主节点执行如下命令获取新的token

# 若不输入<token> 系统会给一个随机产生的值
kubeadm token create <token>

5.6允许master部署(污点)

**如果你只有一台主机,只能在master部署了。**为什么k8s默认禁止master部署?[官方文档]

# 允许master节点部署 一般只用这个就OK
kubectl taint nodes --all node-role.kubernetes.io/master-

# 若不允许调度 第一个master是你的主机名
kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule

6.安装Kuboard

为什么不用kubernetes dashboard?你可以搜索“kuboard和dashboard”

如果只有一个节点,必须允许master部署(5.6节)

kubectl taint nodes --all node-role.kubernetes.io/master-

安装kuboard

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml

卸载kuboard(这是卸载!!!)

kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml

获取token

# 获取 user token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')

# 例 我的token
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tZjluNTQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMmIzYWNhMTItNDU4Yy00MGMwLWEwMTYtZGFlMDU3MWUyNDNhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.ae6XJDXT7S-xSF6l6yca9OE3Bue9wP4eEuBTteHkI-sSOIxtI1KRyl_eQZH7Y-zHO0wtSDkgCNQhCJntJe0ws6P6lgkWvtmEHSehnVlIGM0t3aOaKLnCfenkqG6X-slGEWwRlv091-UiJs9LC_UqA_Vp1B2KiriwY0oj7DuoKGj8fHxMzQFvTOzTsZqiw9pQtrMiMP3apBBTHkq60FmZ1JnUiMBozof4uTxiafCJJ3q8v78RW2EBDshVI8Ptb9GtVENjlhcLKqWZDINjOz0bnhStQyUG0_DgCziSXcRzbilqtTnZcZS11PsSan7bQZMF3M2w5tRg5ZBINN8D6AItBQ

# 获取 viewer token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}')

获取kuboard暴露的端口号(默认32567)

kubectl get svc -n kube-system

访问kuboard

http://<IP>:<kuboardPort>
# 我的
http://192.168.1.101:32567

到这一步就完成了k8s平台的部署了,就可以开始部署应用了。还可以安装Helm,NFS服务、kubens等方便部署应用和管理平台。

猜你喜欢

转载自blog.csdn.net/qq_40759015/article/details/113591950