日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户数从 0 到亿,我的 K8s 踩坑血泪史

發(fā)布時間:2025/3/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户数从 0 到亿,我的 K8s 踩坑血泪史 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者 |?平名 阿里服務(wù)端開發(fā)技術(shù)專家

導(dǎo)讀:容器服務(wù) Kubernetes 是目前炙手可熱的云原生基礎(chǔ)設(shè)施,作者過去一年上線了一個用戶數(shù)極速增長的應(yīng)用:該應(yīng)用一個月內(nèi)日活用戶從零至四千萬,用戶數(shù)從零到一億的裂變式增長,充分享受了容器服務(wù)快速簡便的擴(kuò)容操作和高可用特性。作者使用容器服務(wù) Kubernetes 集群將公司內(nèi)系統(tǒng)完全上云 1 年多,本篇文章記錄了其中的踩坑與優(yōu)化記錄。

關(guān)注“阿里巴巴云原生”公眾號,回復(fù)關(guān)鍵詞“資料”,即可獲得 2019 全年meetup 活動 PPT 合集及 K8s 最全知識圖譜。

創(chuàng)建集群

創(chuàng)建集群時,做好規(guī)劃,選擇優(yōu)化好的集群配置,可以大大減少后期運(yùn)維工作,其中部分集群的配置在建立后再也沒法修改或者修改極其麻煩。

集群規(guī)劃

  • 網(wǎng)絡(luò)規(guī)劃:
    • 網(wǎng)絡(luò)類型: Flannel、Terway

? ? ? ? ? ? Terway 是阿里云容器服務(wù)自研的網(wǎng)絡(luò)插件,功能上完全兼容 Flannel,如果保守,還是使用 Flannel??

  • Pod 網(wǎng)絡(luò) CIDR

默認(rèn) 16 的大網(wǎng)段,有效的網(wǎng)段或者其子網(wǎng) 10.0.0.0/8,172.16-31.0.0/12-16,192.168.0.0/16

  • Service CIDR
    • 默認(rèn) 20 的網(wǎng)段,可選:10.0.0.0/16-24,172.16-31.0.0/16-24,192.168.0.0/16-24
    • 網(wǎng)段不能沖突重復(fù),建立后沒法修改;
    • 多個區(qū)域的多個交換機(jī)。
      • 公網(wǎng)訪問 ApiServer
  • 對于線上等安全要求高的集群,可以選擇不暴露 apiserver, 只有私網(wǎng) SLB, 但是這樣沒法使用云效發(fā)布;
  • 日常預(yù)發(fā)等集群,可以暴露公網(wǎng) SLB 到 apiserver, 集群建立后立即為 slb 建立訪問控制,限制 slb 只能云效訪問;

注: K8s 每次安全漏洞幾乎都與 ApiServer 有關(guān),對于線上 K8s 集群,要及時升級補(bǔ)丁,或者不開放公網(wǎng) apiserver,使用嚴(yán)格的安全組和訪問控制。

  • 安全組
    • 設(shè)置安全組限定訪問范圍,為 master 與 worker 機(jī)器使用。

?

  • Master 機(jī)器規(guī)劃

? ?為了高可用,一般使用 3 節(jié)點,Master 選擇規(guī)則如下:

節(jié)點數(shù)?master 規(guī)格
1-5個4C8G
6-20個節(jié)點4C16G
21-100個節(jié)點8C32G
100-200個節(jié)點16C64G

master 機(jī)器的存儲建議高性能的 50-100G SSD,因為會運(yùn)行 ETCD,操作系統(tǒng)占用不超過 8G。

  • Worker 機(jī)器規(guī)劃
    • 阿里云首推神龍機(jī)器,沒有神龍機(jī)器的區(qū)域,選用高配 ECS,配置規(guī)格根據(jù)部署的 POD 規(guī)格乘以一定倍數(shù),比如 Java 應(yīng)用 pod 一般選擇 4C8G,ECS 則購買 32C64G 或者 64C128G 為好,設(shè)置部署的時候為 pod 設(shè)置固定的 request/limit;
    • 我們選用的機(jī)器配置:
      • 32C64G ECS
      • 存儲。系統(tǒng)盤:100G SSD,? 數(shù)據(jù)盤:400G 高效云盤
      • 操作系統(tǒng):centos 7.4 64 位

