閱讀Kubernetes文檔總結(jié)

Kubernetes(K8S)中文文檔_Kubernetes中文社區(qū)


Kubernetes基礎(chǔ)

在集群上規(guī)?;?,帶版本,部署和調(diào)試容器化應(yīng)用

實(shí)現(xiàn)熱更新

Kubernetes操作

創(chuàng)建集群

部署,發(fā)布,查看,更新應(yīng)用‘

Minikube 部署 Kubernetes

創(chuàng)建Kubernetes cluster(單機(jī)版)最簡單的方法是minikube:

使用 kubectl 創(chuàng)建Deployment

創(chuàng)建Deployment后,Kubernetes master 會將Deployment創(chuàng)建好的應(yīng)用實(shí)例調(diào)度到集群中的各個節(jié)點(diǎn)。

Kubernetes Deployment Controller會持續(xù)監(jiān)視這些實(shí)例

如果管理實(shí)例的節(jié)點(diǎn)被關(guān)閉或刪除,那么 Deployment Controller將會替換它們,實(shí)現(xiàn)自我修復(fù)能力。

老的部署方式,一般通常安裝腳本來啟動應(yīng)用,但是便不會在機(jī)器故障后“自動”恢復(fù)

集群的方式也是一個master,多個slave.master部署一個應(yīng)用然后再分發(fā)到多個node上

創(chuàng)建Deployment時(shí),需要為應(yīng)用程序指定容器鏡像以及要運(yùn)行的副本數(shù)

kubectl version

kubectl get nodes

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

kubectl get deployments

運(yùn)行一個代理

We will open a second terminal window to run the proxy.

echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n"; kubectl proxy

curl http://localhost:8001/version

API服務(wù)器將根據(jù)POD名稱自動為每個POD創(chuàng)建一個端點(diǎn),這個端點(diǎn)也可以通過代理訪問。首先,我們需要獲得POD名稱,然后將變量POD_NAME存儲在環(huán)境中:

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

echo Name of the Pod: $POD_NAME

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/

Kubernetes 中查看Pods和Nodes

Kubernetes Pod

Deployment時(shí),Kubernetes會創(chuàng)建了一個Pod來托管應(yīng)用。

pod組成

Volumes 卷

唯一的集群IP地址

每個容器運(yùn)行的信息,例如:容器鏡像版本

Kubernetes Node上至少運(yùn)行著

Kubelet

container runtime

一個service管理一組pod

Service的四種type:

ClusterIP(默認(rèn)) - 在集群中內(nèi)部IP上暴露服務(wù)。此類型使Service只能從群集中訪問。

NodePort - 通過每個 Node 上的 IP 和靜態(tài)端口(NodePort)暴露服務(wù)。NodePort 服務(wù)會路由到 ClusterIP 服務(wù),這個 ClusterIP 服務(wù)會自動創(chuàng)建。通過請求 <NodeIP>:<NodePort>,可以從集群的外部訪問一個 NodePort 服務(wù)。

LoadBalancer - 使用云提供商的負(fù)載均衡器(如果支持),可以向外部暴露服務(wù)。外部的負(fù)載均衡器可以路由到 NodePort 服務(wù)和 ClusterIP 服務(wù)。

ExternalName - 通過返回 CNAME 和它的值,可以將服務(wù)映射到 externalName 字段的內(nèi)容,沒有任何類型代理被創(chuàng)建。這種類型需要v1.7版本或更高版本kube-dnsc才支持。

Service 使用label selectors來匹配一組Pod

Label可以在創(chuàng)建時(shí)或以后附加到對象上,可以隨時(shí)修改。

kubectl get services

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

kubectl get services

kubectl describe services/kubernetes-bootcamp

kubectl describe deployment/kubernetes-bootcamp

export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')

echo NODE_PORT=$NODE_PORT

curl ip:30092

kubernetes-bootcamp? NodePort? ? 10.108.100.97? <none>? ? ? ? 8080:30092/TCP

伸縮應(yīng)用

如果伸縮需求是0,將會終止Deployment指定的所有Pod

Service集成了負(fù)載均衡器,可以將網(wǎng)絡(luò)流量分配到Deployment暴露的所有Pod中。Service將使用Endpoints持續(xù)監(jiān)控運(yùn)行的Pod,以確保僅將流量分配到可用的Pod。

kubectl scale deployments/kubernetes-bootcamp --replicas=4

kubectl get deployments

kubectl get pods -o wide

有4個不同的服務(wù)在不同的pod

kubectl describe services/kubernetes-bootcamp

Endpoints:? ? ? ? ? ? ? ? 172.18.0.2:8080,172.18.0.5:8080,172.18.0.6:8080 + 1 more...

每一個pod在一個node上有不同的ip 一個node可以有兩個相同的pod但是ip不同

應(yīng)用更新

滾動更新通過Deployments實(shí)現(xiàn)應(yīng)用實(shí)例在不中斷、不停機(jī)情況下更新,新的Pod會逐步調(diào)度到可用的資源Node節(jié)點(diǎn)上。

將應(yīng)用從一個環(huán)境升級到另一個環(huán)境(通過容器鏡像更新)

回滾到之前的版本

持續(xù)集成和持續(xù)交付應(yīng)用的零停機(jī)

更新image

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

回滾

kubectl rollout status deployments/kubernetes-bootcamp

使用Minikube集群

Kubernetes集群

Master節(jié)點(diǎn):協(xié)調(diào)控制整個集群。

Nodes節(jié)點(diǎn):運(yùn)行應(yīng)用的工作節(jié)點(diǎn)。

node process 每個node有一個進(jìn)程

Minikube CLI提供集群管理的基本操作,包括 start、stop、status、 和delete。

minikube version

minikube start

kubectl cluster-info

