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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

k8s 基本使用

發布時間:2024/7/23 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s 基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Kubernetes 編排系統:https://www.cnblogs.com/gaoyuechen/p/8685771.html

k8s 集群中的 yaml 文件詳解:https://blog.csdn.net/qq_28361541/article/details/106089574

什么是 k8s,k8s 有什么功能 ? :https://www.jianshu.com/p/707c8ebb8616

k8s :https://www.cnblogs.com/xy51/p/12744956.html

k8s 超詳細總結:https://www.cnblogs.com/cheyunhua/p/14498014.html
k8s 總結:http://yaoguais.github.io/article/golang/k8sinterview.html

K8s 初識:http://www.weixuecn.cn/article/11410.html

《Kubernetes實戰》

Kubernetes 是什么?

Kubernetes,又稱為 k8s(首字母為 k、首字母與尾字母之間有 8 個字符、尾字母為 s,所以簡稱 k8s)或者簡稱為 "kube" ,是一種可自動實施?Linux 容器操作的開源平臺。它可以幫助用戶省去應用容器化過程的許多手動部署和擴展操作。也就是說,您可以將運行 Linux 容器的多組主機聚集在一起,由 Kubernetes 幫助您輕松高效地管理這些集群。而且,這些集群可跨公共云、私有云或混合云部署主機。因此,對于要求快速擴展的云原生應用而言(例如借助 Apache Kafka 進行的實時數據流處理),Kubernetes 是理想的托管平臺。

Kubernetes 最初由 Google 的工程師開發和設計。Google 是最早研發 Linux 容器技術的企業之一(組建了cgroups),曾公開分享介紹?Google 如何將一切都運行于容器之中(這是 Google 云服務背后的技術)。Google 每周會啟用超過 20 億個容器——全都由內部平臺?Borg?支撐。Borg 是 Kubernetes 的前身,多年來開發 Borg 的經驗教訓成了影響 Kubernetes 中許多技術的主要因素。

趣事:Kubernetes 徽標的七個輪輻代表著項目最初的名稱"九之七項目"(Project Seven of Nine)。

Kubernetes相關術語

點擊查看 Kubernetes (k8s)術語表

和其它技術一樣,Kubernetes 也會采用一些專用的詞匯,這可能會對初學者理解和掌握這項技術造成一定的障礙。為了幫助您了解 Kubernetes,我們在下面來解釋一些常用術語。

  • 主機(Master):?用于控制 Kubernetes 節點的計算機。所有任務分配都來自于此。
  • 節點(Node):負責執行請求和所分配任務的計算機。由 Kubernetes 主機負責對節點進行控制。
  • 容器集(Pod):被部署在單個節點上的,且包含一個或多個容器的容器組。同一容器集中的所有容器共享同一個 IP 地址、IPC、主機名稱及其它資源。容器集會將網絡和存儲從底層容器中抽象出來。這樣,您就能更加輕松地在集群中移動容器。
  • 復制控制器(Replication controller):用于控制應在集群某處運行的完全相同的容器集副本數量。
  • 服務(Service):將工作內容與容器集分離。Kubernetes 服務代理會自動將服務請求分發到正確的容器集——無論這個容器集會移到集群中的哪個位置,甚至可以被替換掉。
  • Kubelet:運行在節點上的服務,可讀取容器清單(container manifest),確保指定的容器啟動并運行。
  • kubectl:?Kubernetes 的命令行配置工具。

k8s基本原理

https://juejin.cn/post/6844903902869995534

  • k8s demo 部署示例
  • k8s 基本架構和原理
  • k8s 資源對象
  • k8s 網絡模型
  • 總結

學習 Kubernetes 基礎知識

From:https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/

介紹了 Kubernetes 集群編排系統的基礎知識。每個模塊包含關于 Kubernetes 主要特性和概念的一些背景信息,并包括一個在線互動教程。這些互動教程讓您可以自己管理一個簡單的集群及其容器化應用程序。

