国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Kubernetes 入門基礎

myshell / 3338人閱讀

摘要:我們要學習,就有首先了解的技術范圍基礎理論知識庫等,要學習,肯定要有入門過程,在這個過程中,學習要從易到難,先從基礎學習。組件組件一個集群是由一組被稱為節點的機器或虛擬機組成,節點有兩種類型。

我們要學習 Kubernetes,就有首先了解 Kubernetes 的技術范圍、基礎理論知識庫等,要學習 Kubernetes,肯定要有入門過程,在這個過程中,學習要從易到難,先從基礎學習。

接下來筆者將為大家講解 Kubernetes 各方面的知識,讓讀者了解 Kubernetes 是什么。

本文為作者的 Kubernetes 系列電子書的一部分,電子書已經開源,歡迎關注,電子書瀏覽地址:

https://k8s.whuanle.cn【適合國內訪問】

https://ek8s.whuanle.cn?【gitbook】

Kubernetes 是什么

在 2008 年,LXC(Linux containers)?發布第一個版本,這是最初的容器版本;2013 年,Docker 推出了第一個版本;而 Google 則在 2014 年推出了?LMCTFY。

為了解決大集群(Cluster)中容器部署、伸縮和管理的各種問題,出現了 Kubernetes、Docker Swarm 等軟件,稱為?容器編排引擎。

容器的產生解決了很多開發、部署痛點,但隨著云原生、微服務的興起,純 Docker 出現了一些管理難題。我們先思考一下,運行一個 Docker 容器,只需要使用?docker run ...?命令即可,這是相當簡單(relatibely simple)的方法。

但是,要實現以下場景,則是困難的:

  • 跨多臺主機的容器相互連接(connecting containers across multiple hosts)
  • 拓展容器(scaling containers)
  • 在不停機的情況下配置應用(deploying applications without downtime)
  • 在多個方面進行服務發現(service discovery among several aspects)

Kubernetes 是 Google 基于十多年的生產環境運維經驗,開發出的一個生產級別的容器編排系統。在 Kunernetes 文檔中,這樣描述 Kubernetes:

[Success]

"an open-source system for automating deployment, scaling, and management of containerized applications".

“一個自動化部署、可拓展和管理容器應用的開源系統”

Google 的基礎設施在虛擬機(Virtual machines)技術普及之前就已經達到了很大的規模,高效地使用集群和管理分布式應用成為 Google 挑戰的核心,而容器技術提供了一種高效打包集群的解決方案。

多年來,Google 一直使用 Borg 來管理集群中的容器,積累了大量的集群管理經驗和運維軟件開發能力,Google 參考 Borg ,開發出了 Kubernetes,即 Borg 是 Kubernetes 的前身。(但是 Google 目前還是主要使用 Borg)。

Kubernetes 從一開始就通過一組基元(primitives)、強大的和可拓展的 API 應對這些挑戰,添加新對象和控制器地能力可以很容易地地址各種各樣的產品需求(production needs)。

編排管理是通過一系列的監控循環控制或操作的;每個控制器都向詢問對象狀態,然后修改它,直至達到條件為止。容器編排是管理容器的最主要的技術。Dockers 也有其官方開發的 swarm 這個編排工具,但是在 2017 年的容器編排大戰中,swarm 敗于 Kubernetes。

Kubernetes 集群的組成

在 Kubernets 中,運行應用程序的環境處于虛擬化當中,因此我們一般不談論硬件。

我們談起 Kubernetes 和應用部署時,往往會涉及到容器、節點、Pods 等概念,它們共同工作來管理容器化(containerized)應用的部署和執行,但是各種各樣的術語,令人眼花繚亂。為了更好地摸清 Kubernetes,下面我們將列舉這些有邊界的對象。

成分 名稱
Cluster 集群
Node 節點
Pod 不翻譯
Container 容器
Containerzed Application 容器化的應用

在 Kubernetes 中,不同的對象其管理的范圍、作用范圍不同,它們的邊界大小也不同。接下來的內容,按將從小到大的粒度介紹這些組成成分。

Pod

在上一章中已經介紹過,Pod 是 Kubernetes 中管理和調度的最小工作單位,Pod 中可以包含多個容器。這些容器會共享 Pod 中的網絡等資源。當部署 Pod 時,會把一組關聯性較強的容器部署到同一個節點上。

而節點則是指一臺服務器、虛擬機等,運行著一個完整的操作系統,提供了 CPU、內存等計算資源,一個節點可以部署多個 Pod。

