Ubuntu Server安装配置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
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= docker-ce-cli= 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= nvidia-container-runtime=
# 本文命令
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
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 <
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
# 若不输入 系统会给一个随机产生的值
kubeadm token create
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://:
# 我的
http://192.168.1.101:32567
到这一步就完成了k8s平台的部署了,就可以开始部署应用了。还可以安装Helm,NFS服务、kubens等方便部署应用和管理平台。