Kubernetes是一個用于容器編排的開源工具,是應用程序級別的虛擬化技術的必然結果。容器化技術運行單個內核上有多個獨立的用戶空間實例,這些實例就是容器。容器提供了將應用程序的代碼、運行時、系統工具、系統庫和配置打包到一個實例中的標準方法,并且容器是共享一個內核的。由于容器技術的興起,導致大量的容器應用出現,所以出現了一些用來支持應用程序容器化部署和組織的容器編排技術,其中Kubernetes現在已經成為了容器編排領域事實上的一個標準。
**歡迎關注技術手冊每日必更新,帶你一步步成長為架構師......**
###

###
Kubernetes是一個由Google團隊發起的開源項目,旨在管理跨多個主機的容器,用于自動部署、擴展和管理容器化的應用程序。Kubernetes的主要實現語言為Go語言。該項目的理論基礎源于Google內部的Borg項目,這使得Kubernetes在理論上比其他開源項目更加先進。Borg系統一直被認為是Google公司內部最強大的“私密武器”,因此Kubernetes的理論基礎也非常強大。
###
# 架構
Kubernetes 項目依托著 Borg 項目的理論優勢,確定了一個如下圖所示的全局架構圖:

###
Kubernetes由Master節點和Node節點兩種角色組成。Master節點是控制節點,負責管理整個Kubernetes集群的狀態和配置信息。Node節點是工作節點,負責運行容器應用。可以將Master節點看作老板,負責管理和控制整個集群的運行狀態;將Node節點看作員工,負責實際運行容器應用。這種角色分工使得Kubernetes可以高效地管理和運行容器化應用程序。
###
Kubernetes的Master節點由三個獨立的組件組成,它們分別是kube-apiserver、kube-scheduler和kube-controller-manager。
> kube-apiserver是整個集群通信的核心組件,負責接收來自用戶和管理員的請求,并將請求轉發給其他組件進行處理。
>
> kube-scheduler負責容器的調度,將容器應用程序調度到合適的節點上運行**。
>
> kube-controller-manager則負責維護整個集群的狀態,包括容器的運行狀態、節點的狀態等**。
整個集群的數據都是通過kube-apiserver保存到etcd數據庫中的,其他所有組件之間的通信也都是通過kube-apiserver和etcd數據庫進行通信,而不會直接與etcd進行通信。這種架構使得Kubernetes具有高可用性和可擴展性,能夠滿足各種規模的容器化應用程序的需求。
###
工作節點(Node節點)上最核心的組件是kubelet,它負責與底層的容器運行時進行通信,比如Docker。Kubernetes將這個通信過程抽象成了一個遠程調用接口,稱為CRI(Container Runtime Interface)。這個接口定義了容器運行時的所有標準操作,例如創建和刪除容器。目前,kubelet內置了Docker關于CRI的實現,因此如果底層使用的是Docker容器,則不需要單獨安裝CRI實現的組件。但是,其他容器運行時需要提供這樣的接口實現組件。因此,Kubernetes不關心所部署的容器運行時是什么,只要它能夠實現CRI接口,就可以被Kubernetes管理。這種設計使得Kubernetes具有很強的擴展性和靈活性,可以支持多種不同的容器運行時。
###
kubelet 的另外一個重要功能就是調用網絡插件(`CNI`)和存儲插件(`CSI`)為容器配置網絡和存儲功能,同樣的 kubelet 也是把這兩個重要功能通過接口暴露給外部了,所以如果我們想要實現自己的網絡插件,只需要使用 CNI 就可以很方便的對接到 Kubernetes 集群當中去。
###
可能下面的架構圖看上去更清晰一些:

