1. 基本概念
1.1 什么是 Kubernetes 集群
- Kubernetes用於協調高度可用的計算機集群,這些計算機群集被連接作為單個單元工作
- Kubernetes在一個集群上以更有效的方式自動分發和調度容器應用程序
1.2 Kubernetes集群資源組成:
- Master是集群的調度節點
- Nodes是應用程序實際運行的工作節點
- Master 負責管理集群
- Node是Kubernetes集群中的工作機器,可以是物理機或虛擬機
-
每個工作節點都有一個Kubelet,它是管理 節點 並與 Kubernetes Master 節點進行通信的代理。節點上還應具有處理容器操作的工作,例如 Docker。一個 Kubernetes 工作集群至少有三個節點
-
節點 使用 Master 公開的 Kubernetes API 與 Master 通信
1.3 無狀態和有狀態的區別
1.3.1 無狀態服務
- 是指該服務運行的實例不會在本地存儲需要持久化的數據,並且多個實例對於同一個請求響應的結果是完全一致的。
- 多個實例可以共享相同的持久化數據。例如:nginx實例,tomcat實例等
- 相關的k8s資源有:ReplicaSet, ReplicationController、Deployment等,由於是無狀態服務,所以這些控制器創建的pod序號都是隨機值。並且在縮容的時候並不會明確縮容某一個pod,而是隨機的,因為所有實例得到的返回值都是一樣,所以縮容任何一個pod都可以。
1.3.2 有狀態服務
- 有狀態服務可以說是需要數據存儲功能的服務、或者指多線程類型的服務,隊列等。(mysql數據庫、kafka、zookeeper等)
- 每個實例都需要有自己獨立的持久化存儲,並且在k8s中是通過申明模板來進行定義。持久卷申明模板在創建pod之前創建,綁定到pod中,模板可以定義多個。
2. Kubernetes結構划分
2.1 Kubernetes總體結構划分
- 只有中間的是k8s的部分
- 左邊是管理master的
- 右邊的是鏡像倉庫

2.2 Master結構划分
- API Server
負責與外部通信,有:接口,GUI,命令行
- Scheduler
調度器,容器調度
- Controller
控制器,負責具體工作: 還有容器監控等等
- etcd
第三方的,保存應用程序配置信息的守護進程,K/V存儲

2.3 Node結構划分
- kubelet
管理node,而且是負責與master API Server通信
- pod
k8s運行的核心基本單元,也是被編排對象
- k8s上不會直接運行容器,而是運行pod
- 說白了pod是容器的外殼
- 但是一個pod可能會包含多個容器,在這種情況下,多個容器被當作一個原子單位管理
- pod運行在一個私有的隔離的網絡上,默認情況下在同一集群的其他pod和service中可見,但是外部不可見,需要借助service暴露給外部

- node還應該具有處理容器操作的工具
例如
docker或者rkt,一般是docker


3. Kubernetes的組件組成
3.1 Master Components
- kube-apiserver
- etcd
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
3.2 Node Components
- kubelet
與API server進行交互的
- kube-proxy
- Container Runtime
docker等
3.3 Addons拓展
- DNS
服務注冊和服務發現
- CNI
必須要一個,容器網絡接口實現,flannel,calico。。。
- Web UI(Dashboard)
GUI界面
- Container Resource Monitoring
- Cluster-level Logging
4. Kubernetes的一些對象(資源)
4.1 Kubernetes基礎對象
- pod
- service
可以認為是pod的反向代理,負責接收客戶端請求,把請求轉給pod
- 因為每個pod都有自己的內部ip,但是針對一個deployment的pod是有可能變的【pod掛掉或者復制】,所以需要一個service來做一個類似中間者的一個抽象的存在
- 通過
type在ServiceSpec中指定可以以不同的方式公開服務ClusterIP(默認): 在集群的內部ip上公開服務。這種類型使得只能從集群內訪問服務NodePort:在每個node上的相同端口上公開服務,可以從集群外部訪問服務。ClusterIP的超集, 最常用LoadBalancer: 在當前雲中創建一個外部負載平衡器(如果支持),並為該服務分配一個固定的外部IP。NodePort的超集。ExternalName-externalName: 通過返回具有該名稱的CNAME記錄,使用任意名稱(在規范中指定)公開服務。不使用代理。此類型需要v1.7或更高版本kube-dns
- pod controller(統稱)
Deployment最常見
- Namespace
- Volume
4.2 高級對象
建立在基礎對象之上,提供額外功能
- pod controller(抽象概念):Deployment(具體實現)【負責操作pod】

5. 部署相關
5.1 部署高可用要點

5.2 部署工具

5.3 安裝和部署K8S的兩種方式
- 二進制部署
讓基礎程序運行為守護進程
- 讓基礎程序運行為容器
自動化部署工具kubeadm
