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