使用互動教程,您可以學習:

  • 在集群上部署容器化應用程序
  • 彈性部署
  • 使用新的軟件版本,更新容器化應用程序
  • 調試容器化應用程序

  • 1. 創建一個 Kubernetes 集群
  • 2. 部署應用程序
  • 3. 應用程序探索
  • 4. 應用外部可見
  • 5. 應用可擴展
  • 6. 應用更新

k8s 基本使用(上)

From:https://www.jianshu.com/p/8d60ce1587e1

想提前了解一下 k8s 相關的知識的話,可以通過以下鏈接進行學習:

  • 10分鐘看懂 Docker 和 K8S:https://zhuanlan.zhihu.com/p/53260098
  • Kubernetes中文社區 --- 從零開始 k8s:https://www.kubernetes.org.cn/doc-11
  • k8s官網 - 中文:https://kubernetes.io/zh/
  • Kubernetes 中文文檔:http://docs.kubernetes.org.cn/

結構模型

k8s 是經典的一對多模型,有一個主要的管理節點master和許多的工作節點slaver。當然,k8s 也可以配置多個管理節點,擁有兩個以上的管理節點被稱為 高可用。k8s 包括了許多的組件,每個組件都是單運行在一個docker容器中,然后通過自己規劃的虛擬網絡相互訪問。你可以通過kubectl get pod -n kube-system查看所有節點上的組件容器。

在管理節點中會比工作節點運行更多的 k8s 組件,我們就是靠著這些多出來的組件來對工作節點發號施令。他們都叫什么這里就不詳細提了。反正對于”基本使用“來說,這些名字并不重要。

理念

要想理解一個東西就要先明白它的內在理念。通俗點就是,k8s 做了什么?為了提供更加可靠的服務,就要增加服務器的數量,減少每個服務器的體量來平攤負載,而越來越多的虛擬機就會帶來越來越高的運維成本。如何讓少量的運維人員就可以管理數量眾多的服務器及其上的服務呢?這就是 k8s 做的工作。

k8s 把數量眾多的服務器重新抽象為一個統一的資源池,對于運維人員來說,他們面前沒有服務器1、服務器2的概念,而是一個統一的資源池,增加新的服務器對運維人員來說,只是增加自資源池的可用量。不僅如此,k8s 把所有能用的東西都抽象成了資源的概念,從而提供了一套更統一,更簡潔的管理方式。

接下來,我會把每個基本命令當做一節來進行介紹,并輔以介紹一些基本概念。本文介紹的命令涵蓋了增刪改查四方面,可參加下面表格,因為篇幅較長,我們將create及之后的不那么常用的命令放在下一篇文章 k8s 基本使用(下) 里講:

命令名類型作用
get列出某個類型的下屬資源
describe查看某個資源的詳細信息
logs查看某個 pod 的日志
create新建資源
explain查看某個資源的配置項
delete刪除某個資源
edit修改某個資源的配置項
apply應用某個資源的配置項

kubectl get 列出資源!

接下來進入正題,首先來了解一下 k8s 中最最最常用的命令kubectl get,要記住,k8s 把所有的東西都抽象成了資源,而kubectl get就是用來查看這些資源的。最常見的資源就是 pod 。

什么是 pod?

pod(豆莢)。 pod 的概念其實和docker中的容器非常相似。他是 k8s 中的最小工作單位。你可以把 pod 理解成一個一個的小機器人,而 k8s 抽象出來的大資源池就是他們的工廠。

pod 和 docker 容器的關系?

pod 將一個或多個docker容器封裝成一個統一的整體進行管理并對外提供服務。

不僅我們自己的服務是要包裝成 pod 的,就連 k8s 自己也是運行在一堆 pod 上。接下來就讓我們查看一下 k8s 的 pod :kubectl get pod -n kube-system

-n?參數指定了要查看哪個命名空間下的 pod 。 k8s 所有的 pod 都被放置在kube-system命名空間下。

什么是命名空間?

命名空間namespace,是 k8s 中”組“的概念,提供同一服務的 pod 就應該被放置同一命名空間下,而不是混雜在一起。k8s 可以用命名空間來做權限控制。如果不指定的話, pod 將被放置在默認的命名空間default下。

執行了kubectl get pod -n kube-system命令后,你就可以看到如下內容:

其中每一行就是一個資源,這里我們看到的資源是 pod 。你看到的 pod 數量可能和我的不一致,因為這個列表里包含了 k8s 在所有節點上運行的 pod ,你加入的節點越多,那么顯示的 pod 也就越多。我們來一列一列的看:

  • NAME:第一列是 pod 的名字,k8s 可以為 pod 隨機分配一個五位數的后綴。
  • READY:第二列是 pod 中已經就緒的 docker 容器的數量,上文中我們提到了,pod 封裝了一個或多個 docker 容器。在這里,1/1的含義為就緒1個容器/共計1個容器。
  • STATUS:第三列是 pod 的當前狀態,下面是一些常見的狀態:

狀態名

含義
Running運行中
Error異常,無法提供服務
Pending準備中,暫時無法提供服務
Terminaling結束中,即將被移除
Unknown未知狀態,多發生于節點宕機
PullImageBackOff鏡像拉取失敗
  • RESTART:k8s 可以自動重啟 pod,這一行就是標記了 pod 一共重啟了多少次。
  • AGE:pod 一共存在了多長時間。

kubectl get?可以列出 k8s 中所有資源

這里只介紹了如何用kubectl獲取 pod 的列表。但是不要把get和pod綁定在一起,pod 只是 k8s 中的一種服務,你不僅可以get pod,還可以get svc(查看服務)、get rs(查看副本控制器)、get deploy(查看部署)等等等等,雖然說kubectl get pod是最常用的一個,但是如果想查看某個資源而又不知道命令是什么,kbuectl get <資源名>就對了。

想看更多的信息,可以指定-o wide參數,如下:kubectl get pod -n kube-system -o wide

加上這個參數之后就可以看到資源的所在ip和所在節點node了。

記得加上 -n

-n可以說是kubectl get命令使用最頻繁的參數了,在正式使用中,我們永遠不會把資源發布在默認命名空間。所以,永遠不要忘記在get命令后面加上-n。

小結

kubectl get命令可以列出 k8s 中的資源,而kubectl get pod是非常常用的查看 pod 的命令。而-n參數則可以指定 pod 所在的命名空間。

kubectl describe 查看詳情!

kubectl describe命令可以用來查看某一資源的具體信息,他同樣可以查看所有資源的詳情,不過最常用的還是查看 pod 的詳情。他也同樣可以使用-n參數指定資源所在的命名空間。

舉個例子,我們可以用下面命令來查看剛才 pod 列表中的某個 pod,注意不要忘記把 pod 名稱修改成自己的:kubectl describe pod kube-flannel-ds-amd64-2d6tb -n kube-system

然后你就可以看到很多的信息,咱們分開說,首先是基本屬性,你可以在詳細信息的開頭找到它:

基本屬性

# 實例名稱 Name: kube-flannel-ds-amd64-2d6tb # 所處命名空間 Namespace: kube-system # 所在節點 Node: worker2/192.168.56.22 # 啟動時間 Start Time: Wed, 03 Jul 2019 09:31:50 +0000 # 標簽 Labels: app=flannelcontroller-revision-hash=bfc6b6dd4pod-template-generation=2tier=node # 注解 Annotations: <none> # 當前狀態 Status: Running # 所在節點 IP IP: 192.168.56.22 # 由那種資源生成 / 控制 Controlled By: DaemonSet/kube-flannel-ds-amd64

其中幾個比較常用的,例如Node、labels和Controlled By。通過Node你可以快速定位到 pod 所處的機器,從而檢查該機器是否出現問題或宕機等。通過labels你可以檢索到該 pod 的大致用途及定位。而通過Controlled By,你可以知道該 pod 是由那種 k8s 資源創建的,然后就可以使用kubectl get <資源名>來繼續查找問題。例如上文DaemonSet/kube-flannel-ds-amd64,就可以通過kubectl get DaemonSet -n kube-system來獲取上一節資源的信息。

內部鏡像信息

