一些k8s的理論知識(shí)

k8s架構(gòu)

  1. 聲明式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í)不用指定

分層

  1. 內(nèi)核層
  2. 應(yīng)用層,可以替換成第三方的
  3. 治理層
  4. 接口層
  5. 生態(tài)系統(tǒng)層

核心組件

  1. api server
  2. etcd
  3. scheduler
  4. controller manager
  5. cloud manager 各個(gè)云服務(wù)商自己加入
  6. kubelet
  7. kube proxy
  8. containerd 容器

污點(diǎn)和容忍度

  1. 先在pod.spec中定義容忍度等,讓pod去找合適的node,然后使用污點(diǎn)去配置,容忍度是指,可以容忍某些污點(diǎn)
    kubectl taint nodes node1 key1=value1:noschedule 增加污點(diǎn),后面加個(gè)-為移除污點(diǎn)

pod

pod生命周期

  1. pod的status字段中podStatus.phase 表明了pod的聲明周期
  2. 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)配置

  1. image,指定鏡像
  2. imagePullSecret,如果從私有倉(cāng)庫(kù)拉取鏡像,這個(gè)字段設(shè)置倉(cāng)庫(kù)訪問(wèn)憑證
  3. imagePullPolicy 鏡像拉去策略 ifNotPresent 優(yōu)先本地 Always,從鏡像庫(kù)拉去,Never 僅用本地

pod接收外部?jī)?nèi)容

  1. 使用env。配置鍵值對(duì)
  2. 使用env.ValueFrom.SecretKeyRef 分別定義key和value
  3. 使用volme掛載

pod探針

探針診斷方式

  1. ExecAction, 在容器內(nèi)執(zhí)行命令,看是否執(zhí)行成功
  2. TCPSocketAction 查看ip:port是否通
  3. HTTPGetAction,發(fā)送Get請(qǐng)求,查看返回狀態(tài)碼

探針的兩種類型

  1. 存活探針,是否存活,livenessProbe
  2. 就緒探針,探測(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ù)載

  1. replicaSet副本控制器,用于確保pod的副本數(shù)量,來(lái)實(shí)現(xiàn)所擴(kuò)容
  2. deployment通過(guò)控制replicaSet實(shí)現(xiàn)水平縮擴(kuò)容、滾動(dòng)更新,而不是直接操作pod
    滾動(dòng)更新
    允許使用新的實(shí)例,逐步更新,不停機(jī)進(jìn)行Deployment更新
  3. 可以實(shí)現(xiàn)應(yīng)用程序從一個(gè)環(huán)境提升至另一個(gè)
  4. 可以進(jìn)行版本回滾
  5. 持續(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)建

  1. 服務(wù)名和statefulSet中定義的需要一致
  2. 選擇器指定正確的Pod標(biāo)簽
  3. 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)用配置

  1. 可變配置信息,不能寫(xiě)入鏡像,防止每次修改重啟
  2. 敏感信息存儲(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等的增刪改查

  1. api。提供restful api
  2. 訪問(wèn)控制層,主要提供訪問(wèn)控制、鑒權(quán)、對(duì)資源進(jìn)行控制,判斷能否訪問(wèn)對(duì)象
  3. Registry,存放各種對(duì)象
  4. etcd,持久化存儲(chǔ)數(shù)據(jù)
etcd

etcd,可以以集群方式部署

  1. 其有一個(gè)leader節(jié)點(diǎn),處理寫(xiě)請(qǐng)求,保存到日志,同步給其他節(jié)點(diǎn),半數(shù)節(jié)點(diǎn)成功,主節(jié)點(diǎn)則提交這個(gè)事務(wù)
etcd組成
  1. http server,客戶端api和其他節(jié)點(diǎn)同步請(qǐng)求和心跳檢測(cè)請(qǐng)求
  2. Store,處理etcd的各種事務(wù),是大部分api功能的實(shí)現(xiàn)
  3. raft 節(jié)點(diǎn)選舉和數(shù)據(jù)同步
  4. wal 預(yù)寫(xiě)式日志,用于數(shù)據(jù)持久化,記錄了所有事務(wù)指令
  5. 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類型

  1. ClusterIp, 用于集群內(nèi)部訪問(wèn),一個(gè)pod訪問(wèn)一個(gè)集群內(nèi)相同功能的pod
  2. NodePort,集群外部訪問(wèn),通過(guò)節(jié)點(diǎn)上的port訪問(wèn)
  3. LoadBalancer,用于外部訪問(wèn),外部訪問(wèn)loadBalancer,loadbalancer轉(zhuǎn)發(fā)給NodePort,外部只需要訪問(wèn)LB
  4. 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

  1. 集群管理
  2. 彈性伸縮
  3. 持久卷存儲(chǔ)
  4. 容器網(wǎng)絡(luò)
  5. 親和、反親和調(diào)度、
  6. 工作負(fù)載
  7. 節(jié)點(diǎn)、節(jié)點(diǎn)池管理

cce敏捷版

提供高性能、可擴(kuò)展。融合了很多高級(jí)功能。mcp多云管理,可以將華為云產(chǎn)品,統(tǒng)一管理

  1. 適用于峰值流量的智能分擔(dān)
  2. 跨云應(yīng)用自動(dòng)容災(zāi)
  3. 業(yè)務(wù)地域策略運(yùn)營(yíng)

mcp 云原生多云平臺(tái)

  1. 混合云統(tǒng)一管理平臺(tái)

osc,云原生服務(wù)中心

  1. 提供云原生服務(wù)的全生命周期管理

cie 云原生應(yīng)用運(yùn)維工具

  1. 可視化,一鍵故障診斷

cci云容器實(shí)例

  1. 使用kata 方案
  2. 用戶值需要申請(qǐng)資源,不需要關(guān)心底層實(shí)現(xiàn)
  3. 智能調(diào)度(volcano)、按需計(jì)費(fèi)、安全容器(運(yùn)行在為虛擬機(jī)上,使用kata技術(shù)實(shí)現(xiàn),實(shí)現(xiàn)虛擬機(jī)級(jí)安全隔離)、極速擴(kuò)容(100ms內(nèi))四大特性
  4. 主要用于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)用容器改造

