github位址: https://github.com/kubernetes/kubernetes/
官方網站: kubernets.io
pod使用接口技術
CNI: container network interface
CSI: container storage interface
CRI: container runtime interface
CVI: container volume interface
pod:k8s中運作容器的最小單元
k8s如果向替換CRI的話(替換容器技術),隻需要講POD使用相關的容器技術(docker,podman)封裝即可
service: 實作了從主控端外層通路k8s内部不同的容器的通路方式,還實作了pod的動态發現;是以可以說Service是k8s内部的負載均衡器
實作方式: 早期是iptable,在1.11之後支援ipvs(輪訓算法)
replicationcontroller/deployment: 已廢棄,POD控制器; 通過環境檢測,保證pod的正常運作
master: 主節點
kube-apiserver: https://k8smeetup.github.io/docs/admin/kube-apiserver/
為api對象驗證并配置資料,包括pods,services,APIserver提供Restful操作和到叢集共享狀态的前端,所有其它元件通過apiserver進行互動
kube-scheduler:https://k8smeetup.github.io/docs/admin/kube-scheduler/
具有豐富的資源政策,能夠感覺拓撲變化,支援特定負載的功能元件,它對叢集的可用性,性能表現以及容量都影響巨大,scheduler需要考慮獨立的和集體的資源需求,服務品質需求,硬體、軟體,政策限制,親和與反親和規範,資料位置嗎内部負載接口,截止時間等等,如有特定的負載需求可以通過apiserver暴露出來
kube-controller-manager: https://k8smeetup.github.io/docs/admin/kube-controller-manager/
作為叢集内部的控制中心,負責叢集内部的Node,Pod副本,服務端點,命名空間,服務賬号,資源配額的管理,當某個Node意外當機時,controller-manager會及時發現并執行自動修複,確定叢集始終處于預期的工作狀态
Node節點
kube-proxy: https://k8smeetup.github.io/docs/admin/kube-proxy/
維護node節點上的網絡規則,實作使用者通路請求的轉發,其實就是轉發給service,需要管理者指定service和NodePort的對應關系
Kubernetes 網絡代理運作在 node 上。它反映了 node 上 Kubernetes API 中定義的服務,并可以通過一組後端進行簡單的 TCP、UDP 流轉發或循環模式(round robin))的 TCP、UDP 轉發。目前,服務的叢集 IP 和端口是通過 Docker-links 相容的環境變量發現的,這些環境變量指定了服務代碼打開的端口。有一個可選的 addon 為這些叢集 IP 提供叢集 DNS。使用者必須使用 apiserver API 建立一個服務來配置代理。
kubelet: https://k8smeetup.github.io/docs/admin/kubelet/
kubelet 是運作在每個節點上的主要的“節點代理”,它按照 PodSpec 中的描述工作。 PodSpec 是用來描述一個 pod 的 YAML 或者 JSON 對象。kubelet 通過各種機制(主要通過 apiserver )擷取一組 PodSpec 并保證在這些 PodSpec 中描述的容器健康運作。kubelet 不管理不是由 Kubernetes 建立的容器。
除了來自 apiserver 的 PodSpec ,還有 3 種方式可以将容器清單提供給 kubelet 。
檔案:在指令行指定的一個路徑,在這個路徑下的檔案将被周期性的監視更新,預設監視周期是 20 秒并可以通過參數配置。
HTTP端點:在指令行指定的一個HTTP端點,該端點每 20 秒被檢查一次并且可以通過參數配置檢查周期。
HTTP服務:kubelet 還可以監聽 HTTP 服務并響應一個簡單的 API 來建立一個新的清單
ETCD: 存儲所有叢集資料
元件官網參考: https://kubernetes.io/zh/docs/concepts/overview/components/
角色
主機名
ip位址
軟體
master-1
centos7-node1
192.168.56.11
docker,kube-comtroller-manager,kube-apiserver,kube-schduler
master-2
centos7-node2
192.168.56.12
master-3
centos7-node3
192.168.56.13
ha-1
centos7-node4
192.168.56.14
haproxy,keepalived
ha-2
centos7-node5
192.168.56.15
harbor-1
centos7-node6
192.168.56.16
docker,docker-compose,harbor
node-1
centos7-node7
192.168.56.17
kubelet,kube-proxy
node-2
centos7-node8
192.168.56.18
伺服器使用centos7.6以及以上,配置阿裡雲倉庫
關閉防火牆&selinux&swap
自動更新時間
設定主機名&hosts解析
系統參數優化(ip位址轉發)
開啟ipvs
重新開機伺服器
基礎docker安裝
harbor
建立baseimages鏡像倉庫
haproxy&keepalived
master節點安裝
開啟 master指令補全
通過配置檔案初始化master
安裝網絡插件flannel
建立kubernetes的流程: https://k8smeetup.github.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow
使用2.0.0-rc6版本
通路任意主機的https://192.168.56.12:30002 即可
擷取通路token即可登陸
更新時間: 業務低峰期
更新方式
ansible
kubeadm
更新步驟
在所有master節點進行更新,更新管理斷服務kube-controller-manager,kube-apiserver,kube-scheduler,kube-proxy
檢查可更新的軟體版本
所有master節點都安裝1.17.4的kubeadm
更新master節點的kubectl,kubelet
更新node節點
驗證更新結果
參考用例: https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
Nginx用例
haproxy和keepalived配置
需要新增一個VIP(LB)
将LB映射到haproxy對應的nodeport上
tomcat配置
測試通路 http://192.168.56.11:8080/app/
在harbor建立linux公開倉庫
準備dockerfile
業務pod建立
nginx代理請求到tomcat