1. 程式人生 > 其它 >Ubuntu18.04 server部署kubernetes(K8S)詳細記錄 | 含顯示卡配置

Ubuntu18.04 server部署kubernetes(K8S)詳細記錄 | 含顯示卡配置

技術標籤:UbuntuKubernetesdockerkubernetesdockerlinuxubuntu微服務

kubernetes平臺|從作業系統開始搭建

1.安裝配置作業系統

1.1工具準備

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等方便部署應用和管理平臺。