集群建立與配置

建立集群時設(shè)置:

  • 通過控制臺建立集群,阿里云容器服務(wù)提供的非常簡易的一鍵部署集群功能,通過向?qū)瓿?K8S 集群的建立;
  • 按照以上規(guī)劃設(shè)置 master,worker 節(jié)點,掛載 /var/lib/docker 到數(shù)據(jù)盤;
  • 設(shè)置合理的 Pod 網(wǎng)絡(luò) CIDR, Service CIDR ip 網(wǎng)段;
  • 設(shè)置合理的安全策略,是否暴露 apiserver(需要直接云效發(fā)布的,需要開放公網(wǎng)暴露,并做嚴(yán)格的訪問控制);
  • ingress 選擇安全,可以使用內(nèi)網(wǎng),如果需要公網(wǎng),可以在控制臺很方便建立,同時做好訪問控制;
  • kube-proxy 模式,因為 iptables 模式在更新一條規(guī)則時把 iptables 鎖住引發(fā)的性能問題,建議使用 IPVS 模式;
  • 節(jié)點 POD 數(shù)量,默認(rèn) 128 太大,一個節(jié)點不可能部署這么多,建議改為 64;
  • 節(jié)點服務(wù)端口訪問 (NodePort,SLB),可以適當(dāng)擴(kuò)大,默認(rèn)的也一般足夠用。

集群配置修改:

  • 集群擴(kuò)容,添加已有節(jié)點(節(jié)點配置參考上文,掛載數(shù)據(jù)盤使用 /var/lib/docker)? ? ?
  • Master 機(jī)器升配:
  • worker 節(jié)點變配或者移除:
    • kubectl drain --ignore-daemonsets {node.name}
    • kubectl delete node {node.name}
    • ECS 升配變配
    • 添加已有節(jié)點到集群
  • 命名空間:?
    • 按照應(yīng)用分組建立 namespace,對于資源占用厲害需要限制的應(yīng)用分組,設(shè)置該 NameSpace 的資源配額與限制;
  • 授權(quán):
    • 子賬號如何給其他子賬號進(jìn)行 RBAC 授權(quán)
    • 通過堡壘機(jī)按應(yīng)用人員設(shè)置權(quán)限

部署設(shè)置

無狀態(tài)部署

使用無狀態(tài)部署 Deployment,參考這篇文章實現(xiàn)分批發(fā)布。優(yōu)化設(shè)置模板:?

