日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes入门——Kubernetes工作原理及使用

發(fā)布時間:2024/10/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes入门——Kubernetes工作原理及使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者簡介:

星龍

百度基礎架構部研發(fā)工程師

負責混部調(diào)度系統(tǒng)研發(fā)

本文基于百度云原生團隊『云原生基礎知識概述及實踐』系列視頻課程——『Kubernetes入門—Kubernetes工作原理』梳理。

視頻課程可點擊下面鏈接進行學習:https://cloud.baidu.com/video-center/video.html?id=607

導讀

在上一節(jié)課我們學習了Docker的相關基礎知識。(Kubernetes入門——深入淺出講Docker

)Docker解決了應用之間的隔離問題,但是在架構上,Docker仍然是一個單機的引擎。在真實的生產(chǎn)環(huán)境,我們可能擁有著海量的機器。那么如何管理、調(diào)度、編排這些分布在不同機器上的容器,就成為了新的問題。在這個時候,Kubernetes就應運而生了。

本節(jié)課將帶領大家初步探索容器領域的編排引擎:Kubernetes。

課程主要分為以下三大部分:

第一部分:Kubernetes架構剖析

對Kubernetes核心組件分析。

第二部分:快速搭建Kubernetes集群

使用Kubeadm搭建Kubernetes環(huán)境

第三部分:Demo

演示如何操作一個Pod

在單機上,我們通常會把某個應用程序打包并部署在Docker容器當中。但在真實的環(huán)境中,問題往往比這復雜很多。我們需要解決服務的高可用問題、服務之間的依賴問題。

所以說Kubernetes不僅考慮的是容器級別的部署和編排,更多面向的是更高層面(比如應用層)的編排和部署引擎。

Kubernetes的前身其實是Google的Ball, 在2013年開源之后,發(fā)展至今。目前已經(jīng)為開源事件部署引擎的事實標準了。

01 Kubernetes核心組件分析

核心概念Pod

  • Pod由一組容器組成,這些容器共享網(wǎng)絡,存儲以及相關的聲明。
  • Pod是Kubernetes 中最小的可部署的計算單元。
  • 這樣的一組容器被“打包”到一起組成了一個Pod 并接受Kubernetes 的調(diào)度,編排等控制邏輯。

為了讓大家更好的理解“一組容器“的概念,接下來為大家詳細剖析Pod的內(nèi)部架構。

Pod的內(nèi)部架構

圖示清晰的闡述了Pod 的內(nèi)部是什么樣子的。藍色部分代表的是整個Pod。其中右上角的net namespace 是Pod 級別的namespace,它代表了Pod中的所有容器。

圖中有4個Container(即:PauseContainer/Container A/Container B/Container C/),他們在創(chuàng)建的時候都被加入到了namespace 當中。

那么,Pod級別的Container 是從哪里來的呢?我們從圖中可以看到,真正工作的Container我們把它標注為A,B,C。Pause Container 的作用相當于一個占位符。當我們創(chuàng)建Pod的時候,會首先創(chuàng)建一個Pause Container。該容器創(chuàng)建出來的namespace,就相當于整個Pod的namespace。然后后面的容器再創(chuàng)建出來(比如說Container A/B/C)這些容器在創(chuàng)建出來的時候,就都會選擇加入到PauseContainer創(chuàng)建出來的net namespace當中。

當然,也不是所有的namespace都是不隔離的。Container左側是一個image,每一個container都有一個鏡像,每一個鏡像又相當于一個容器的Root ffs。既然每個容器的Root ffs是不相同的,那么顯而易見,mnt namespace就是隔離的。

這樣我們就可以清楚的看到,什么叫做有些namespce在Pod當中是互相隔離的,而有些是在Pod級別當中共享的。

Pod在Kubernetes中的展現(xiàn)形式

通常,我們習慣用Yaml來描述Kubernetes里的資源。Yaml中的內(nèi)容其實就是我們對資源參數(shù)的描述。

我們先看Pod在Yaml中的前四行。這四行是資源在Yaml中的通用字段。ApiVersion/kind用于表示Kubernetes的資源類型是什么。通過metadata來聲明資源的源數(shù)據(jù)。Spec字段和資源類型是強相關的了。不同的資源會有不同的spec定義。那在Pod資源當中,最核心的是關于容器的定義了。

下面幾行,關于容器的定義,是一個數(shù)組類型的,這也符合我們對Pod的定義:即它是由一組容器形成的。這些字段包含:聲明容器鏡像,啟動容器的命令,容器鏡像的拉取方式,以及容器的名稱。

