Kubernetes集群部署
一、Kubernetes簡介
在Docker 作為高級容器引擎快速發展的同時,在Google內部,容器技術已經應用了很多年,Borg系統運行管理著成千上萬的容器應用。
Kubernetes項目來源于Borg,可以說是集結了Borg設計思想的精華,并且吸收了Borg系統中的經驗和教訓。
Kubernetes對計算資源進行了更高層次的抽象,通過將容器進行細致的組合,將最終的應用服務交給用戶。
Kubernetes的好處:
-
隱藏資源管理和錯誤處理,用戶僅需要關注應用的開發。
-
服務高可用、高可靠。
-
可將負載運行在由成千上萬的機器聯合而成的集群中。
1.kubernetes設計架構
Kubernetes集群包含有節點代理kubelet和Master組件(APIs, scheduler, etc),一切都基于分布式的存儲系統。
Kubernetes主要由以下幾個核心組件組成:
- etcd:保存了整個集群的狀態
- apiserver:提供了資源操作的唯一入口,并提供認證、授權、訪問控制、API注冊和發現等機制
- controller manager:負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等
- scheduler:負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上
- kubelet:負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理
- Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI)
- kube-proxy:負責為Service提供cluster內部的服務發現和負載均衡
除了核心組件,還有一些推薦的Add-ons:
- kube-dns:負責為整個集群提供DNS服務
- Ingress Controller:為服務提供外網入口
- Heapster:提供資源監控
- Dashboard:提供GUI
- Federation:提供跨可用區的集群
- Fluentd-elasticsearch:提供集群日志采集、存儲與查詢
Kubernetes設計理念和功能其實就是一個類似Linux的分層架構
核心層:Kubernetes最核心的功能,對外提供API構建高層的應用,對內提供插件式應用執行環境
應用層:部署(無狀態應用、有狀態應用、批處理任務、集群應用等)和路由(服務發現、DNS解析等)
管理層:系統度量(如基礎設施、容器和網絡的度量),自動化(如自動擴展、動態Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口層:kubectl命令行工具、客戶端SDK以及集群聯邦
生態系統:在接口層之上的龐大容器集群管理調度的生態系統,可以劃分為兩個范疇
- Kubernetes外部:日志、監控、配置管理、CI、CD、Workflow、FaaS、OTS應用、ChatOps等
- Kubernetes內部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集群自身的配置和管理等
二、Kubernetes部署
參考官網
-
關閉節點的selinux和iptables防火墻
-
所有節點部署docker引擎
-
所有節點都一樣server2 server3 server4
修改驅動
[root@server2 docker]# vim daemon.json {"registry-mirrors": ["https://reg.westos.org"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"] } [root@server2 docker]# systemctl daemon-reload [root@server2 docker]# systemctl restart docker.service docker info 查看驅動是否變成了systemd形式的
注意: 如果修改完之后重啟失敗,按照以下操作完成再次重啟即可
禁用swap分區
每個節點都需要做
#swapoff -a 注釋掉/etc/fstab文件中的swap定義 防止開機自啟安裝部署軟件kubeadm
[root@server2 ~]# cd /etc/yum.repos.d/ [root@server2 yum.repos.d]# vim k8s.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0此前如果配置了Centos的源,請先將它禁用,以免下載服務時有依賴性的影響。
每個節點操作一樣
默認從k8s.gcr.io上下載組件鏡像,需要翻墻才可以,所以需要修改鏡像倉庫:
只有管理端需要拉取鏡像
初始化集群
安裝flannel網絡組件
https://github.com/coreos/flannel
鏈接: kube-flannel.yml 提取碼: s452
如果下載失敗,在網盤自行提取
[root@server2 ~]# kubectl get pod --namespace kube-system
加入網絡插件之后,狀態就會變成ready
為了方便,我們直接將需要的鏡像打包,發送給集群其他節點,讓其本地拉取就行
[root@server2 ~]# docker save quay.io/coreos/flannel:v0.12.0-amd64 registry.aliyuncs.com/google_containers/pause:3.2 registry.aliyuncs.com/google_containers/coredns:1.7.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 > node.tar [root@server2 ~]# scp node.tar server3:~/ [root@server2 ~]# scp node.tar server4:~/ [root@server3 ~]# docker load -i node.tar [root@server4 ~]# docker load -i node.tar在server3 server4執行,初始化之后生成的。按照實際添加。
kubeadm join 172.25.1.2:6443 --token 3jc2ts.iby7sspiql1atfj2 \--discovery-token-ca-cert-hash sha256:e5d5e3660a96182995168d4d35199c7cc451601453fe074957de6bf023e1cecc最后在master端查看節點狀態
[root@server2 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION server2 Ready control-plane,master 27m v1.20.2 server3 Ready <none> 26m v1.20.2 server4 Ready <none> 26m v1.20.2
如果查詢狀態,以及pod 等都顯示正常,到這里集群部署就結束了。
總結
以上是生活随笔為你收集整理的Kubernetes集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python三大流程控制
- 下一篇: k8s之pod管理