而一個集群(Cluster)之中,運行著 N 臺服務器,即 N 個節點。這些節點有兩種,一種是 master 節點,一種是 worker 節點。master 節點運行著 Kubernetes 系統組件,而 worker 節點負責運行用戶的程序。所有節點都歸 master 管,我們通過命令、API 的方式管理 Kubernetes 集群時,是通過發送命令或請求到 master 節點上的系統組件,然后控制整個集群。

另外,kubernetes 中有命名空間(namespace)的概念,這跟在 1.2 章中學習到的 Linux-namespace 類似,在一個集群中使用命名空間將不同的 Pod 隔離開來。但是 Kubernetes 中,不同 namespace 的 Pod 是可以相互訪問的,它們不是完全隔離的。

Kubernetes 結構

用圖來表示體系結構,是闡述 Kubernetes 最快的方式,下面是一張稱為?Kubernetes Architecture?graphic 。

上圖是簡單的 kubernetes 結構,左側虛線方框中,是 master 節點,運行著各種各樣的組件,master 節點負責控制整個集群,當然在很大的集群中也可以有多個 master 節點;而右側是三個工作節點,負責運行我們的容器應用。這種結構一般稱為 master-slave 結構,因為某些原因,在 Kubernetes 中后來改稱為 master-minions。工作節點掛了沒關系,master 節點會將故障節點上的業務自動在另一個節點上部署。

工作節點比較簡單,在工作節點中,我們看到有 kubelet 和 kube-proxy 兩個組件,這兩個組件在上一章中接觸過了,kubelet 和 kube-proxy 都是跟 主節點的 kube-apiserver 進行通信的。kube-proxy 全稱是 Kubenetes Service Proxy,負責組件之間的負載均衡網絡流量。

在上圖中, 主節點由多個組件構成,結構比較復雜, 主節點中記錄了整個集群的工作數據,負責控制整個集群的運行。工作節點掛了沒關系,但是 主節點掛了,整個集群就掛了。因此, 有條件的情況下,也應該 設置多個 主節點。

一個 主節點中包含以下訪問:

  • 一個 API 服務(kube-apiserver)
  • 一個調度器(kube-scheduler)
  • 各種各樣的控制器(上圖有兩個控制器)
  • 一個存儲系統(這個組件稱為etcd),存儲集群的狀態、容器的設置、網絡配置等數據。

這張圖片中還有很多東西,這里暫時不作講解,我們在后面的章節再去學習那些 Kubernetes 中的術語和關鍵字。

組件

一個 kubernetes 集群是由一組被稱為節點的機器或虛擬機組成,節點有 master、worker 兩種類型。一個集群中至少有一個 master 節點,在沒有 worker 節點的情況下, Pod 也可以部署到 master 節點上。如果集群中的節點數量非常多,則可考慮擴展 master 節點,使用多個 master 節點控制集群。

在上一小節中,我們看到 主節點中包含了比較多的組件,工作節點也包含了一些組件,這些組件可以分為兩種,分別是 Control Plane Components(控制平面組件)、Node Components(節點組件)。

Control Plane Components?用于對集群做出全局決策,部署在 master 節點上;

Node Components?在 worker 節點中運行,為 Pod 提供 Kubernetes 環境。

Master 節點

Master 是由一組稱為控制平面組件組成的,如果你已經根據第二章中,通過 minikube 或 kubeadm 部署了 kubernetes,那么我們可以打開?/etc/kubernetes/manifests/?目錄,這里存放了 k8s 默認的控制平面組件的 YAML 文件。

.├── etcd.yaml├── kube-apiserver.yaml├── kube-controller-manager.yaml└── kube-scheduler.yaml

對于集群來說, 這四個組件都是是必不可少的。

在結構圖中,還有一個 cloud-controller 組件,主要由云平臺服務商提供,屬于第三方組件,這里不再討論。下面我們來了解 master 中的組件。

master 節點中各個組件(控制平面組件)需要使用到的端口:

協議 方向 端口范圍 作用 使用者
TCP 入站 6443 Kubernetes API 服務器 所有組件
TCP 入站 2379-2380 etcd 服務器客戶端 API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 自身、控制平面組件
TCP 入站 10251 kube-scheduler kube-scheduler 自身
TCP 入站 10252 kube-controller-manager kube-controller-manager 自身

普通節點中各個組件需要使用到的端口:

協議 方向 端口范圍 作用 使用者
TCP 入站 10250 Kubelet API kubelet 自身、控制平面組件
TCP 入站 30000-32767 NodePort 服務? 所有組件

