本章介紹所需環境:ubuntu18.04,建立在上一篇微服務探索之路01篇已經安裝了docker的基礎上。
1 替換k8s映象源為國內映象
- 進入目錄
cd /etc/apt/sources.list.d
- 編輯檔案
vim kubernetes.list
執行之後開啟一個編輯介面按字母i進入編輯狀態複製deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
放進去,按esc再:wq儲存
- 執行
apt-get update
如果出現如上圖提示,需要先執行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071
key後面那一串就是截圖裡的那一串根據系統提示修改為對應的就行,執行完如下圖
這時候再重新執行apt-get update
就成功了
- 執行
apt upgrade
遇到選擇看不懂就選擇y,看的懂就按照自己想要的選擇遇到選擇直接預設ok下一步,最後執行完成表示映象已經替換為國內映象,並且所有源都更新為新版本
2 安裝k8s
-
執行
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
-
執行
kubeadm version
檢視版本號
3 安裝映象包
- 需要安裝多個映象所有寫一個指令碼來完成
1.先退到最外層目錄下或者去自己知道的目錄(這邊直接退到最外層目錄執行cd
回車)
2.建立k8spull.sh
內容為(檔案建立和編輯方法可以百度vim用法)
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
3.執行chmod +x k8spull.sh
給指令碼檔案賦予許可權
4.執行指令碼sh k8spull.sh
5.執行docker images
,再執行kubeadm config images list
對比映象是否全都載入成功
這邊發現少了一個coredns,可以手動拉取試試(執行docker pull registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.6
)
嘗試後如上圖發現阿里雲映象裡面沒有這個版本號也不知道去哪檢視最新的版本,所以這邊選擇使用dockerhub裡的最新版本1.8.3執行
docker pull rancher/coredns-coredns:1.8.3
,然後更改映象名執行
docker tag rancher/coredns-coredns:1.8.3 k8s.gcr.io/coredns/coredns:v1.8.6
,最後刪除原始映象執行
docker rmi rancher/coredns-coredns:1.8.3
重新執行docker images
檢查映象是否已經成功,如下圖表示成功
4 初始化kubeadm
- 執行
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
5 設定網路外掛
1.設定環境變數執行export KUBECONFIG=/etc/kubernetes/admin.conf
,執行完這裡順便把環境變數加到系統配置裡防止下次重啟伺服器的時候沒有變數,具體操作如下
vim /etc/profile
開啟之後在底部新增export KUBECONFIG=/etc/kubernetes/admin.conf
,新增之後儲存退出檔案,然後執行source /etc/profile
使其生效。
2.編寫yml進行資源配置,這裡可以直接使用網路上別人寫好的yml檔案直接用以下命令和地址即可
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
需特別注意:
如果執行上一行命令報錯,內容包含did you specify the right host or port,這時候是因為kubelet沒有正常啟動,可以執行journalctl -xefu kubelet
檢視具體的錯誤日誌,本次配置遇到的錯誤是docker和kubelet的驅動程式不同具體如圖
解決方法:
(1).檢視檔案/var/lib/kubelet/config.yaml裡的驅動
(2).把docker的改為跟這個一樣的方式
編輯檔案/etc/docker/daemon.json
,如果檔案本身有內容那就在物件內新增一行"exec-opts": ["native.cgroupdriver=systemd"]
,如果空檔案那就要用大括號包起來{"exec-opts": ["native.cgroupdriver=systemd"]}
,然後儲存退出檔案。
(3)重啟服務,執行以下三個命令
-
systemctl daemon-reload
-
systemctl restart docker
-
systemctl restart kubelet
執行成功,出現下類似圖
3.執行kubectl get nodes
檢視如果出現如下圖內容表示已經成功部署可以進行增加和移除Node(節點)
6 安裝皮膚
1.下載yaml檔案wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
版本號可以去github上選擇tag檢視最新的或者選擇合適自己的
2.開啟yaml檔案檢視映象然後用docker拉取映象,搜尋檔案中image關鍵字可以找到以下兩個相關的映象,版本不一樣版本號也會對應改變
映象1命令:docker pull kubernetesui/dashboard:v2.4.0
映象2命令:docker pull kubernetesui/metrics-scraper:v1.0.7
3.修改yaml檔案將訪問方式改為NodePort,如下圖
改完儲存退出,然後執行kubectl apply -f recommended.yaml
以上執行完之後執行這個看一下是否有繫結好埠號kubectl get svc --namespace=kubernetes-dashboard
,結果如下圖表示成功
7 配置Token
1.開啟https://ip:埠號,會出現如下介面這時不要繼續操作介面,需要先配置Token
2.建立檔案vim dashboard-admin.yaml
,檔案內容為
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-admin
namespace: kubernetes-dashboard
3.執行剛才建立的yaml檔案直接為 Dashboard 賦予 Admin 的許可權kubectl create -f dashboard-admin.yaml
4.查詢建立好的token,先執行kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}'
,出現如下圖
然後根據結果裡返回的名稱執行下面的命令kubectl -n kubernetes-dashboard describe secret kubernetes-dashboard-admin-token-g7vxn
這命令裡的kubernetes-dashboard-admin-token-g7vxn是上一個命令返回的要根據自己得到的替換
5.複製token然後登陸
登陸之後可以切換名稱空間檢視相關的內容
本章結束,下一章詳解如何將自己的專案部署至k8s
以下為遇到錯誤的記錄和解決方案如下:
1.遇到kube-flannel無限自動重啟,先刪除它,等會重新安裝執行刪除命令
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
刪除殘留檔案rm -rf /var/lib/cni/
,rm -f /etc/cni/net.d/*
2.遇到一直迴圈建立k8s-pod,這裡不知道怎麼回事直接重置所有配置,執行命令kubeadm reset
之後重新從第4步初始化環境開始,先給docker設定一下國內映象這一步之前沒操作過;開啟檔案vim /etc/docker/daemon.json
,新增"registry-mirrors":[ "https://阿里雲加速的id.mirror.aliyuncs.com" ]
,這個加速id參考第一篇有說怎麼拿到。
下面開始重新執行:
(1)重新初始化kubeadm,直接照著上面的第4步
(2)重新安裝kube-flannel網路環境,為了防止一直自動重啟,我們這邊先下載yml做完修改再執行
下載,找個路徑然後執行wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然後開啟vim kube-flannel.yml
修改記憶體50mi為200mi
改完儲存之後給檔案新增可執行許可權chmod +x filename
,最後執行kubectl apply -f kube-flannel.yml
最後檢視是否執行成功如下圖
圖上用到的命令kubectl get pods -o wide --all-namespaces
,kubectl get nodes