虛擬機和雲服務器上k8s、dashboard、helm的簡易安裝經驗與問題

虛擬機和雲服務器上安裝K8s實錄與問題彙總,以及dashboard與helm的安裝

標籤:Kubernetes 安裝記錄

其他博客

在學習過程中陸續蒐集到了一些不錯的文章

原因

上學期的時候我在上潘茂林老師的服務計算課程的時候也接觸到了容器化技術和Kubernetes,但是很可惜那時候因爲計算機視覺的期末大作業過於難搞,因此沒有學習。但是據說Kubernetes的安裝極其艱難,因此先寫下這篇安裝實錄,以備不時之需。安裝環境是位於虛擬機中的Centos7,希望不要出什麼大的問題。

因爲不知道下一次看到這篇文章是什麼時候,我將盡量與版本解耦合,如果到時候不存在這個工具了,那我也沒什麼辦法。

文章安裝

Virtualbox配置centos7網絡,經過實踐,這篇文章講的是沒有問題的。配置ip除了可以按照文章上說的以外,也可以使用nmtui工具進行配置。

從零開始搭建Kubernetes集羣主要參考這篇文章。此外還有使用rancher來進行安裝的,也十分簡單,這裏不贅述。建議安裝圖形界面,然後使用ssh登陸進行端口映射登陸(這個鏈接裏有提到怎麼設置),這樣子比較好安裝增強功能(記得提前更新系統內核,可以先按照官方docker安裝上裝好依賴,裝完docker之後裝增強功能更容易,我本人成功率爲100%)。

因爲kubeadm init操作需要從谷歌的網站拉鏡像,國內基本是不用想的了。kubeadm搭建kubernetes這裏提供了兩種方法,都可以。也可以使用azure的國內gcr proxy用前一種方法提前拉取鏡像,然後再修改對應的鏡像名就好了(比如docker tag imageid name:tag)。

kubectl taint nodes --all node-role.kubernetes.io/master-可以允許Master節點作爲工作節點,這樣可以不使用minikube而創建一個單節點的K8S集羣。

安裝鏡像

docker pull gcr.azk8s.cn/google_containers/kube-apiserver:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-controller-manager:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-scheduler:v1.13.4
docker pull gcr.azk8s.cn/google_containers/kube-proxy:v1.13.4
docker pull gcr.azk8s.cn/google_containers/pause:3.1
docker pull gcr.azk8s.cn/google_containers/etcd:3.2.24
docker pull gcr.azk8s.cn/google_containers/coredns:1.2.6

docker pull gcr.azk8s.cn/google_containers/kubernetes-dashboard-amd64:v1.10.1

k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

k8s.gcr.io/kube-apiserver:v1.13.4
k8s.gcr.io/kube-controller-manager:v1.13.4
k8s.gcr.io/kube-scheduler:v1.13.4
k8s.gcr.io/kube-proxy:v1.13.4
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6

常見問題解決

執行完kubeadm init後忘記token,或者token24小時過期後還想再加入新的節點,可以參考stackoverflow上的這篇文章,根據官方文檔來進行操作(第二個)

執行kubeadm init的時候,可能會報錯/proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1,這裏這篇文章給出了很好的解決方法:

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptablesecho 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

因故或者意外刪除節點的時候需要執行kubeadm reset,如果出現Port 10250被佔用的情況也需要進行處理,如這個

如何debug,當節點出現異常的時候,stackoverflow問題

問題:出現了下面的情況,且無法連接服務器

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解決方案:依據官方文檔,執行下面的命令來覆蓋"admin"用戶的默認kubeconfig文件(很多情況都可以由這個解決)

mv  $HOME/.kube $HOME/.kube.bak
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

問題:kubectl指令出現The connection to the server localhost:8080 was refused的情況:

sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf

配置kubernetes-dashboard

也可以參考這個(雖然我用的不是nodePort而是kube proxy,這一條kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'

或是配置service nodeport,端口31064.

首先是鏡像問題,因爲在國內無法訪問到

訪問http://203.195.219.185:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login登陸,登陸前要先按照kubernetes Dashboards中的身份認證詳解中所說的,製作token。

得到token,並獲取token。

將token經過base64解碼後作爲token登陸,既可以擁有管理員權限操作整個k8s集羣中的對象。或者將這串token進行base64解碼後,加到admin用戶的Kubeconfig文件中。

token例子

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi10NjhtOSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjU5NTRjZTcxLTQwMDktMTFlOS04ZDZiLTUyNTQwMDEyMThlYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.aCaemFbyBCm_uluT5MIiME_tAo4XE_S6d9WNj4bQIxvx_XyXALnAhZ13ysUBONx2NddoxxRAe_mF6GsNOZ9_RDdU65veJwkI8sp3AoJn5gtBysILiW1Sv1O4BV4Nnk-GVrBJysW5wcHFMN0cgC00F1iI3sry-KQRm8lV49Z3eiEn4AbuT4GqcprNGt0dN_WkiOWar-iJduwX6_xXsQ8Zf1iBmFWrZY-TAiok0nKtCn6QPex5FoZKJ5fWtJPJHvnaioKmY3lrYTHXrbz_ql08N9EHuSLUdhLdkZI-F2RzN3fY47a437h8mw3hJQhUyHUzgrq8iR8f6bOWyBjxmNW3SA

遇到的問題

kubernetes安裝dashboard後輸入token沒反應。後面才發現沒有改官網的yaml文件。像這裏

安裝helm

helm client的安裝就不說了,很簡單。

安裝完client後開始安裝server: helm tiller。使用helm init --upgrade命令即可開始安裝,但因爲安裝的時候默認會向拉取gcr.io/kubernetes-helm/tiller鏡像,國內怎麼可能拉得了,所以可以使用阿里雲的helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts,其中這個tiller的版本可以自行更改

在過程中可能會遇到Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group "" in the namespace "kube-system"這樣的錯誤信息,這時可以參考這篇issuehelm的權限問題中noprom提到的,重新安裝helm tiller,建立高權限用戶來解決。(雖然他執行到這一步之後還是有問題,但是我自己試過一遍之後是可以的)

使用helm安裝istio

參考官方教程,使用Helm的helm template來安裝。

PS:官方教程有點問題,可以參考這篇文章,注意修改istio的版本。

在下載好的壓縮包內執行kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml,安裝istio定義的資源。然後執行kubectl apply -f install/kubernetes/istio-demo-auth.yaml配置用戶。

因爲使用的不是docker的官方鏡像,所以比較慢,需要耐心等待(10分鐘內基本完成),或者自己先行下載好鏡像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章