kube-apiserver

kube-apiserver 是 k8s 主要進程之一,apiserver 組件公開了 Kubernetes API (HTTP API),apiserver 是 Kubernetes 控制面的前端,我們可以用 Go、C# 等編程語言寫代碼,遠程調用 Kubernetes,控制集群的運行。apiserver 暴露的 endiont 端口是 6443。

為了控制集群的運行,Kubernetes 官方提供了一個名為 kubectl 的二進制命令行工具,正是 apiserver 提供了接口服務,kubectl 解析用戶輸入的指令后,向 apiserver 發起 HTTP 請求,再將結果反饋給用戶。

[Info] kubectl

kubectl 是 Kubernetes 自帶的一個非常強大的控制集群的工具,通過命令行操作去管理整個集群。

Kubernetes 有很多可視化面板,例如 Dashboard,其背后也是調用 apiserver 的 API,相當于前端調后端。

總之,我們使用的各種管理集群的工具,其后端都是 apiserver,通過 apiserver,我們還可以定制各種各樣的管理集群的工具,例如網格管理工具 istio。騰訊云、阿里云等云平臺都提供了在線的 kubernetes 服務,還有控制臺可視化操作,也是利用了 apiserver。

etcd

etcd 是兼具一致性和高可用性的鍵值數據庫,作為保存 Kubernetes 所有集群數據的后臺數據庫。apiserver 的所有操作結果都會存儲到 etcd 數據庫中,etcd 主要存儲 k8s 的狀態、網絡配置以及其它持久化數據,etcd 是使用 B+ 樹實現的,etcd 是非常重要的組件,需要及時備份數據。

kube-scheduler

scheduler 負責監視新創建的 pod,并把 pod 分配到節點上。當要運行容器時,發送的請求會被調度器轉發到 API;調度器還可以尋找一個合適的節點運行這個容器。

kube-controller-manager

kube-controller-manager 中包含了多個控制器,它們都被編譯到一個二進制文件中,但是啟動后會產生不同的進程。這些控制器有:

  • 節點控制器(Node Controller)

    負責在節點出現故障時進行通知和響應

  • 任務控制器(Job controller)

    監測代表一次性任務的 Job 對象,然后創建 Pods 來運行這些任務直至完成

  • 端點控制器(Endpoints Controller)

    填充端點(Endpoints)對象(即加入 Service 與 Pod)

  • 服務帳戶和令牌控制器(Service Account & Token Controllers)

    為新的命名空間創建默認帳戶和 API 訪問令牌

控制器控制的 Pod、Job、Endpoints、Service 等,都是后面要深入學習的。

一個逗逗的大學生
?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124124.html

相關文章

  • 基礎入門│帶你理解Kubernetes

    摘要:的核心是以容器為中心的管理環境。命名空間提供了名稱范圍。換句話說,確?;蛲惤M始終可用。用于管理有狀態應用程序,它管理一組的部署和擴展,并提供有關這些的排序和唯一性的保證。 條分縷析帶你充分理解Kubernetes的各個細節與部分:它是什么,它如何解決容器編排問題,它包含哪些你必須掌握的關鍵對象,以及如何快速上手部署使用Kubernetes。 showImg(https://segme...

    DevWiki 評論0 收藏0
  • PHPer書單

    摘要:想提升自己,還得多看書多看書多看書下面是我收集到的一些程序員應該看得書單及在線教程,自己也沒有全部看完。共勉吧當然,如果你有好的書想分享給大家的或者覺得書單不合理,可以去通過進行提交。講師溫銘,軟件基金會主席,最佳實踐作者。 想提升自己,還得多看書!多看書!多看書!下面是我收集到的一些PHP程序員應該看得書單及在線教程,自己也沒有全部看完。共勉吧!當然,如果你有好的書想分享給大家的或者...

    jimhs 評論0 收藏0
  • Docker入門

    摘要:的理念為基本概念提供給用戶的客戶端。服務的守護進程。它們簡化了從頭到尾的流程并極大的簡化了部署工作。是官方提供的一款集群管理工具,其主要作用是把若干臺主機抽象為一個整體,并且通過一個入口統一管理這些主機上的各種資源。 1. Docker簡介: docker是一個基于LXC的高級容器引擎。簡單地說,docker是一個輕量級的虛擬解決方案,或者說它是一個超輕量級的虛擬機(容器)。 Dock...

    morgan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<