在中間部分你可以找到像下面一樣的Containers段落。該段落詳細的描述了 pod 中每個 docker 容器的信息,常用的比如Image字段,當 pod 出現 ImagePullBackOff錯誤的時候就可以查看該字段確認拉取的什么鏡像。其他的字段名都很通俗,直接翻譯即可。

Containers:kube-flannel:Container ID: docker://25d2c4896847bbf53735c57a60c5b3146e2b3a0f86811074bcd28a8291213c18Image: quay.io/coreos/flannel:v0.11.0-amd64Image ID: docker://sha256:ff281650a721f46bbe2169292c91031c66411554739c88c861ba78475c1df894Port: <none>Host Port: <none>Command:/opt/bin/flanneldArgs:--ip-masq--kube-subnet-mgr--iface=enp0s8State: RunningStarted: Wed, 03 Jul 2019 09:31:53 +0000Ready: TrueRestart Count: 0Limits:cpu: 100mmemory: 50MiRequests:cpu: 100mmemory: 50MiEnvironment:POD_NAME: kube-flannel-ds-amd64-2d6tb (v1:metadata.name)POD_NAMESPACE: kube-system (v1:metadata.namespace)Mounts:/etc/kube-flannel/ from flannel-cfg (rw)/run from run (rw)/var/run/secrets/kubernetes.io/serviceaccount from flannel-token-fsqdv (ro)

事件

在describe查看詳情的時候,最常用的信息獲取處就是這個Event段落了,你可以在介紹內容的末尾找到它,如下:

Events: <none>

是的,如果你看到上面這樣,沒有任何Events的話,就說明該 pod 一切正常。當 pod 的狀態不是Running時,這里一定會有或多或少的問題,長得像下面一樣,然后你就可以通過其中的信息分析 pod 出現問題的詳細原因了:

Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Killing 29m kubelet, worker1 Stopping container kube-flannelWarning FailedCreatePodSandBox 27m (x12 over 29m) kubelet, worker1 Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "kube-flannel-ds-amd64-9trbq": Error response from daemon: cgroup-parent for systemd cgroup should be a valid slice named as "xxx.slice"Normal SandboxChanged 19m (x48 over 29m) kubelet, worker1 Pod sandbox changed, it will be killed and re-created.Normal Pulling 42s kubelet, worker1 Pulling image "quay.io/coreos/flannel:v0.11.0-amd64"

小結

kubectl describe <資源名> <實例名>可以查看一個資源的詳細信息,最常用的還是比如kubectl describe pod <pod名> -n <命名空間>來獲取一個 pod 的基本信息。如果出現問題的話,可以在獲取到的信息的末尾看到Event段落,其中記錄著導致 pod 故障的原因。

kubectl logs 查看日志!

如果你想查看一個 pod 的具體日志,就可以通過kubectl logs <pod名>來查看。注意,這個只能查看 pod 的日志。通過添加-f參數可以持續查看日志。例如,查看kube-system命名空間中某個flannel pod 的日志,注意修改 pod 名稱:

kubectl logs -f -n kube-system kube-flannel-ds-amd64-2d6tb

然后就可以看到如下輸出:

E0706 06:55:15.848891 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:16.948058 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:17.949165 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:18.954108 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:19.955267 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:21.046592 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:22.048285 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:23.147040 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:24.148350 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:25.247352 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:26.248831 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:27.347224 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:28.348182 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused E0706 06:55:29.350578 1 reflector.go:201] github.com/coreos/flannel/subnet/kube/kube.go:310: Failed to list *v1.Node: Get https://10.96.0.1:443/api/v1/nodes?resourceVersion=0: dial tcp 10.96.0.1:443: connect: connection refused ...

如果你發現某個 pod 的服務有問題,但是狀態還是顯示Running,就可以使用kubectl logs來查看其詳細日志。

總結

在本篇文章里,我們了解了 k8s 的宗旨和一些基本概念,并知道了最為常用的get、descibe及logs命令,知道了這三條命令之后就幾乎可以從 k8s 中獲取所有常用信息了。接下來的 k8s 基本使用(下)里,我們會更深一步,來了解 k8s 中如何創建、修改及刪除資源。


?

總結

以上是生活随笔為你收集整理的k8s 基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。