### 1、Kubernetes優勢
● 自動裝箱,水平擴展,自我修復
● 服務發現和負載均衡
● 自動發布(默認滾動發布模式)和回滾
● 集中化配置管理和密鑰管理
● 存儲編排
● 任務批處理運行
### 2、Kubernetes快速入門概念
**四組基本概念
**
? Pod/Pod控制器
? Name/Namespace
? Label/Label選擇器
? Service/Ingress
? **Pod
**
```
● Pod是K8S里能夠被運行的最小的邏輯單元(原子單元),不是容器
● 1個Pod里面可以運行多個容器,容器與容器之間它們共享UTS+NET+IPC名稱空間 ,
只隔離PID+MOUNT+USER 。容器有6個隔離空間(UTS+NET+IPC+PID+MOUNT+USER)
● 可以把Pod理解成豌豆莢,而同一Pod內的每個容器理解成是一顆顆豌豆
● 一個Pod里運行多個容器,又叫:邊車( SideCar)模式
```
?** Pod控制器
**
```
● Pod控制器是Pod啟動的一種模板,用來保證在K8S里啟動的Pod 應始終按照人們的預期運行(副本數、生命周期、健康狀態檢查... )
Pod可以在k8s里面單獨啟動,不需要任何Pod控制器管控,啟動Pod
● K8S內提供了眾多的Pod控制器,常用的有以下幾種:
● Deployment 部署
● DaemonSet 要求我們每個運算單位都啟動一份
● ReplicaSet ReplicaSet 不直接對外提供服務,Deployment 管理ReplicaSet,ReplicaSet管理Pod,進而提供服務
● StatefulSet 管理有狀態應用的 Pod控制器
● Job 管理任務
● Cronjob 管理定時任務
```
? **Name**
```
● 由于K8S內部,使用“資源”來定義每一種邏輯概念(功能),故每種“資源”, 都應該有自己的"名稱”,每一種功能我們都叫做資源,每一種功能的實現都叫做資源的實例化
● 資源一共有5個維度的信息,每一種都有,“資源”有api版本( apiVersion )、類別( kind )、元數據( metadata )、定義清單( spec)、狀態( status )(集群自己生成的,不需要人工定義)等配置信息
● "名稱”通常定義在‘ '資源”的“元數據”信息里,
```
?** Namespace
**
```
● 隨著項目增多、人員增加、集群規模的擴大,需要一種能夠隔離K8S內部各種“資源”的方法,這就是名稱空間,通過名稱空間各種資源進行分組
● 名稱空間可以理解為K8S內部的虛擬集群組
● 不同名稱空間內的“資源”, 名稱可以相同,相同名稱空間內的同種"資源”,"名稱” 不能相同,重名不重名
● 合理的使用K8S的名稱空間,使得集群管理員能夠更好的對交付到K8S里的服務進行分類管理和瀏覽
● K8S里默認存在的名稱空間有: default、kube-system、 kube-public
● 查詢K8S里特定“資源”要帶上相應的名稱空間
```
?** Label
**
```
● 標簽是k8s特色的管理方式,便于分類管理資源對象。
● 一個標簽可以對應多個資源,一個資源也可以有多個標簽,它們是多對多的關系。
● 一個資源擁有多個標簽,可以實現不同維度的管理。
● 標簽的組成: key=value 鍵值對,有效的標簽值必須不超過63個字符,并且必須為空或以字母數字字符([a-z0-9A-Z]),帶破折號(-)、下劃線(Uu)、點(.),和字母數字
● 與標簽類似的,還有一-種“注解”( annotations ) 標 , 注解沒有要求
```
? **Label選擇器
**
```
● 給資源打上標簽后,可以使用標簽選擇器過濾指定的標簽
● 標簽選擇器目前有兩個:基于等值關系(等于、不等于)和基于集合關系(屬于、不屬于、存在)
● 許多資源支持內嵌標簽選擇器字段
● matchl abels
● matchExpressions
```
? **Service 集群網絡
**
```
● 在K8S的世界里,雖然每個Pod都會被分配一個單獨的P地址 ,但這個IP地址會隨著Pod的銷毀而消失。 Pod有生命周期的,不定時的啟動,擴容,銷毀,遷移。流量如何調度,Service 起到,無論你這組 pod怎么掉度、銷毀等等,對外提供服務的接口統一,Service會有一個相對獨立的接口,
● Service (服務)就是用來解決這個問題的核心概念
● 一個Service可以看作一 -組提供相同服務的Pod的對外訪問接口
● Service作用于哪些Pod是通過標簽選擇器來定義 的
```
? **Ingress
**
```
● Ingress是K8S集群里1工作在OSI網絡參考模型下,第7層的應用,對外暴露的接口
● Service只能進行4流量調度, 表現形式是ip+ port
● Ingress則可以調度不同業務域、不同URL訪問路徑的業務流量
```
### 3、核心組件
● 配置存儲中心→etcd服務 狀態、請求、集群資源情況等,也可以理解位Mysql
● 主控( master )節點
● **kube-apiserver服務 ** 集群的大腦,所有組件通過kube-apiserver 通信樞紐功能
```
● aplserver:
● 提供了集群管理的REST API接口( 包括鑒權、數據校驗及集群狀態變更)
● 負責其他模塊之間的數據交互,承擔通信樞紐功能
● 是資源配額控制的入口
● 提供完備的集群安全機制
```
● **kube-controller-manager服務
**
```
● controller-manager : 管理控制器的控制器 需要高可用
● 由一系列控制器組成,通過piserver監控整個集群的狀態,并確保集群處于預期的工作狀態
● Node Controller 節點控制器
● Deployment Controller Pod控制器
● Service Controller server控制器
● Volume Controller 卷控制器
● Endpoint Controller 接入點控制器
● Garbage Controller 垃圾回收控制器
● Namespace Controller 名稱空間資源配額
● Job Controller 任務資源配額
● Resource quta Controller 資源配額控制器
```
● ** kube-scheduler服務
**
```
● scheduler:調度器
● 主要功能是接收調度pod到適合的運算節點上 有一個請求通過apiserver,apiserver告訴controller-manager 需要啟動那些Pod, controller-manager 找到scheduler,他會按照要求模板到那個節點創建一系列Pod
● 預算策略( predict ) 最適合運行Pod點,拉取
● 優選策略( priorities )
```
#### 運算( node )節點
● **kube-kubelet服務 **
```
● kubelet
● 簡單地說, kubelet的主要功能就是定時從某個地方獲取節點上pod的期望狀態(運行什么容器、運行的副本數量網絡或者存儲如何配置等等) , 并調用對應的容器平臺接口達到這個狀態
● 定時匯報當前節點的狀態給apiserver,以供調度的時候使用
● 鏡像和容器的清理工作,保證節點上鏡像不會占滿磁盤空間,退出的容器不會占用太多資源
```
● **Kube-proxy服務
**
```
● kube- proxy
● 是K8S在每個節點上運行網絡代理, service資源的載體
● 建立了pod網絡和集群網絡的關系( clusterip >podip ) 把clusterip 跟podip關聯起來
● 常用三種流量調度模式
● Userspace (廢棄) 早期1.2 版本,Userspace調度節點網絡、Pod網絡、集群網絡要用到大量的內核態跟用戶態之間的轉換,消耗資源大
● Iptables (瀕臨廢棄) 99%目前主流方法,nat表,nat映射,太多沒辦法維護
● Ipvs(推薦) lvs開源,加入Linux 內核,
● 負責建立和刪除包括更新調度規則、通知apiserver自 己的更新,或者從apiserver哪里獲取其他kube-proxy的調度規則變化來更新自己的 一個集群中有若干節點,都起Kube-proxy,如何同步,通過apiserver找etcd
```
#### ● CLI客戶端 命令行工具
```
● kubectl
● 核心附件
● CNI網絡插件> flannel/calico
● 服務發現用插件> coredns
● 服務暴露用插件> traefik
● GUI管理插件> Dashboard
```
#### 4、核心組件圖,三條網絡,節點網洛(宿主機網洛)

