kubernetes的學習日誌3-kubernetes的集羣部署


kubernetes系統可以運行在多種平臺之上,包括虛擬機、裸服務器或PC等,例如本地主機或者託管的雲端虛擬機。這裏使用虛擬機作爲本地主機,將master和node部署到多臺主機之上。

kubeadm部署工具

kuberadm是kubernetes自帶的集羣構建工具,它負責執行構建一個最小化的可用集羣以及將其啓動等必要步驟,簡單來講,kuberadm是kubernetes集羣全生命週期的管理工具,可用於實現集羣的部署、升級/降級以及拆除。

集羣的運行模式

獨立模式:系統個組件直接以守護進程的方式運行在節點之上,各個組件之間相互協作構成集羣。這種模式需要將個組件運行於系統之上的獨立守護進程當中,期間需要用到的證書及Token等認證信息也需要手動完成,過程非常繁瑣而且極其容易出錯;如果有需要用到,建議使用Githup上合用的項目進行輔助,例如通過ansible playbook進行自動部署。

靜態Pod模式:除了kubelet和docker之外的其他組件(如:etcd、kube-apiservice、kube-controller-manager和kube-scheduler等)都是以靜態Pod對象運行在集羣之上。

自託管模式:類似第二種方式,將kubelet和docker之外的其他組件運行爲集羣之上的Pod對象,但不同的是,這些Pod對象託管運行在集羣自身之上受控於DaemonSet類型的控制器,而非靜態的Pod對象。

使用kubeadm部署的kubernetes集羣可運行爲第二或者第三中模式,默認爲靜態Pod模式,需要使用自託管模式時,kubeadm init命令使用“–features-gates=seltHosting”選項即可。

準備用於實踐操作的集羣環境

K8s集羣部署目標示意圖

準備四個虛擬主機

這裏使用的虛擬機是VMware,操作系統是Centos7。
修改主機名:
vim /etc/networks
修改主機名-k8s-master
修改主機名映射:
vim /etc/hosts
在這裏插入圖片描述
關閉firewalld:
systemctl stop firewalld(關閉)
systemctl disable firewalld(開機禁用)

設置docker yum源:

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

設置kubernetes yum源:
vim /etc/yum.repos.d/kubernetes.repo
添加內容

[kubernetes] name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enable=1

這裏使用的是阿里的雲鏡像源

克隆節點主機:
關閉k8s-master主機,右鍵虛擬機主機->管理->克隆,克隆方式選擇完整克隆,分別克隆三臺虛擬主機。

修改節點主機參數:
由於node主機是master克隆出來的,需要修改其一些參數,修改node主機IP,主機名稱和Hosts

vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改節點主機IP
vim /etc/networks
修改節點主機名

vim /etc/hosts
修改節點主機Hosts

初始化Master

修改bridge-nf-call-iptables

由於kubeadm初始化的時候,會生成大量iptables規則,所有需要開啓bridge-nf-call-iptables

cat /proc/sys/net/bridge/bridge-nf-call-iptables

如果值爲0,則需要修改爲1。

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

同理/proc/sys/net/bridge/bridge-nf-call-ip6tables也一樣。

安裝docker-ce,kubelet,kubeadm,kubectl

yum install -y docker-ce kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3

這裏我使用的k8s版本是1.15.3,那是因爲後面k8s初始化的時候需要使用k8s.gcr.io這個倉庫地址的鏡像,而這個倉庫因爲一些原因在國內無法被訪問,不過有很多人把鏡像同步到了docker.io上,需要我們自己去找,而我手上有的鏡像版本是1.15.3,後面我會放出這些鏡像的壓縮包的地址。如果你想安裝最新的k8s穩定版,只需要把後面的版本號去掉就行,然後根據安裝的提示自己去找相應版本的依賴鏡像,或者直接FQ。

修改kubelet配置文件

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="–fail-swap-on=false"

kubeadm初始化

kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

–pod-network-cidr=10.244.0.0/16和–service-cidr=10.96.0.0/12都是kubeadm初始化時候的默認值,也可以不指定這兩個參數或者指定爲其他網段

這時候如果你不是FQ或者提前把k8s.gcr.io相應導入到本地倉庫,那麼會報錯:
kubeadm初始化所需的鏡像
錯誤會顯示所需要拉取的鏡像倉庫和Tag。

下載所需要的鏡像壓縮包並且導入到本地倉庫
導入鏡像到本地倉庫
重置kubeadm

kubeadm reset

再次執行初始化命令

kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

kubeadm初始化成功
如果出現上面的內容表示初始化成功,如何把圖中的紅圈標記的三條命令,分別執行一次,這是kubeadm創建的k8s配置信息。
同時記得把最後面這個信息記錄下來,因爲後面node節點需要加入到當前集羣需要用到這個信息

kubeadm join 192.168.3.80:6443 --token j5jmj3.f156dy95ejkzonnd \
–discovery-token-ca-cert-hash sha256:d55325115fa153d2fcb53a69bf3d3f24bb6b9369fb3c7594297baa3b98d27cc4

安裝flannel

這裏k8s集羣的Pod網絡配置,有flannel插件提供,flannel不屬於k8s官方組件,所以需要我們額外自己安裝。
flannel Githup
flannel安裝
在flannel的Githup主頁面介紹,如果kubernetes是1.7版本以上我們只需要安裝後面的命令安裝即可,我上面安裝的是1.15.3。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

flannel開始安裝
上面輸入內容表示flannel已經開始安裝,但是不代表已經安裝完成。
我們通過命令

docker images

查看flannel鏡像是否已經拉下來
flannel-images-pull
當鏡像拉取下來後,我們通過命令

kubectl get pods -n kube-system

初始化Pods
上面輸出顯示了Master節點所有的系統組件靜態Pod對象和flannel Pod對象。

初始化node主機

前面和master初始化時一樣:修改bridge-nf-call-iptables、安裝docker-ce,kubelet,kubeadm,kubectl、修改kubelet配置文件

導入本地依賴鏡像

node節點鏡像只需要導入k8s.gcr.io/kube-proxy和k8s.gcr.io/pause即可,flannel在加入master的時候會自動拉取。

加入到mater

找到master剛剛初始化成功後,最後輸出的token信息,粘貼過來,同時後面加上–ignore-preflight-errors=Swap

kubeadm join 192.168.3.80:6443 --token j5jmj3.f156dy95ejkzonnd \
–discovery-token-ca-cert-hash
sha256:d55325115fa153d2fcb53a69bf3d3f24bb6b9369fb3c7594297baa3b98d27cc4 --ignore-preflight-errors=Swap

node-join
輸出上面信息,表示node節點已經加入到當前k8s集羣。

再到master主機,輸入

kubectl get nodes

nodes
如同所示,這樣集羣中便有了一個master節點和一個node節點

node2和node3同樣的方式初始化
集羣環境初始化完成
這樣我們用於實踐的K8s集羣環境就初始化完成了。

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