核心概念Kubelet

Kubelet 是Kubernetes 集群的“節(jié)點代理”。也可以說是Kubernetes 部署在每個節(jié)點的agent。

Kubelet 啟動后會向Kubernetes 集群注冊自己,并上報節(jié)點的相關信息。此時在Kubernetes 集群中就增加了一臺新的可用的Node 節(jié)點(可能是一個物理機,也可能是一個虛擬機,甚至是一個容器)。

Kubelet 發(fā)現(xiàn)有屬于自己節(jié)點的Pod 符合創(chuàng)建條件后,會按照Pod聲明的配置去啟動容器。

Kubernetes控制面的相關組件

下面把這張圖分為3個部分介紹。

1.下半部分:也就是之前介紹過的Kubelet/Pod。

2.左上角:Kubectl。也就是Kubernetes 的命令行工具。可以通過Kubectl來提交資源的Yaml 給Kubernetes 集群。也可以進行一系列的運維操作。

3.右面:Master 節(jié)點。也就是Kubernetes 控制面的相關組件了。其中,API Sever是Kubernetes 中所有源數(shù)據(jù)的集成入口。也是整個Kubernetes 集群的中樞組件。其他組件(包括Controller, Scheduler等)在獲取數(shù)據(jù)都需要和API Sever 打交道。API Sever 也會接受這些組件的協(xié)入請求,并最終將數(shù)據(jù)寫入ETCD 當中。同時,API Sever 也會緩存所有的源數(shù)據(jù)。當其他組件發(fā)起“讀”請求時,就會將數(shù)據(jù)直接從內(nèi)存中發(fā)給對方。盡量避免ETCD 成為系統(tǒng)的瓶頸。除了源數(shù)據(jù)存儲功能,API Server 還提供了一個Watch 機制。能夠主動推送某種資源的變化。而Scheduler會向API Sever 注冊并且監(jiān)聽Pod 的資源變更事件。Scheduler 整體的調(diào)度邏輯可以簡化并概括為兩個:過濾、打分。

每次對Pod進行調(diào)度的時候,首先將不符合條件的Node(如:機器上已經(jīng)沒有資源了,不符合某些標簽,選擇器的要求等)過濾掉。過濾完成后我們得到一個符合要求的Node列表,Scheduler 會通過打分算法,來計算每一個Node 的分數(shù)。最終選擇一個得分最高的節(jié)點做為Pod 需要綁定的節(jié)點。最終Scheduler 會將結果回寫到API Sever 當中。

編排組件:Controller。Controller 通過幾種固定的workload。通過控制器的方式,來完成運行時服務器的編排工作。

02 快速搭建Kubernetes集群

搭建工具:Kubeadm簡介

Kubeadm 是Kubernetes 官方提供的用于快速安裝Kubernetes 集群的工具。

下圖是Kubeadm 的配置文件

在配置文件當中,我們指定了dns的類型,ETCD存儲目錄以及要創(chuàng)建的Kubernetes的版本以及相關的參數(shù)。

搭建環(huán)境

初始Master節(jié)點

Kubeadm init—config kubeadm.conf

安裝flannel cni

https://raw.githusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

03 Demo --演示如何操作一個Pod

創(chuàng)建一個Namespace

Kubectl create namespace demo

創(chuàng)建Pod

Kubectl apply –f pod.yaml

查看Pod 運行狀態(tài)

Kubectl describe pods demo-pod–n demo

查看Pod 輸出日志

Kubectl logs demo-pod –n demo

查看Pods 列表

Kubectl get pods-n demo

刪除Pod

Kubectl delete-f pod.yaml

(創(chuàng)建Deomo的詳細過程歡迎大家觀看課程的視頻回放。)

MoreCommand

Basic Commands: create,expose, run, setBasic Commands: explain, get,edit,deleteDeploy Commands: rollout,scale,autoscale

04 總結

本節(jié)課作為K8s入門系列課程第二節(jié)。重點介紹了Kubernetes 出現(xiàn)的背景和作用、Kubernetes 的特點和核心架構、Kubernetes 每一個模塊承擔的作用以及實現(xiàn)的功能。并演示了如何搭建一個單節(jié)點的Kubernetes 環(huán)境以及如何使用來操作相關的資源。希望對大家有所幫助。

更多精彩課程歡迎關注百度開發(fā)者中心公眾號。

總結

以上是生活随笔為你收集整理的Kubernetes入门——Kubernetes工作原理及使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。