k8s概念 yml方式建立容器 伺服器通訊

2022-09-12 05:39:12 字數 4305 閱讀 1524

沒有系統學習,只能根據專案中用的內容一點一點積累

目前的理解是:docker

打包生成映象,然後可以使用映象生成容器,k8s管理容器

由於基於kubernetes也是基於docker的,都需要用到docker進行通訊和中轉,因此使用同一的sl**e映象將大大節省平台開發與維護成本,因此需要引入jenkins的另乙個大外掛程式pipeline

一、k8s概念

docker是應用最為廣泛的容器技術,通過打包映象,啟動容器來建立乙個服務。

但是隨著應用越來越複雜,容器的數量也越來越多,由此衍生了管理運維容器的重大問題,k8s問世。

k8s是乙個開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能,有如下優點:

1、服務發現與排程

2、負載均衡

3、服務自癒

4、服務彈性擴容

5、橫向擴容

6、儲存卷掛載

ingress

ingress是k8s的一種集群維度暴露服務的方式。

通過http或https暴露集群內部service,給service提供外部url、負載均衡、ssl/tls能力以及基於host的方向**。

可以簡單理解為service的service,他通過獨立的ingress物件來制定請求**的規則,把請求路由到乙個或多個service中。

ingress與ingress-controller

ingress物件:

指的是k8s中的乙個api物件,一般用yaml配置。作用是定義請求如何**到service的規則,可以理解為配置模板。

ingress-controller:

具體實現反向**及負載均衡的程式,對ingress定義的規則進行解析,根據配置的規則來實現請求**

二、yml方式建立容器

k8s中文社群文件:

k8s英文社群文件:

service示例:

ingressroute示例:

# 建立容器

kind: deployment # 資源型別

metadata: # 資源元資料

labels: # 標籤對核心系統是沒有直接意義,用來劃分特定組的物件(比如,所有女的)

name: qa-mock

namespace: ph-stg

spec:

minreadyseconds:

10# k8s在等待10秒後進行公升級

progressdeadlineseconds:

600# 部署公升級的最長時間

replicas:

1# 副本數量,應該是指服務的容器個數

revisionhistorylimit:

2selector: # 標籤選擇器

matchlabels:

strategy: # 更新策略

rollingupdate:

maxsurge:

1# 滾動更新時最多可以啟動多少個pod

maxun**ailable:

0# 滾動更新時最大可以刪除多少個pod

type: rollingupdate # 型別:滾動更新

template: # pod模板

metadata: # pod元資料

labels:

spec: # 資源規格

containers: # 容器配置

-args: # 啟動命令的引數

-mock.py

command: # 啟動命令

-python

image: 映象位址

:映象tag # 映象位址

imagepullpolicy: always # 拉取策略:always-總是拉取,ifnotpresent-優先本地,never-只用本地

name: qa-mock

resources:

limits:

memory: 1gi

terminationmessagepath: /dev/termination-log # 存放容器終止訊息

terminationmessagepolicy: file

dnspolicy: clusterfirst # dns策略:none-無策略,default-和宿主機一致,clusterfirst-集群dns優先,clusterfirstwithhostnet-集群dns優先,並伴隨著使用宿主機網路

imagepullsecrets: # 引用建立的secret,如果namespace下沒有 secret, 出現失敗

-name: aliyun

restartpolicy: always # 重啟策略,預設always-自動重啟,onfailure-退出碼不為0時自動重啟,never-不重啟

schedulername:

default-scheduler # 排程器

securitycontext:

terminationgraceperiodseconds:

30 # 服務關掉老pod請求入口後,留30秒給之前的請求動作執行完,最後結束老pod

三、伺服器通訊

1、乙個集群能有多個node,node是 k8s 中的乙個工作機器,通常是乙個虛擬機器或者物理機;

同時 k8s master在集群之上自動排程pod,自動排程時要考慮到每個node上的可用資源

2、乙個node能有多個pod

3、乙個pod可以有多個container,一般情況只有乙個

4、集群內服務之間通過clusterip進行溝通

同乙個pod內的多個container共享相同資源及網路,通過local port number溝通

需求:a專案需要被b專案呼叫,且能被個人電腦訪問;

建立nodeport型別的service也會自動生成clusterip,所以不需要再建立clusterip型別的service

建立nodeport型別的service和配置ingress即可滿足需求,可以參考上面列出來的示例。

個人service示例

# service配置

apiversion: v1 # api版本

kind: service # 資源型別

metadata: # 資源元資料

labels:

name: qa-mock # 容器名稱

namespace: ph-stg # 類別

spec: # 資源規格

externaltrafficpolicy: cluster # 流量政策, cluster-流量可以**到其他節點上的pod,local-流量只發給本機的pod

ports:

- port: 8080 # 提供給集群內部客戶訪問service的入口

protocol: tcp # 協議型別tcp和udp,預設tcp

targetport: 8080 # 本地的埠

selector: # 選擇label標籤的pod作為管理範圍

sessionaffinity: none # 會話保持,none(隨機排程) clientip(於同乙個客戶端的請求排程到同乙個pod中)

type: nodeport # service型別clusterip、nodeport 和loadbalancer,預設clusterip

個人ingress示例
# ingress配置

apiversion: traefik.containo.us/v1alpha1 # api版本

kind: ingressroute # 資源型別

metadata: # 資源元資料

name: qa-mock

namespace: ph-stg

spec:

entrypoints: [ ]

routes:

- kind: rule

match: host(`stg-bigdata-qa-mock.oriente.com.ph`) && pathprefix(`/`)

middlewares: [ ]

priority: 0 # 優先順序

services:

- name: qa-mock

port: 8080

專案啟動時的埠需要和service.yml、ingress.yml檔案中的埠設定保持一致

k8s的yml檔案詳解

1 apiversion v1 指定api版本,此值必須在kubectl apiversion中 2 kind pod 指定建立資源的角色 型別 3 metadata 資源的元資料 屬性 4 name django pod 資源的名字,在同乙個namespace中必須唯一 5 labels 設定資源...

k8s 容器鉤子

有兩個鉤子暴露在容器中 poststart 這個鉤子在建立容器之後立即執行。但是,不能保證鉤子會在容器入口點之前執行。沒有引數傳遞給處理程式。kind deployment metadata name testlifecycle labels spec replicas 1 selector mat...

K8s概念指南

cluster 集群是指由 k8s使用一些列的物理機 虛擬機器和其他基礎資源來執行你的應用程式 node 乙個 node 就是乙個執行著 k8s的物理機或虛擬機器,平切 pod可以在其上面被排程 pod 乙個 pod對應乙個由相關容器和卷組成的容器組 label 乙個 label 是乙個被附加到資源...