沒有系統學習,只能根據專案中用的內容一點一點積累
目前的理解是: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 是乙個被附加到資源...