k8s架構(gòu)
- 聲明式api, 使用yaml定義需要k8s完成什么樣的工作,而不是使用kubectl去調(diào)用api完成
對(duì)象描述
apiVersion: app/v1 #api版本
kind: Deployment # 什么類型的對(duì)象
-----------typemeta 對(duì)象類型的元信息
metadata:
name: nginx # 對(duì)象名
labels: #label定義
app: nginx
------------對(duì)象元信息
spec:
selector:
matchLabels:
app: nginx
replicas: 3 #副本數(shù)量
template:
metadata:
labels:
app: nginx
spec:
containers:
name: nginx
image: nginx:alpine # 使用的鏡像
resources:
requests:
cpu:100m
memory: 200Mi
limits:
cpu: 100m
memory: 200Mi
imagePullSecrets:
- name: default-secret
-----------spec 對(duì)象期望狀態(tài),用什么鏡像,有什么副本
status: {}
--------- 對(duì)象實(shí)際狀態(tài),創(chuàng)建對(duì)象后可以看到,創(chuàng)建時(shí)不用指定
分層
- 內(nèi)核層
- 應(yīng)用層,可以替換成第三方的
- 治理層
- 接口層
- 生態(tài)系統(tǒng)層
核心組件
- api server
- etcd
- scheduler
- controller manager
- cloud manager 各個(gè)云服務(wù)商自己加入
- kubelet
- kube proxy
- containerd 容器
污點(diǎn)和容忍度
- 先在pod.spec中定義容忍度等,讓pod去找合適的node,然后使用污點(diǎn)去配置,容忍度是指,可以容忍某些污點(diǎn)
kubectl taint nodes node1 key1=value1:noschedule 增加污點(diǎn),后面加個(gè)-為移除污點(diǎn)
pod
pod生命周期
- pod的status字段中podStatus.phase 表明了pod的聲明周期
- pod生命周期: pending, running, failed succeed unknown
容器的三種狀態(tài)
waiting、running、terminated
kubectl describe pod podname 查看容器狀態(tài)
重啟策略,never、always、onfailure
容器分類
基礎(chǔ)容器,infra container,其他容器的父容器,為其容器提供共享的命名空間和網(wǎng)咯空間
初始化容器,init container 在容器啟動(dòng)前 需要做的準(zhǔn)備工作的配置,例如查看網(wǎng)絡(luò)和dns配置等,初始化容器可以定義多個(gè),依次執(zhí)行
業(yè)務(wù)容器 containers
pod啟動(dòng)
kubectl logs pod-name 查看日志
yaml配置文件中pod.spec中使用command和args來(lái)設(shè)置pod啟動(dòng)時(shí)的命令和參數(shù),command會(huì)替代dockerfile中的entry point,args 用來(lái)傳遞參數(shù)
pod鏡像相關(guān)配置
- image,指定鏡像
- imagePullSecret,如果從私有倉(cāng)庫(kù)拉取鏡像,這個(gè)字段設(shè)置倉(cāng)庫(kù)訪問(wèn)憑證
- imagePullPolicy 鏡像拉去策略 ifNotPresent 優(yōu)先本地 Always,從鏡像庫(kù)拉去,Never 僅用本地
pod接收外部?jī)?nèi)容
- 使用env。配置鍵值對(duì)
- 使用env.ValueFrom.SecretKeyRef 分別定義key和value
- 使用volme掛載
pod探針
探針診斷方式
- ExecAction, 在容器內(nèi)執(zhí)行命令,看是否執(zhí)行成功
- TCPSocketAction 查看ip:port是否通
- HTTPGetAction,發(fā)送Get請(qǐng)求,查看返回狀態(tài)碼
探針的兩種類型
- 存活探針,是否存活,livenessProbe
- 就緒探針,探測(cè)成功后,接收流量 readinessProbe
livenessProbe: # 探針類型,存活還是就緒
exec: # 診斷方式
command:
- cat
- /tmp/healthy
initalDelaySeconds: 5 # 啟動(dòng)后多少秒,探針才初始化,默認(rèn)10s
periodSeconds: 5 # 探針執(zhí)行的周期,默認(rèn)1s
readinessProbe:
tcpSocket:
port:8080
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name:cstom-header
value: awesone
container 資源限制
container下的resource字段進(jìn)行配置
resouses:
requests:
memory: "100Mi"
cpu: "250m"
limit:
memory: "100Mi"
cpu: "250m"
Deployment
無(wú)狀態(tài)工作負(fù)載
- replicaSet副本控制器,用于確保pod的副本數(shù)量,來(lái)實(shí)現(xiàn)所擴(kuò)容
- deployment通過(guò)控制replicaSet實(shí)現(xiàn)水平縮擴(kuò)容、滾動(dòng)更新,而不是直接操作pod
滾動(dòng)更新
允許使用新的實(shí)例,逐步更新,不停機(jī)進(jìn)行Deployment更新 - 可以實(shí)現(xiàn)應(yīng)用程序從一個(gè)環(huán)境提升至另一個(gè)
- 可以進(jìn)行版本回滾
- 持續(xù)集成和交付,無(wú)需停機(jī)
# 滾動(dòng)更新的三種方式
kubectl edit deploy/nginx # 修改
kubectl set image deploy/nginx nginx=nginx:1.9.1 # 升級(jí),將鏡像由1.7.9改為1.9.1的
kubectl apply -f nginx.yaml # 修改yaml文件重新加載
kubectl rollout status deploy/nginx # 查看更新情況
kubectl rollout history deploy/nginx # 查看更新歷史
回滾
kubectl rollout undo deployment/nginx --to-revision=2 指定回滾兩個(gè)版本
暫停
kubectl rolout pause delopy/nginx
恢復(fù)
kubectl rollout resurme deploy/nginx
statefulSet
有狀態(tài)工作負(fù)載
需要?jiǎng)?chuàng)建headless用于解析和pvc,用于數(shù)據(jù)存儲(chǔ)
headless服務(wù)創(chuàng)建
- 服務(wù)名和statefulSet中定義的需要一致
- 選擇器指定正確的Pod標(biāo)簽
- clusterIP設(shè)置為None
apiVersion: v1
kind: Service
metadata:
name: nginx
....
....
....
spec
selector:
app: nginx
clusterIP: None # 不需要clusterip的負(fù)載均衡能力
PVC創(chuàng)建
containers:
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
# spec 下定義Mounts的www
volumeClaimTemplates:
- metadata:
name: www
annotations:
everest.io/disk-volume-type:SAS
- spec:
- ReadWriteOne
resources:
requests:
Storage: 1G
storageClassName:csi-diskS
kubectl get sts 查看stateful的所有
DeamonSet 守護(hù)進(jìn)程集
節(jié)點(diǎn)上的守護(hù)進(jìn)程,每創(chuàng)建一個(gè)新的node,就會(huì)建立一個(gè)pod,運(yùn)行deamon進(jìn)程,yaml配置中和Deployment相似,不需要設(shè)置replicas,如果手工強(qiáng)制停止deamonSet的pod,系統(tǒng)會(huì)自動(dòng)創(chuàng)建新的
Job、CronJob
kind選Job
completions 當(dāng)前任務(wù)需要幾個(gè)pod執(zhí)行
parallelism 最多幾個(gè)并發(fā)執(zhí)行
restartPolicy 選擇Never或者OnFailure
backoffLimit 指定job失敗后的重試次數(shù)
cronjob
kind為CronJob,在spec下定義schedule字段,字段值為linux crontab語(yǔ)法
應(yīng)用配置
- 可變配置信息,不能寫(xiě)入鏡像,防止每次修改重啟
- 敏感信息存儲(chǔ)和使用,密碼 token
k8s應(yīng)用配置
configMap 管理一般可變配置,解耦鏡像和應(yīng)用程序,不能用于大塊數(shù)據(jù),主要用于環(huán)境變量、命令行參數(shù)、配置文件
Secret 信息采用base64進(jìn)行編碼
apiversion: v1
kind: ConfigMap
metadata:
name: xxx
data:
a: 1
使用可以將整個(gè)secret或者configmap掛載到volume上,當(dāng)做文件,或者是在env中使用
k8s持久化存儲(chǔ)
pv 持久存儲(chǔ)卷
pvc 持久化存儲(chǔ)聲明
sc 存儲(chǔ)類,為存儲(chǔ)商提供存儲(chǔ)接入
dp 驅(qū)動(dòng)
動(dòng)態(tài)卷,不需要關(guān)心卷的類型等,只需要聲明pvc和sc進(jìn)行空間操作
根據(jù)用戶的配置,pvc進(jìn)行最合適的pv選擇
size、volmeMode、label、sc、accessMode
最后給一個(gè)符合條件,空間最小的pv
pv定義
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-vol
spec:
accessModes: # rwonce讀寫(xiě)權(quán)限,只能被單個(gè)node掛載 readOnlyMany 只讀權(quán)限,允許多個(gè)node掛載 rwMany,讀寫(xiě)權(quán)限,允許多node
- ReadWriteOnce
capacity:
storage: 10Gi # 容量
csi: # out tree配置信息 廠家提供
driver.disk.csi.everest.io
fsType: ext4
volmeAttributes:
everest.io/disk-mode: SCSI
everest.io/disk-volme-type: SAS
storage.kbernetes.io/csiProvisionerldentity: everest-csi-provisioner
volumeHandle: xxxx-xxx-xx-xx
persistentVolmeReclaimPolicy: Delete # retain/Recycle/Delete 保留數(shù)據(jù)、回收空間、刪除
storageClassName: csi-disk # storageClass名
volumeMode: Filesystem # 掛載成文件系統(tǒng)還是塊
使用pvc
apiVersion: v1
kind: PersistentVolmeClaim
metadata:
annotations: xxx
labels:
app: my
release: m
name: xx
namespace: default
spec:
accessModes:
- ReadWriteOnce # 與pv匹配
resources:
requests:
storage: 10G
volumeName/storageClassName: csi-disk #pv或者storageClass名字
volumeMode: Filesystem
selector: # 根據(jù)label 對(duì)系統(tǒng)所有的pv進(jìn)行篩選
matchLabels:
release: "stable"
根據(jù)pv來(lái)寫(xiě)pvc 相當(dāng)于靜態(tài)掛載
如果使用動(dòng)態(tài)掛載,則需要sc
apiVersion: v1
kind: StorageClass
parameters: # 插件驅(qū)動(dòng)
csi.storage.k8s.io/csi-driver-name: disk.csi.everest.io
csi.storage.k8s.io/fstype: ext4
everest.io/disk-volume-type: SSD
everest.io/passthrough: "true"
provisioner: everest-csi-provisioner # 指定存儲(chǔ)卷供應(yīng)者
reclaimPolicy: Delete
volumeBindingMode: immediate # 立即綁定、waitForFirstConsumer 延遲綁定
allowVolumeExpansion: true # 是佛允許擴(kuò)容
kubectl get pv/pvc
api server
承擔(dān)了關(guān)鍵數(shù)據(jù)通信部分,其性能高低決定了集群性能高低。主要負(fù)責(zé)pod service等的增刪改查
- api。提供restful api
- 訪問(wèn)控制層,主要提供訪問(wèn)控制、鑒權(quán)、對(duì)資源進(jìn)行控制,判斷能否訪問(wèn)對(duì)象
- Registry,存放各種對(duì)象
- etcd,持久化存儲(chǔ)數(shù)據(jù)
etcd
etcd,可以以集群方式部署
- 其有一個(gè)leader節(jié)點(diǎn),處理寫(xiě)請(qǐng)求,保存到日志,同步給其他節(jié)點(diǎn),半數(shù)節(jié)點(diǎn)成功,主節(jié)點(diǎn)則提交這個(gè)事務(wù)
etcd組成
- http server,客戶端api和其他節(jié)點(diǎn)同步請(qǐng)求和心跳檢測(cè)請(qǐng)求
- Store,處理etcd的各種事務(wù),是大部分api功能的實(shí)現(xiàn)
- raft 節(jié)點(diǎn)選舉和數(shù)據(jù)同步
- wal 預(yù)寫(xiě)式日志,用于數(shù)據(jù)持久化,記錄了所有事務(wù)指令
- snapshot 記錄etcd某個(gè)時(shí)刻的全部數(shù)據(jù)
wal和snapshot結(jié)合實(shí)現(xiàn)了數(shù)據(jù)存儲(chǔ)和節(jié)點(diǎn)故障恢復(fù)等操作
Service
有負(fù)載均衡的,管理一組pod
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- name.service0
targetPort: 80
port: 8080
protocol: TCP
type: ClusterIp # service類型
kubectl run -i --tty --image nginx:alpine test --rm 進(jìn)入image操作
可以使用service name直接訪問(wèn)service
需要安裝coreDNS插件
然后還會(huì)創(chuàng)建endpoint,k8s根據(jù)endpoint進(jìn)行負(fù)載均衡,使用kubectl describe svc nginx 可以產(chǎn)看到endpoint
kubectl get endpoints 查看所有的endpoints,pod重啟,ip變化,endpoint也會(huì)變
全域名
service.namespace.svc.cluster.local
service是kube-proxy和iptabels實(shí)現(xiàn)的,kube-proxy list watch apiserver中的service和endpoints,然后會(huì)使用iptabels創(chuàng)建service和pod映射關(guān)系,并且watch pod的變化,更新規(guī)則
service類型
- ClusterIp, 用于集群內(nèi)部訪問(wèn),一個(gè)pod訪問(wèn)一個(gè)集群內(nèi)相同功能的pod
- NodePort,集群外部訪問(wèn),通過(guò)節(jié)點(diǎn)上的port訪問(wèn)
- LoadBalancer,用于外部訪問(wèn),外部訪問(wèn)loadBalancer,loadbalancer轉(zhuǎn)發(fā)給NodePort,外部只需要訪問(wèn)LB
- Headless,用于pod間互相發(fā)現(xiàn),不需要使用service的負(fù)載均衡
# nodeport的配置
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
ports:
- port:80
targetPort: 80
nodePort: 30120 # 不指定,k8s master會(huì)隨機(jī)30000-32767
selector:
app: nginx
使用nodeip:nodePort 訪問(wèn) kubectl get xx -o wide -o wide代表顯示外部信息
不同LB廠商,對(duì)接不一樣,其不是k8s的組件
ingress
基于七層的http協(xié)議進(jìn)行轉(zhuǎn)發(fā),根據(jù)域名和路徑進(jìn)行路由
ingress controller不是k8s的自帶組件,需要自行安裝,例如nginx ingress、cce ingress
apiVersion: networking.k8s.io/v1
kind: ingress
metadata:
name: minimal-ingress
annotations: # 描述,不同類型的ingress,不同
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /testpath
pathType: prefix # exact 精準(zhǔn) prefix 前綴
backend:
service:
name: x
port:
number: 80
華為云產(chǎn)品
cce
- 集群管理
- 彈性伸縮
- 持久卷存儲(chǔ)
- 容器網(wǎng)絡(luò)
- 親和、反親和調(diào)度、
- 工作負(fù)載
- 節(jié)點(diǎn)、節(jié)點(diǎn)池管理
cce敏捷版
提供高性能、可擴(kuò)展。融合了很多高級(jí)功能。mcp多云管理,可以將華為云產(chǎn)品,統(tǒng)一管理
- 適用于峰值流量的智能分擔(dān)
- 跨云應(yīng)用自動(dòng)容災(zāi)
- 業(yè)務(wù)地域策略運(yùn)營(yíng)
mcp 云原生多云平臺(tái)
- 混合云統(tǒng)一管理平臺(tái)
osc,云原生服務(wù)中心
- 提供云原生服務(wù)的全生命周期管理
cie 云原生應(yīng)用運(yùn)維工具
- 可視化,一鍵故障診斷
cci云容器實(shí)例
- 使用kata 方案
- 用戶值需要申請(qǐng)資源,不需要關(guān)心底層實(shí)現(xiàn)
- 智能調(diào)度(volcano)、按需計(jì)費(fèi)、安全容器(運(yùn)行在為虛擬機(jī)上,使用kata技術(shù)實(shí)現(xiàn),實(shí)現(xiàn)虛擬機(jī)級(jí)安全隔離)、極速擴(kuò)容(100ms內(nèi))四大特性
- 主要用于ai計(jì)算、高性能容器批量計(jì)算、長(zhǎng)期穩(wěn)定及擴(kuò)容流量處理
使用cce,用戶需要?jiǎng)?chuàng)建node節(jié)點(diǎn),使用cci不需要,只需要?jiǎng)?chuàng)建工作負(fù)載
根據(jù)資源按小時(shí)計(jì)費(fèi) 按s計(jì)費(fèi)根據(jù)cpu和內(nèi)存
適合大規(guī)模長(zhǎng)期穩(wěn)定的應(yīng)用 批量計(jì)算,如法擴(kuò)容,ci/cd
應(yīng)用容器改造
容器改造步驟
- 容器選擇
- 準(zhǔn)備應(yīng)用運(yùn)行環(huán)境
- 編寫(xiě)開(kāi)機(jī)腳本
- 編寫(xiě)dockerfile
- 制作并上傳鏡像
- 創(chuàng)建工作負(fù)載
cce集群選型
- cce
- cce-turbo 高性能的,大規(guī)模的,網(wǎng)絡(luò)隔離、安全性高
高可用選型
- 多主節(jié)點(diǎn)跨az(區(qū)域)部署
- 節(jié)點(diǎn)高可用,node跨az部署
- 應(yīng)用高可用
容器存儲(chǔ)
- devicemapper,有一部分空間是容器共享空間,刪除文件后不能立馬回收空間,塊存儲(chǔ),進(jìn)行修改,只會(huì)修改對(duì)應(yīng)快,適合文件大,修改少的場(chǎng)景
- overlayfs,文件存儲(chǔ),對(duì)文件進(jìn)行修改,會(huì)修改整個(gè)文件,大并發(fā),少io適合
節(jié)點(diǎn)池
- 一組有相同功能的節(jié)點(diǎn)集合,會(huì)統(tǒng)籌管理節(jié)點(diǎn),修改配置會(huì)影響所有節(jié)點(diǎn)
網(wǎng)絡(luò)選型
- 容器隧道網(wǎng)絡(luò),基于vxlan隧道封裝,最大支持2000節(jié)點(diǎn),
- vpc網(wǎng)絡(luò),無(wú)隧道封裝,跨節(jié)點(diǎn)通過(guò)vpc轉(zhuǎn)發(fā),使用ipvlan(所有虛擬的網(wǎng)口mac地址相同)和vpc路由實(shí)現(xiàn),默認(rèn)200節(jié)點(diǎn),受限于vpc路由表
- 云原生網(wǎng)絡(luò)2.0
swr 鏡像倉(cāng)庫(kù)
- 鏡像掃描,可以掃描鏡像中是否包含惡意漏洞等
- 跨區(qū)鏡像同步,基于kafka,兩個(gè)地區(qū)的鏡像倉(cāng)庫(kù)可以同步,包含自動(dòng)、手動(dòng)同步
- 觸發(fā)器、鏡像老化,上傳鏡像自動(dòng)觸發(fā)版本更新等操作,老版本鏡像自動(dòng)刪除等,自動(dòng)cicd等
dockerfile
- 不要在docker file中升級(jí)軟件
- 一個(gè)容器只運(yùn)行一個(gè)進(jìn)程,不要mysql和PHP等一起運(yùn)行
- 使用exec from格式的cmd和entrypoint
- 變化頻率相同的放在同一個(gè)run中
- 使用標(biāo)簽,具體到使用的基礎(chǔ)鏡像
- 刪除過(guò)程文件,下載的apt包等
- 指定workdir
- 使用copy代替add
工作負(fù)載設(shè)計(jì)
- 需要對(duì)資源進(jìn)行配置
- besteffort,不設(shè)置request和limits,優(yōu)先被kill
- burstable,設(shè)置的request和limit不一致,oomadj為0-1000
- guaranteed,request和limit設(shè)置的一致,oomadj為-998,越小存活要長(zhǎng)久(最后被kill)
容器生命周期
- poststart 開(kāi)始接收請(qǐng)求
- perstop 停止之前
健康檢查
- livenessProbe 檢測(cè)容器是否存活,如果不存活了,根據(jù)策略重啟pod
- readinessProbe,服務(wù)是否可用檢查,服務(wù)可用才發(fā)送請(qǐng)求道這個(gè)endpoint
靜態(tài)動(dòng)態(tài)存儲(chǔ)
- 靜態(tài) pv對(duì)應(yīng)一個(gè)pvc
- 動(dòng)態(tài)pvc對(duì)應(yīng)storage class,storageclass配置了怎么選擇pv kubectl get sc
調(diào)度策略
- nodeName和NodeSelector(使用調(diào)度器選擇)
- 親和、反親和調(diào)度,節(jié)點(diǎn)和pod親和、反親和
伸縮策略
- HPA 根據(jù)cpu、內(nèi)存利用率,對(duì)無(wú)狀態(tài)的負(fù)載進(jìn)行彈性伸縮,對(duì)pod進(jìn)行縮擴(kuò)容
- customHPA,華為自研,增加了周期性策略,每周、每月或者特別日期進(jìn)行擴(kuò)容
- cluster autoscaler,監(jiān)控調(diào)度失敗的pod,使用最小浪費(fèi)算法,在節(jié)點(diǎn)池中選擇節(jié)點(diǎn)擴(kuò)容
服務(wù)設(shè)計(jì)
- 根據(jù)四層轉(zhuǎn)發(fā),clusterIp、nodePort、Elb(僅此支持公網(wǎng)訪問(wèn))
- 根據(jù)七層轉(zhuǎn)發(fā),elb(可以單獨(dú)為每個(gè)監(jiān)聽(tīng)器配置證書(shū))、nginx,根據(jù)uri轉(zhuǎn)發(fā)
DNS
容器運(yùn)維
運(yùn)維的范圍
- 環(huán)境定義,包括開(kāi)發(fā)、測(cè)試、預(yù)生產(chǎn)、生產(chǎn)環(huán)境
- 部署,將包有效的部署到不同壞境
- 監(jiān)控,能監(jiān)控系統(tǒng)和應(yīng)用
- 告警響應(yīng),告警發(fā)生時(shí),對(duì)告警的響應(yīng)和處理
- 性能調(diào)優(yōu),包括對(duì)各種服務(wù)的調(diào)優(yōu)
- SLA保障,自動(dòng)化環(huán)境定義、自動(dòng)化部署、自動(dòng)化監(jiān)控
aom,應(yīng)用運(yùn)維管理
- prometheus—+grafana
- 注意grafana 數(shù)據(jù)十九華
- cie容器洞察引擎
- 開(kāi)放兼容云原生技術(shù)
- 應(yīng)用為中心
- 數(shù)據(jù)無(wú)縫關(guān)聯(lián)
- 一鍵集群
敏捷版cie架構(gòu)
- 由log-center和log-agent組成
- log-agent負(fù)責(zé)日志收集,轉(zhuǎn)發(fā)
- log-center負(fù)責(zé)日志信息呈現(xiàn)、轉(zhuǎn)存和老化
服務(wù)網(wǎng)格
一種云原生的(彈性、服務(wù)化、去中心的)、應(yīng)用層(關(guān)注應(yīng)用的發(fā)布、監(jiān)控、恢復(fù))網(wǎng)絡(luò)技術(shù)
istio
- 控制平面,istiod
- pliot 服務(wù)發(fā)現(xiàn)和流量管理
- citadel 證書(shū)分發(fā),提供角色控制
- Galley 配置管理
- 數(shù)據(jù)平面
envoy流量代理
- LDS,監(jiān)聽(tīng)器發(fā)現(xiàn)服務(wù)
- RDS,路由發(fā)現(xiàn)服務(wù)
- CDS,集群發(fā)現(xiàn)服務(wù)
- EDS,集群成員發(fā)現(xiàn)服務(wù)
gateway
指定可以進(jìn)入或者離開(kāi)網(wǎng)格的流量
virtualService 流量控制
- 由一組路由規(guī)則組成,用于對(duì)pod進(jìn)行尋址,如果流量命中了某個(gè)路由規(guī)則,就會(huì)發(fā)送到對(duì)應(yīng)的服務(wù)后盾
DestinationRule 路由控制
- 流量到達(dá)后端后的處理規(guī)則,流量先經(jīng)過(guò)VirtualService分發(fā)到目標(biāo)地址,然后調(diào)用DestinationRule來(lái)分發(fā)到該目標(biāo)的流量
serviceEntry
- 將網(wǎng)格的外部服務(wù),添加到服務(wù)表中
服務(wù)網(wǎng)格監(jiān)控
metrics
為通過(guò)它的流量生成指標(biāo)和統(tǒng)計(jì),從而監(jiān)控流量大小以及對(duì)流量就行預(yù)測(cè)
accessLog
會(huì)記錄完整的日志,請(qǐng)求源、請(qǐng)求目標(biāo)、請(qǐng)求元數(shù)據(jù),用于觀測(cè)和審計(jì)
Distributed Traces 分布式追蹤
日志比較孤立,用服務(wù)追蹤來(lái)查看前后因果,非零侵入,需要進(jìn)行調(diào)用鏈埋點(diǎn)
ASM(應(yīng)用服務(wù)網(wǎng)格)
- 基于istio進(jìn)行了功能的增強(qiáng)
- 流量,支持復(fù)雜入口流量定義
- 可靠性、可維護(hù)性,提供托管控制面板,減少運(yùn)維負(fù)擔(dān)
- 協(xié)議擴(kuò)展,支持dubbo和spring cloud
- 混合部署
- 可觀察性
- 灰度發(fā)布
- 跨集群治理
- 大規(guī)模治理
灰度發(fā)布
- 基于請(qǐng)求內(nèi)容灰度規(guī)則
- 基于流量比例灰度
- 金絲雀
- 藍(lán)綠
流量治理
熔斷機(jī)制
- 當(dāng)某個(gè)后端服務(wù)連續(xù)錯(cuò)誤達(dá)到某個(gè)閾值時(shí),進(jìn)行熔斷,一段時(shí)間后重新加入,測(cè)試是否可用,如果仍不可用,增加不可用時(shí)間,再進(jìn)行驅(qū)逐
故障注入
再系統(tǒng)中加入故障,從而評(píng)估系統(tǒng)的穩(wěn)定性等,無(wú)需侵入式的修改代碼來(lái)實(shí)現(xiàn)
- 時(shí)延故障
- 中斷故障
服務(wù)監(jiān)控
asm觀察微服務(wù)調(diào)用的請(qǐng)求總數(shù),錯(cuò)誤次數(shù)、請(qǐng)求時(shí)延、最大時(shí)延
asm 提供非侵入式的微服務(wù)調(diào)用鏈監(jiān)控
容器多集群管理
MCP
華為基于karmada開(kāi)發(fā)的容器多云和混合云解決方案
karmada架構(gòu)
- karmada api-server 包含了k8s的基本api還有擴(kuò)展的api
- controller 來(lái)根據(jù)api創(chuàng)建對(duì)象
- karmada schedler 實(shí)現(xiàn)應(yīng)用在多個(gè)容器里的調(diào)度
- 支持集中式管理,公有云、私有云
- 集群隔離
- 支持分布式和集中式的集群同步
- member集群,由一個(gè)或者多個(gè)集群組成
- 三個(gè)重要對(duì)象
- resouse template 創(chuàng)建資源模板
- propagation policy 多云調(diào)度策略,分發(fā)策略 分發(fā)給那個(gè)后端的member,根據(jù)resourceSelectors進(jìn)行調(diào)度選擇
- override policy 多云 差異化配置,設(shè)置不同的環(huán)境變量、不同的鏡像倉(cāng)庫(kù)等
apiVersion: types.kubefed.io/v1
kind: federatedDeployment
metadata:
name: test-deployment
namespace: test-namespace
spec:
template:
metadata:
labels:
app: nginx
spec:
replicas:
selector:
placement:
clusters:
- name: member1
- name: member2
overrides:
- clusterName: member2
clusterOverrides:
- path: "/spec/replicas"
value: 2
mcp介紹
- 天然多云
- 多云調(diào)度
- 多云治理
- 多云運(yùn)維
- 多云安全
- 業(yè)務(wù)流量分擔(dān)
- 數(shù)據(jù)與業(yè)務(wù)分離
- 開(kāi)發(fā)和生產(chǎn)分離
- 計(jì)算資源合理調(diào)配
- 業(yè)務(wù)多活容災(zāi)
curl -fsSL get.docker.com -o get-docker.sh