5、部署架構圖

- 空白目錄
- k8s
- k8s介紹和架構圖
- 硬件環境和準備工作
- bind9-DNS服務部署
- 私有倉庫harbor部署
- k8s-etcd部署
- api-server部署
- 配置apiserver L4代理
- controller-manager部署
- kube-scheduler部署
- node節點kubelet 部署
- node節點kube-proxy部署
- cfss-certinfo使用
- k8s網絡-Flannel部署
- k8s網絡優化
- CoreDNS部署
- k8s服務暴露之ingress
- 常用命令記錄
- k8s-部署dashboard服務
- K8S平滑升級
- k8s服務交付
- k8s交付dubbo服務
- 服務架構圖
- zookeeper服務部署
- Jenkins服務+共享存儲nfs部署
- 安裝配置maven和java運行時環境的底包鏡像
- 使用blue ocean流水線構建鏡像
- K8S生態--交付prometheus監控
- 介紹
- 部署4個exporter
- 部署prometheus server
- 部署grafana
- alert告警部署
- 日志收集ELK
- 制作Tomcat鏡像
- 部署ElasticSearch
- 部署kafka和kafka-manager
- filebeat鏡像制作
- 部署logstash
- 部署Kibana
- Apollo交付到Kubernetes集群
- Apollo簡介
- 交付apollo-configservice
- 交付apollo-adminservice
- 交付apollo-portal
- k8s-CICD
- 集群整體架構
- 集群安裝
- harbor倉庫和nfs部署
- nginx-ingress-controller服務部署
- gitlab服務部署
- gitlab服務優化
- gitlab-runner部署
- dind服務部署
- CICD自動化服務devops演示
- k8s上服務日志收集