- 基礎
- 開篇簡介
- 組件介紹
- 環境準備
- Docker安裝
- Kubeadm kubelet kubectl安裝
- 初始化集群
- k8s集群導入Rancher2
- 集群清理
- Pod原理
- Pod的狀態
- Pod重啟策略
- Pod初始化容器
- init-pod.yaml
- Pod Hook鉤子
- poststart-pod.yaml
- prestop-pod.yaml
- Pod健康檢查
- 存活探針exec和http
- liveness-exec.yaml
- liveness-http.yaml
- 啟動探針
- startup-http.yaml
- 就緒探針
- readiness-http.yaml
- Pod資源配置
- 靜態Pod
- static-web.yaml
- Downward API
- 環境變量
- env-pod.yaml
- Volume掛載
- volume-pod.yaml
- 控制器
- ReplicaSet
- nginx-rs.yaml
- Deployment
- nginx-deploy.yaml
- 水平伸縮
- 滾動更新
- 有無狀態服務
- 初識Service
- 初識HeadlessService
- HeadlessService.yaml
- 初識PV
- pv-demo.yaml
- StatefulSet
- pv.yaml
- headless-svc.yaml
- nginx-sts.yaml
- DaemonSet
- nignx-ds.yaml
- Job
- job-demo.yaml
- CronJob
- cronjob-demo.yaml
- HPA介紹
- MetricsServer安裝
- HPA實戰(基于cpu)
- hpa-demo-cpu.yaml
- HPA實現(基于內存)
- hpa-demo-mem.yaml
- 配置管理
- ConfigMap的創建
- configmap-demo.yaml
- Configmap的使用
- 環境變量中使用
- configmap_create_1.yaml
- 命令行當中使用
- configmap_create_2.yaml
- 數據卷掛載使用
- configmap_create_3.yaml
- configmap_create_4.yaml
- 安全
- RBAC
- 網絡
- 網絡插件
- 網絡策略
- Service服務
- 三種IP
- 定義Service
- kube-proxy
- Iptables
- Ipvs
- Service
- NodePort類型
- deployment-service-demo2.yaml
- ExternalName
- endpoints-service.yaml
- ClusterIp
- deployment-service-demo1.yaml
- Service服務是如何被訪問到的以及iptable和ipvs轉發原理
- ClusterIP和NodePort再講解
- 獲取客戶端IP
- DNS
- k8s當中service服務發現之DNS
- k8s當中通過dns訪問普通service服務總結
- k8s當中通過dns域名的形式直接訪問到具體的pod
- k8s當中pod的dns策略有哪些?
- DNS優化
- 超時問題
- 性能測試
- 優化方案(一)
- 優化方案(二)
- Ingress
- Traefik
- 安裝traefik
- k8s當中基于traefik創建一個用于Dashboard訪問的資源清單
- k8s當中利用traefik部署一個http請求的簡單的小項目
- k8s當中利用traefik部署一個https請求的簡單的小項目
- k8s當中traefik里面實現使用 Let’s Encrypt 來進行自動化 HTTPS
- k8s當中traefik當中的中間件講解
- k8s當中traefik當中的灰度發布
- k8s當中traefik當中的流量復制
- 調度器
- k8s當中的調度器之kube-scheduler
- k8s當中調度器之調度器調優以及pod優先級調優
- k8s當中pod調度之nodeselector的用法將pod調度到指定node節點
- k8s當中的pod調度之節點親和性
- k8s當中pod調度之pod親和性
- k8s當中pod調度之pod反親和性
- k8s當中pod調度之污點與容忍
- 存儲
- k8s當中pv和pvc的創建以及注意點之local本地存儲
- k8s當中的local pv的創建和注意點
- k8s當中nfs存儲pv pvc綁定的具體使用說明
- DevOps工具部署
- JenKins GitLab Harbor系列
- JenKins安裝部署
- Jenkins架構
- GitLab安裝部署和排坑
- Git實戰以及Gitlab使用
- Harbor的部署和排坑
- Harbor推送和拉取鏡像
- k8s當中自定義域名集群內外訪問的話該如何配置
- (Golang-CICD)k8s當中JenKins+GitLab+Harbor實現CICD(1)
- (Golang-CICD)k8s當中JenKins+GitLab+Harbor實現CICD(2)
- (Golang-CICD)k8s當中JenKins+GitLab+Harbor實現CICD(3)
- (Golang-CICD)k8s當中JenKins+GitLab+Harbor實現CICD(4)
- (Java-CICD)k8s當中Jenkins+GitLab+Harbor實現CICD
- (Php-CICD)k8s當中Jenkins+GitLab+Harbor實現CICD
- 集群備份
- (業務)velero備份集群到阿里云oss(實戰一)
- (業務)集群命名空間恢復實戰(實戰二)
- (業務)velero備份集群常用命令總結(實戰三)
- 集群磁盤擴容
- vm虛機磁盤擴容準備工作
- 執行庫容操作