16個核心概念帶你入門 Kubernetes

基于容器的應用部署、維護和滾動升級 負載均衡和服務發(fā)現(xiàn) 跨機器和跨地區(qū)的集群調度 自動伸縮 無狀態(tài)服務和有狀態(tài)服務 廣泛的Volume支持 插件機制保證擴展性
1、Pod
包含多個共享IPC、Network和UTC namespace的容器,可直接通過localhost通信 所有Pod內容器都可以訪問共享的Volume,可以訪問共享數(shù)據(jù) 優(yōu)雅終止:Pod刪除的時候先給其內的進程發(fā)送SIGTERM,等待一段時間(grace period)后才強制停止依然還在運行的進程 特權容器(通過SecurityContext配置)具有改變系統(tǒng)配置的權限(在網(wǎng)絡插件中大量應用) 支持三種重啟策略(restartPolicy),分別是:Always、OnFailure、Never 支持三種鏡像拉取策略(imagePullPolicy),分別是:Always、Never、IfNotPresent 資源限制,Kubernetes通過CGroup限制容器的CPU以及內存等資源,可以設置request以及l(fā)imit值 健康檢查,提供兩種健康檢查探針,分別是livenessProbe和redinessProbe,前者用于探測容器是否存活,如果探測失敗,則根據(jù)重啟策略進行重啟操作,后者用于檢查容器狀態(tài)是否正常,如果檢查容器狀態(tài)不正常,則請求不會到達該Pod Init container在所有容器運行之前執(zhí)行,常用來初始化配置 容器生命周期鉤子函數(shù),用于監(jiān)聽容器生命周期的特定事件,并在事件發(fā)生時執(zhí)行已注冊的回調函數(shù),支持兩種鉤子函數(shù):postStart和preStop,前者是在容器啟動后執(zhí)行,后者是在容器停止前執(zhí)行
2、Namespace
kubectlgetnamespace, 查詢所有namespace kubectl createnamespacens-name,創(chuàng)建namespace kubectldeletenamespacens-name, 刪除namespace
刪除一個namespace會自動刪除所有屬于該namespace的資源。 default 和 kube-system 命名空間不可刪除。 PersistentVolumes是不屬于任何namespace的,但PersistentVolumeClaim是屬于某個特定namespace的。 Events是否屬于namespace取決于產生events的對象。
3、Node
kubectlgetnodes,查詢所有node kubectl cordon $nodename, 將node標志為不可調度 kubectl uncordon $nodename, 將node標志為可調度
NoSchedule:表示k8s將不會將Pod調度到具有該污點的Node上 PreferNoSchedule:表示k8s將盡量避免將Pod調度到具有該污點的Node上 NoExecute:表示k8s將不會將Pod調度到具有該污點的Node上,同時會將Node上已經存在的Pod驅逐出去
kubectl taint node node0 key1=value1:NoShedule,為node0設置不可調度污點 kubectl taint node node0 key-,將node0上key值為key1的污點移除 kubectl taint node node1 node-role.kubernetes.io/master=:NoSchedule,為kube-master節(jié)點設置不可調度污點 kubectl taint node node1 node-role.kubernetes.io/master=PreferNoSchedule,為kube-master節(jié)點設置盡量不可調度污點
4、Service
ClusterIP: 默認類型,自動分配一個僅集群內部可以訪問的虛擬IP NodePort: 在ClusterIP基礎上為Service在每臺機器上綁定一個端口,這樣就可以通過?NodeIP:NodePort?來訪問該服務 LoadBalancer: 在NodePort的基礎上,借助cloud provider創(chuàng)建一個外部的負載均衡器,并將請求轉發(fā)到 NodeIP:NodePort ExternalName: 將服務通過DNS CNAME記錄方式轉發(fā)到指定的域名
5、Volume 存儲卷
容器掛掉后Kubelet再次重啟容器時,Volume的數(shù)據(jù)依然還在 Pod刪除時,Volume才會清理。數(shù)據(jù)是否丟失取決于具體的Volume類型,比如emptyDir的數(shù)據(jù)會丟失,而PV的數(shù)據(jù)則不會丟
emptyDir:Pod存在,emptyDir就會存在,容器掛掉不會引起emptyDir目錄下的數(shù)據(jù)丟失,但是pod被刪除或者遷移,emptyDir也會被刪除 hostPath:hostPath允許掛載Node上的文件系統(tǒng)到Pod里面去 NFS(Network File System):網(wǎng)絡文件系統(tǒng),Kubernetes中通過簡單地配置就可以掛載NFS到Pod中,而NFS中的數(shù)據(jù)是可以永久保存的,同時NFS支持同時寫操作。 glusterfs:同NFS一樣是一種網(wǎng)絡文件系統(tǒng),Kubernetes可以將glusterfs掛載到Pod中,并進行永久保存 cephfs:一種分布式網(wǎng)絡文件系統(tǒng),可以掛載到Pod中,并進行永久保存 subpath:Pod的多個容器使用同一個Volume時,會經常用到 secret:密鑰管理,可以將敏感信息進行加密之后保存并掛載到Pod中 persistentVolumeClaim:用于將持久化存儲(PersistentVolume)掛載到Pod中 ...
6、PersistentVolume(PV) 持久化存儲卷
ReadWriteOnce(RWO):是最基本的方式,可讀可寫,但只支持被單個Pod掛載。 ReadOnlyMany(ROX):可以以只讀的方式被多個Pod掛載。 ReadWriteMany(RWX):這種存儲可以以讀寫的方式被多個Pod共享。
Retain,不清理保留Volume(需要手動清理) Recycle,刪除數(shù)據(jù),即 rm -rf /thevolume/* (只有NFS和HostPath支持) Delete,刪除存儲資源
7、Deployment 無狀態(tài)應用
定義Deployment來創(chuàng)建Pod和ReplicaSet 滾動升級和回滾應用 擴容和縮容 暫停和繼續(xù)Deployment
kubectl run www--image=10.0.0.183:5000/hanker/www:0.0.1--port=8080?生成一個Deployment對象 kubectlgetdeployment--all-namespaces?查找Deployment kubectl describe deployment www?查看某個Deployment kubectl edit deployment www?編輯Deployment定義 kubectldeletedeployment www?刪除某Deployment kubectl scale deployment/www--replicas=2?擴縮容操作,即修改Deployment下的Pod實例個數(shù) kubectlsetimage deployment/nginx-deployment nginx=nginx:1.9.1更新鏡像 kubectl rollout undo deployment/nginx-deployment?回滾操作 kubectl rollout status deployment/nginx-deployment?查看回滾進度 kubectl autoscale deployment nginx-deployment--min=10--max=15--cpu-percent=80?啟用水平伸縮(HPA - horizontal pod autoscaling),設置最小、最大實例數(shù)量以及目標cpu使用率 kubectl rollout pause deployment/nginx-deployment?暫停更新Deployment kubectl rollout resume deploy nginx?恢復更新Deployment
RollingUpdate 滾動升級,可以保證應用在升級期間,對外正常提供服務。 Recreate 重建策略,在創(chuàng)建出新的Pod之前會先殺掉所有已存在的Pod。
使用Deployment來創(chuàng)建ReplicaSet。ReplicaSet在后臺創(chuàng)建pod,檢查啟動狀態(tài),看它是成功還是失敗。 當執(zhí)行更新操作時,會創(chuàng)建一個新的ReplicaSet,Deployment會按照控制的速率將pod從舊的ReplicaSet移 動到新的ReplicaSet中
8、StatefulSet 有狀態(tài)應用
穩(wěn)定的持久化存儲,即Pod重新調度后還是能訪問到相同的持久化數(shù)據(jù),基于PVC來實現(xiàn) 穩(wěn)定的網(wǎng)絡標志,即Pod重新調度后其PodName和HostName不變,基于Headless Service(即沒有Cluster IP的Service)來實現(xiàn) 有序部署,有序擴展,即Pod是有順序的,在部署或者擴展的時候要依據(jù)定義的順序依次進行操作(即從0到N-1,在下一個Pod運行之前所有之前的Pod必須都是Running和Ready狀態(tài)),基于init containers來實現(xiàn) 有序收縮,有序刪除(即從N-1到0)
OnDelete:當 .spec.template更新時,并不立即刪除舊的Pod,而是等待用戶手動刪除這些舊Pod后自動創(chuàng)建新Pod。這是默認的更新策略,兼容v1.6版本的行為 RollingUpdate:當 .spec.template 更新時,自動刪除舊的Pod并創(chuàng)建新Pod替換。在更新時這些Pod是按逆序的方式進行,依次刪除、創(chuàng)建并等待Pod變成Ready狀態(tài)才進行下一個Pod的更新。
9、DaemonSet 守護進程集
日志收集,比如fluentd,logstash等 系統(tǒng)監(jiān)控,比如Prometheus Node Exporter,collectd等 系統(tǒng)程序,比如kube-proxy, kube-dns, glusterd, ceph,ingress-controller等
nodeSelector:只調度到匹配指定label的Node上 nodeAffinity:功能更豐富的Node選擇器,比如支持集合操作 podAffinity:調度到滿足條件的Pod所在的Node上
OnDelete: 默認策略,更新模板后,只有手動刪除了舊的Pod后才會創(chuàng)建新的Pod RollingUpdate: 更新DaemonSet模版后,自動刪除舊的Pod并創(chuàng)建新的Pod
10、Ingress
Service:使用Service提供集群內部的負載均衡,Kube-proxy負責將service請求負載均衡到后端的Pod中 Ingress Controller:使用Ingress提供集群外部的負載均衡
nginx traefik Kong Openresty
11、Job & CronJob 任務和定時任務
12、HPA(Horizontal Pod Autoscaling) 水平伸縮
控制管理器默認每隔30s查詢metrics的資源使用情況(可以通過 --horizontal-pod-autoscaler-sync-period 修改) 支持三種metrics類型 預定義metrics(比如Pod的CPU)以利用率的方式計算 自定義的Pod metrics,以原始值(raw value)的方式計算 自定義的object metrics 支持兩種metrics查詢方式:Heapster和自定義的REST API 支持多metrics
13、Service Account
14、Secret 密鑰
Service Account:用來訪問Kubernetes API,由Kubernetes自動創(chuàng)建,并且會自動掛載到Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中; Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等; kubernetes.io/dockerconfigjson: 用來存儲私有docker registry的認證信息。
15、ConfigMap 配置中心
計算資源,包括cpu和memory cpu, limits.cpu, requests.cpu memory, limits.memory, requests.memory 存儲資源,包括存儲資源的總量以及指定storage class的總量 requests.storage:存儲資源總量,如500Gi persistentvolumeclaims:pvc的個數(shù) storageclass.storage.k8s.io/requests.storage storageclass.storage.k8s.io/persistentvolumeclaims 對象數(shù),即可創(chuàng)建的對象的個數(shù) pods, replicationcontrollers, configmaps, secrets resourcequotas, persistentvolumeclaims services, services.loadbalancers, services.nodeports
資源配額應用在Namespace上,并且每個Namespace最多只能有一個 ResourceQuota 對象
開啟計算資源配額后,創(chuàng)建容器時必須配置計算資源請求或限制(也可以 用LimitRange設置默認值),用戶超額后禁止創(chuàng)建新的資源
年末福利
《玩轉ansible,實現(xiàn)企業(yè)級運維自動化訓練營》 9個課時,300min+,最低 僅需¥0.02(錄播)
主講老師:王曉春
首批紅帽授權元老級認證Linux實戰(zhàn)專家
擁有RHCl、RHCA、RHCVA、RHCE、CCNA、 OCP MCT、MCSE、MCDBA等幾十種專業(yè)證書認證
十余年一線實戰(zhàn)經驗
課程大綱
Ansible 介紹和架構
Ansible安裝
Ansible常用模塊
Ansible Playbook介紹
Yaml語法
Ansible變量
Ansible的模版技術
Jinja2模板語法
Ansible Playbook條件判斷和循環(huán)
Ansible Playbook其它高級用法
配套課件
10人拼團價0.02元,5人拼團價0.9元,2人拼團價9.9元, 掃碼開啟拼團
評論
圖片
表情