構(gòu)建應(yīng)用

docker build -t hello-node:v1 .

kubectl run hello-node --image=hello-node:v1 --port=8080

kubectl get deployments

minikube service hello-node

Kubernetes集群設(shè)計(jì)文檔

Kubernetes 架構(gòu)

Kubernetes 具備完善的集群管理能力,包括多層次的安全防護(hù)和準(zhǔn)入機(jī)制、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和服務(wù)發(fā)現(xiàn)機(jī)制、內(nèi)建負(fù)載均衡器、故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動升級和在線擴(kuò)容、可擴(kuò)展的資源自動調(diào)度機(jī)制、多粒度的資源配額管理能力。

Kubernetes 還提供完善的管理工具,涵蓋開發(fā)、部署測試、運(yùn)維監(jiān)控等各個環(huán)節(jié)。

Borg簡介

Borg是谷歌內(nèi)部的大規(guī)模集群管理系統(tǒng)

Kubernetes核心組件:

概念

通過Kubernetes你可以

快速部署應(yīng)用

快速擴(kuò)展應(yīng)用

無縫對接新的應(yīng)用功能

節(jié)省資源,優(yōu)化硬件資源的使用

Google 10多年大規(guī)模容器管理技術(shù)Borg的開源版

組件

Master

kube-apiserver

etcd是Kubernetes提供默認(rèn)的存儲系統(tǒng),保存所有集群數(shù)據(jù),使用時(shí)需要為etcd數(shù)據(jù)提供備份計(jì)劃。

節(jié)點(diǎn)(Node)

kube-proxy

kube-proxy通過在主機(jī)上維護(hù)網(wǎng)絡(luò)規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā)來實(shí)現(xiàn)Kubernetes服務(wù)抽象。

supervisord

supervisord是一個輕量級的監(jiān)控系統(tǒng),用于保障kubelet和docker運(yùn)行。

Kubernetes對象

Object的配置:Object Spec和Object Status

Spec描述了對象所需的狀態(tài)? Status描述了對象的實(shí)際狀態(tài),并由Kubernetes系統(tǒng)提供和更新。

Kubernetes Names

Kubernetes REST API中的所有對象都用Name和UID來明確地標(biāo)識。

/api/v1/pods/some-name

Kubernetes Namespaces

Kubernetes可以使用Namespaces(命名空間)創(chuàng)建多個虛擬集群。

相同Namespace中的對象將具有相同的訪問控制策略。

Kubernetes Volume

默認(rèn)情況下容器中的磁盤文件是非持久化的

容器之間需要共享文件

對于Docker 1.7,每個容器只允許掛載一個Volume,并且不能將參數(shù)傳遞給Volume

Kubernetes Volume具有明確的生命周期 - 與pod相同。

Kubernetes支持許多類型的Volume,Pod可以同時(shí)使用任意類型/數(shù)量的Volume。

一個Volume只是一個目錄,目錄中可能有一些數(shù)據(jù),pod的容器可以訪問這些數(shù)據(jù)。

要使用Volume,pod需要指定Volume的類型和內(nèi)容(spec.volumes字段),和映射到容器的位置(spec.containers.volumeMounts字段)。

Volume 類型

hostPath

hostPath允許掛載Node上的文件系統(tǒng)到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath。

還有一些基于不同運(yùn)行環(huán)境的磁盤

secret

secret volume用于將敏感信息(如密碼)傳遞給pod??梢詫ecrets存儲在Kubernetes API中,使用的時(shí)候以文件的形式掛載到pod中

Kubernetes Annotations

綁定用戶信息

Node

conditions字段描述所有Running節(jié)點(diǎn)的狀態(tài)。

OutOfDisk True:如果節(jié)點(diǎn)上沒有足夠的可用空間來添加新的pod;否則為:False

Ready True:如果節(jié)點(diǎn)是健康的并準(zhǔn)備好接收pod;False:如果節(jié)點(diǎn)不健康并且不接受pod;Unknown:如果節(jié)點(diǎn)控制器在過去40秒內(nèi)沒有收到node的狀態(tài)報(bào)告。

MemoryPressure True:如果節(jié)點(diǎn)存儲器上內(nèi)存過低; 否則為:False。

DiskPressure True:如果磁盤容量存在壓力 - 也就是說磁盤容量低;否則為:False。

master和Kubernetes集群之間通信路徑。

其目的是允許用戶自定義安裝,以增強(qiáng)網(wǎng)絡(luò)配置,使集群可以在不受信任(untrusted)的網(wǎng)絡(luò)上運(yùn)行。

第一個是從apiserver到在集群中的每個節(jié)點(diǎn)上運(yùn)行的kubelet進(jìn)程。第二個是通過apiserver的代理功能從apiserver到任何node、pod或service 。

從apiserver到Node、Pod或Service的連接默認(rèn)為HTTP連接,因此不需進(jìn)行認(rèn)證加密。也可以通過HTTPS的安全連接

pods

一個Pod封裝一個應(yīng)用容器(也可以有多個容器),存儲資源、一個獨(dú)立的網(wǎng)絡(luò)IP以及管理控制容器運(yùn)行方式的策略選項(xiàng)。

Kubernetes Replica Sets

ReplicaSet能確保運(yùn)行指定數(shù)量的pod。

這意味著你可能永遠(yuǎn)不需要操作ReplicaSet對象,而是使用Deployment替代管理 。

Kubernetes Deployment

Kubernetes 垃圾收集

級聯(lián)刪除

Kubernetes kubectl 概述

涵蓋了kubectl語法,對命令操作的描述,并列舉的常見例子。

官方文檔

https://www.kubernetes.org.cn/doc-45

kubectl [command] [TYPE] [NAME] [flags]

create,get,describe,set,delete

node pod service

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容