容器改造步驟

  1. 容器選擇
  2. 準(zhǔn)備應(yīng)用運(yùn)行環(huán)境
  3. 編寫(xiě)開(kāi)機(jī)腳本
  4. 編寫(xiě)dockerfile
  5. 制作并上傳鏡像
  6. 創(chuàng)建工作負(fù)載

cce集群選型

  1. cce
  2. cce-turbo 高性能的,大規(guī)模的,網(wǎng)絡(luò)隔離、安全性高

高可用選型

  1. 多主節(jié)點(diǎn)跨az(區(qū)域)部署
  2. 節(jié)點(diǎn)高可用,node跨az部署
  3. 應(yīng)用高可用

容器存儲(chǔ)

  1. devicemapper,有一部分空間是容器共享空間,刪除文件后不能立馬回收空間,塊存儲(chǔ),進(jìn)行修改,只會(huì)修改對(duì)應(yīng)快,適合文件大,修改少的場(chǎng)景
  2. overlayfs,文件存儲(chǔ),對(duì)文件進(jìn)行修改,會(huì)修改整個(gè)文件,大并發(fā),少io適合

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

  1. 一組有相同功能的節(jié)點(diǎn)集合,會(huì)統(tǒng)籌管理節(jié)點(diǎn),修改配置會(huì)影響所有節(jié)點(diǎn)

網(wǎng)絡(luò)選型

  1. 容器隧道網(wǎng)絡(luò),基于vxlan隧道封裝,最大支持2000節(jié)點(diǎn),
  2. 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路由表
  3. 云原生網(wǎng)絡(luò)2.0

swr 鏡像倉(cāng)庫(kù)

  1. 鏡像掃描,可以掃描鏡像中是否包含惡意漏洞等
  2. 跨區(qū)鏡像同步,基于kafka,兩個(gè)地區(qū)的鏡像倉(cāng)庫(kù)可以同步,包含自動(dòng)、手動(dòng)同步
  3. 觸發(fā)器、鏡像老化,上傳鏡像自動(dòng)觸發(fā)版本更新等操作,老版本鏡像自動(dòng)刪除等,自動(dòng)cicd等

dockerfile

  1. 不要在docker file中升級(jí)軟件
  2. 一個(gè)容器只運(yùn)行一個(gè)進(jìn)程,不要mysql和PHP等一起運(yùn)行
  3. 使用exec from格式的cmd和entrypoint
  4. 變化頻率相同的放在同一個(gè)run中
  5. 使用標(biāo)簽,具體到使用的基礎(chǔ)鏡像
  6. 刪除過(guò)程文件,下載的apt包等
  7. 指定workdir
  8. 使用copy代替add

工作負(fù)載設(shè)計(jì)

  1. 需要對(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)

容器生命周期

  1. poststart 開(kāi)始接收請(qǐng)求
  2. perstop 停止之前

健康檢查

  1. livenessProbe 檢測(cè)容器是否存活,如果不存活了,根據(jù)策略重啟pod
  2. readinessProbe,服務(wù)是否可用檢查,服務(wù)可用才發(fā)送請(qǐng)求道這個(gè)endpoint

靜態(tài)動(dòng)態(tài)存儲(chǔ)

  1. 靜態(tài) pv對(duì)應(yīng)一個(gè)pvc
  2. 動(dòng)態(tài)pvc對(duì)應(yīng)storage class,storageclass配置了怎么選擇pv kubectl get sc

調(diào)度策略

  1. nodeName和NodeSelector(使用調(diào)度器選擇)
  2. 親和、反親和調(diào)度,節(jié)點(diǎn)和pod親和、反親和

伸縮策略

  1. HPA 根據(jù)cpu、內(nèi)存利用率,對(duì)無(wú)狀態(tài)的負(fù)載進(jìn)行彈性伸縮,對(duì)pod進(jìn)行縮擴(kuò)容
  2. customHPA,華為自研,增加了周期性策略,每周、每月或者特別日期進(jìn)行擴(kuò)容
  3. cluster autoscaler,監(jiān)控調(diào)度失敗的pod,使用最小浪費(fèi)算法,在節(jié)點(diǎn)池中選擇節(jié)點(diǎn)擴(kuò)容

