利用kubeadm安裝centos7.4三節點K8S-1.11版本集群-詳細安裝過程記錄
前言:三個節點的節點配置相關信息以及各個節點的Docker安裝,見我的前兩篇博客!下面開始正文。
安裝K8S集群及網絡組件
2.6.1安裝前準備工作
K8S官方安裝文檔建議每個節點在安裝前都需要禁用SELINUX
Note:
Disabling SELinux by running?setenforce 0?is required to allow containers to access the host filesystem, which is required by pod networks for example. You have to do this until SELinux support is improved in the kubelet.
Node1節點SELINUX已禁用!
2.6.2配置安裝源-官方文檔/阿里云源
cat? <
這里由于我們沒法用京東云主機翻墻,因此我直接配置阿里的鏡像安裝K8S
cat?<
增加了kubernetes.repo
2.6.3安裝K8S組件
#yum?install?-y?kubelet?kubeadm?kubectl?ipvsadm #yum?install?-y?kubelet?kubeadm?kubectl?--disableexcludes=kubernetes?(官方文檔命令)
安裝完成!
重啟K8S相關服務
#systemctl?enable?kubelet?&&?systemctl?start?kubelet
2.6.4配置相關參數
A:分別配置三臺主機hosts文件解析
B:關閉系統swap分區(三節點全部操作)
# 臨時關閉swap
# 永久關閉 注釋/etc/fstab文件里swap相關的行
swapoff?-a
這里解析下為什么要關閉系統的swap分區:
kubernetes的想法是將實例緊密包裝到盡可能接近100%。 所有的部署應該與CPU /內存限制固定在一起。 所以如果調度程序發送一個pod到一臺機器,它不應該使用交換。 設計者不想交換,因為它會減慢速度。所以關閉swap主要是為了性能考慮。當然為了一些節省資源的場景,比如運行容器數量較多,可添加kubelet參數?--fail-swap-on=false來解決。
C:開啟forward(三節點全部操作)
Docker從1.13版本開始調整了默認的防火墻規則
禁用了iptables filter表中FOWARD鏈
這樣會引起Kubernetes集群中跨Node的Pod無法通信
#?iptables?-P?FORWARD?ACCEPT
D:配置相關轉發參數(三節點全部操作)
在CentOS/redhat上可能會出現路由失敗,因此需要做如下配置:
cat?<
E:配置pause鏡像/cgroup等(三節點全部操作)
#?配置kubelet使用國內pause鏡像 #?配置kubelet的cgroups #?獲取docker的cgroups DOCKER_CGROUPS=$(docker?info?|?grep?'Cgroup'?|?cut?-d'?'?-f3) echo?$DOCKER_CGROUPS cat?>/etc/sysconfig/kubelet< 2.6.5初始化master節點 kubeadm?init?--kubernetes-version=v1.11.0?--pod-network-cidr=10.244.0.0/16 報錯了,截圖如下: 應該是無法直接從google拉取相關容器鏡像,但是我應該配置過阿里的K8S鏡像源了為啥還報錯呢?(這里是個巨大的坑,最主要的原因是沒有科學上網,后面自己做實驗的小伙伴,要不想辦法讓你的環境科學上網,要不就自己把需要的鏡像全部pull到本地節點,然后按照他們的要求用docker tag命令修改成他要求的格式image,后面我會繼續遇到此類問題,請繼續往下圍觀。。。) 解決辦法:新建一個執行腳本,先把鏡像下載下來后改名然后再做kubeadm初始化工作(腳本內容和腳本執行后的結果如下圖,從腳本內容看,這個腳本也是網上的兄弟分享出來的,這位兄弟寫的腳本也是從自己的私有鏡像倉庫里拉到本地節點,然后修改image的名稱) 以上運行后發現還是有三個包無法下載下來,但是比第一次要少,第一次一共有7個image無法pull,前面有截圖大家可以對比一下 備注:腳本內容有問題,最后三個包(k8s.gcr.io/pause:3.1; k8s.gcr.io/etcd-amd64:3.2.18 ;k8s.gcr.io/coredns:1.1.3)在腳本里的版本不一致,更換腳本內容如下: 重新執行腳本,截圖如下: 再次開始初始化,前面是K8S版本號,后面是你POD 網絡的 IP 段(為啥非得是這個網段?flannel網絡默認?-確實是flannel網絡默認的pod網絡地址段) 初始化成功! 最下面的這行kubeadm join,就是用來讓別的node加入集群的,可以看出非常方便。我們要保存好這一行東西,這是我們之后讓node加入集群的憑據,一會兒會用到。 kubeadm?join?192.168.0.12:6443?--token?m9t7wo.ut3wimfioutlvdmw?--discovery-token-ca-cert-hash?sha256:8d11ddabde6a0b597bae9e0df488b14101486c7406797b10716e3fd053a31920 這個時候,我們還不能通過kubectl來控制集群,要讓kubectl可用(配置 kubectl認證信息),我們需要做: #?對于非root用戶 $?mkdir?-p?$HOME/.kube $?sudo?cp?-i?/etc/kubernetes/admin.conf?$HOME/.kube/config $?sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config #?對于root用戶$?export?KUBECONFIG=/etc/kubernetes/admin.conf #?也可以直接放到~/.bash_profile(推薦用這個命令) $?echo?"export?KUBECONFIG=/etc/kubernetes/admin.conf"?>>?~/.bash_profile 2.6.6安裝網絡network add-on(flannel) network addon必須在任何app部署之前安裝好。同樣的,kube-dns也會在network addon安裝好之后才啟動。kubeadm只支持CNI-based networks(不支持kubenet)。 比較常見的network addon有:Calico,?Canal,?Flannel,?Kube-router,?Romana,?Weave Net等。這里我們使用Flannel。 #?下載配置 mkdir?flannel?&&?cd?flannel wget?? #?修改配置yaml文件 #?此處的ip配置要與上面kubeadm的pod-network一致 ??net-conf.json:?| ????{??????"Network":?"10.244.0.0/16",?????? ??????????????"Backend":?{???????? ??????????????"Type":?"vxlan" ??????} ????} ????#?修改鏡像 ????image:?registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 ????#?如果Node有多個網卡的話,參考flannel?issues?39701, ????#?https://github.com/kubernetes/kubernetes/issues/39701 ????#?目前需要在kube-flannel.yml中使用--iface參數指定集群主機內網網卡的名稱, ????#?否則可能會出現dns無法解析。容器無法通信的情況,需要將kube-flannel.yml下載到本地, ????#?flanneld啟動參數加上--iface= 創建flannel目錄,并進入目錄,利用wget下載flannelv0.10.0版本的yml文件,如下圖: 執行kubectl?apply?-f?kube-flannel.yml #?查看 kubectl?get?pods?--namespace?kube-system kubectl?get?svc?--namespace?kube-system 2.6.7配置節點加入集群 在其他兩個節點輸入我們之前在做kubeadm初始化的時候命令行給出的命令: 小技巧 忘記初始master節點時的node節點加入集群命令怎么辦(在master節點輸入) #?簡單方法 kubeadm?token?create?--print-join-command #?第二種方法token=$(kubeadm?token?generate) kubeadm?token?create?$token?--print-join-command?--ttl=0 查看節點狀態 kubectl?get?node 接下來看我在安裝flannel組件的時候踩過的坑,以及如何解決!!! 2.6.8解決flannel報錯問題 安裝完flannel網絡組件查看狀態的時候發現有錯誤出現:導致我剛開始沒發現,當在創建pod的時候,一直提示containercreating,容器創建中,始終無法創建成功!!! 進一步看看報錯信息發現: 解決方案: 針對缺少k8s.gcr.io/kube-proxy-amd64:V1.11.0的解決方案思路是,從阿里云鏡像服務市場內pull了一個V1.11.1的包,然后重新tag! 備注:第二行命令里面 k8s前面的“tag”多余了。 結果發現還是報錯,原因是我實在找不到v1.11.0的包,用pull了一個v1.11.1d的image,最后無奈就又用tag命令把版本更換成v1.11.0后,再次 Kubectl describe pod –namespace=kube-system發現之前報錯的兩個節點的proxy服務正常! 但是flannel的組件在node2和node3仍然報錯,之前我們查看過詳細報錯說是flannel的image已經在節點存在,于是我們就到node2和node3上分別重啟了kubelet服務 systemctl restart kubelet后,全部正常: 至此 3節點的K8S集群+flannel安裝完成。 最后給大家分享一個學習k8s的視頻網站,馬哥的教程,我看了非常深入也成體系,講解由淺入深,我覺得非常棒,解決了我很多在普通的文章里看不到的疑問!!!大家可以掃碼學習,價格也不算貴! CentOS Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。