apiVersion: apps/v1beta2 kind: Deployment metadata:annotations:deployment.kubernetes.io/revision: '34' # 標(biāo)簽,映射 servicelabels:app: {app_name}-aonename: {app_name}-aone-1namespace: {app_name} spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: {app_name}-aone # 批量重啟更新策略 strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: {app_name}-aonespec:containers:# 環(huán)境變量增加時區(qū)- env:- name: TZvalue: Asia/Shanghai- image: >-registry-vpc.cn-north-2-gov-1.aliyuncs.com/{namespace}/{app_name}:20190820190005imagePullPolicy: Always# 啟動前執(zhí)行優(yōu)雅下線摘除 服務(wù)注冊lifecycle:preStop:exec:command:- sudo- '-u'- admin- /home/{user_name}/{app_name}/bin/appctl.sh- {app_name}- stop# 存活檢查,強(qiáng)烈建議設(shè)置 livenessProbe:failureThreshold: 10initialDelaySeconds: 30periodSeconds: 10successThreshold: 1tcpSocket:port: 5900timeoutSeconds: 1name: {app_name}-aone# 就緒檢查,強(qiáng)烈建議設(shè)置readinessProbe:failureThreshold: 10initialDelaySeconds: 30periodSeconds: 10successThreshold: 1tcpSocket:port: 5900timeoutSeconds: 1# 資源限制,這個一定要合理設(shè)置 resources:limits:cpu: '4'memory: 8Girequests:cpu: '4'memory: 8GiterminationMessagePath: /dev/termination-logterminationMessagePolicy: File# 日志存放目錄,映射到節(jié)點的/var/lib/docker/logs 數(shù)據(jù)盤,應(yīng)用日志目錄設(shè)置到/home/{user_name}/logs 下volumeMounts:- mountPath: /home/{user_name}/logsname: volume-1553755418538dnsPolicy: ClusterFirst## 私有鏡像倉庫的密鑰,從保密字段獲取imagePullSecrets:- name: {app_name}-987restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30# 日志存放目錄,映射到節(jié)點的/var/lib/docker/logs 數(shù)據(jù)盤volumes:- hostPath:path: /var/lib/docker/logs/{app_name}type: ''name: volume-1553755418538

?

服務(wù)設(shè)置

因為容器服務(wù)的 Cloud Controller Manager 會同步刪除 service 建立關(guān)聯(lián)的 SLB,為了防止 service 配置修改誤刪除 slb 故障,并導(dǎo)致域名、安全等配置需要修改的坑,強(qiáng)烈建議 service 與 slb 解耦,service 采用 NodePort 的方式,slb 另外建立后端服務(wù)器指向集群節(jié)點,如果需要透傳真實 IP,并考慮負(fù)載均衡,需要遵守一定的配置規(guī)則和方法,參考這個文章。

NodePort:

apiVersion: v1 kind: Service metadata:name: {app_name}namespace: {namespaces} spec:clusterIP: 10.1.50.65 ## 策略關(guān)系到是否透傳真實 IPexternalTrafficPolicy: Clusterports:- name: {app_name}-80-7001nodePort: 32653port: 80protocol: TCPtargetPort: 7001- name: {app_name}-5908-5908nodePort: 30835port: 5108protocol: TCPtargetPort: 5108selector:app: {app_name}sessionAffinity: Nonetype: NodePort status:loadBalancer: {}

然后在負(fù)載均衡管理頁面,選擇后端服務(wù)器指向集群的 worker 機(jī)器,設(shè)置端口為以上服務(wù)的端口:32653,完成配置,這樣在集群 service 修改或者刪除重建的時候,slb 不會被集群的 CCM 刪除,不會涉及到域名,安全等配置修改。同時,可以設(shè)置一些策略,需要升級修改服務(wù)配置時,分批切流等。

總結(jié)

阿里云容器服務(wù)控制臺雖然是云上新產(chǎn)品,提供了極其簡單的一鍵部署功能,以及簡便的控制臺管理。過去一年中,筆者一路見識阿里云容器服務(wù)控制臺從簡陋向強(qiáng)大的轉(zhuǎn)變過程,雖然多次踩坑,但阿里云容器服務(wù)同學(xué)認(rèn)真負(fù)責(zé)和極好的服務(wù)態(tài)度讓人佩服。

容器服務(wù)管理控制臺還需要更多的考慮實際運(yùn)維需求,并緊密結(jié)合已有的云產(chǎn)品,比如云效、EDAS、云監(jiān)控、日志服務(wù)等,以應(yīng)用為單位,提供更好服務(wù)。


掃描下方二維碼添加小助手,與 8000 位云原生愛好者討論技術(shù)趨勢,實戰(zhàn)進(jìn)階!
進(jìn)群暗號:公司-崗位-城市
**

總結(jié)

以上是生活随笔為你收集整理的用户数从 0 到亿,我的 K8s 踩坑血泪史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。