服務(wù)設(shè)計(jì)

  1. 根據(jù)四層轉(zhuǎn)發(fā),clusterIp、nodePort、Elb(僅此支持公網(wǎng)訪問(wèn))
  2. 根據(jù)七層轉(zhuǎn)發(fā),elb(可以單獨(dú)為每個(gè)監(jiān)聽(tīng)器配置證書(shū))、nginx,根據(jù)uri轉(zhuǎn)發(fā)

DNS

容器運(yùn)維

運(yùn)維的范圍

  1. 環(huán)境定義,包括開(kāi)發(fā)、測(cè)試、預(yù)生產(chǎn)、生產(chǎn)環(huán)境
  2. 部署,將包有效的部署到不同壞境
  3. 監(jiān)控,能監(jiān)控系統(tǒng)和應(yīng)用
  4. 告警響應(yīng),告警發(fā)生時(shí),對(duì)告警的響應(yīng)和處理
  5. 性能調(diào)優(yōu),包括對(duì)各種服務(wù)的調(diào)優(yōu)
  6. SLA保障,自動(dòng)化環(huán)境定義、自動(dòng)化部署、自動(dòng)化監(jiān)控

aom,應(yīng)用運(yùn)維管理

  1. prometheus—+grafana
  2. 注意grafana 數(shù)據(jù)十九華
  3. cie容器洞察引擎
    • 開(kāi)放兼容云原生技術(shù)
    • 應(yīng)用為中心
    • 數(shù)據(jù)無(wú)縫關(guān)聯(lián)
    • 一鍵集群

敏捷版cie架構(gòu)

  1. 由log-center和log-agent組成
  2. log-agent負(fù)責(zé)日志收集,轉(zhuǎn)發(fā)
  3. 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

  1. 控制平面,istiod
    • pliot 服務(wù)發(fā)現(xiàn)和流量管理
    • citadel 證書(shū)分發(fā),提供角色控制
    • Galley 配置管理
  2. 數(shù)據(jù)平面

envoy流量代理

  1. LDS,監(jiān)聽(tīng)器發(fā)現(xiàn)服務(wù)
  2. RDS,路由發(fā)現(xiàn)服務(wù)
  3. CDS,集群發(fā)現(xiàn)服務(wù)
  4. EDS,集群成員發(fā)現(xiàn)服務(wù)

gateway

指定可以進(jìn)入或者離開(kāi)網(wǎng)格的流量

virtualService 流量控制

  1. 由一組路由規(guī)則組成,用于對(duì)pod進(jìn)行尋址,如果流量命中了某個(gè)路由規(guī)則,就會(huì)發(fā)送到對(duì)應(yīng)的服務(wù)后盾

DestinationRule 路由控制

  1. 流量到達(dá)后端后的處理規(guī)則,流量先經(jīng)過(guò)VirtualService分發(fā)到目標(biāo)地址,然后調(diào)用DestinationRule來(lái)分發(fā)到該目標(biāo)的流量

serviceEntry

  1. 將網(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)格)

  1. 基于istio進(jìn)行了功能的增強(qiáng)
    • 流量,支持復(fù)雜入口流量定義
    • 可靠性、可維護(hù)性,提供托管控制面板,減少運(yùn)維負(fù)擔(dān)
    • 協(xié)議擴(kuò)展,支持dubbo和spring cloud
    • 混合部署
    • 可觀察性
    • 灰度發(fā)布
    • 跨集群治理
    • 大規(guī)模治理

灰度發(fā)布

  1. 基于請(qǐng)求內(nèi)容灰度規(guī)則
  2. 基于流量比例灰度
  3. 金絲雀
  4. 藍(lán)綠

流量治理

熔斷機(jī)制

  1. 當(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)

  1. 時(shí)延故障
  2. 中斷故障

服務(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)

  1. karmada api-server 包含了k8s的基本api還有擴(kuò)展的api
  2. controller 來(lái)根據(jù)api創(chuàng)建對(duì)象
  3. karmada schedler 實(shí)現(xiàn)應(yīng)用在多個(gè)容器里的調(diào)度
  4. 支持集中式管理,公有云、私有云
  5. 集群隔離
  6. 支持分布式和集中式的集群同步
  7. member集群,由一個(gè)或者多個(gè)集群組成
  8. 三個(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介紹

  1. 天然多云
  2. 多云調(diào)度
  3. 多云治理
  4. 多云運(yùn)維
  5. 多云安全
  6. 業(yè)務(wù)流量分擔(dān)
  7. 數(shù)據(jù)與業(yè)務(wù)分離
  8. 開(kāi)發(fā)和生產(chǎn)分離
  9. 計(jì)算資源合理調(diào)配
  10. 業(yè)務(wù)多活容災(zāi)

curl -fsSL get.docker.com -o get-docker.sh

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

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

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