《三》控制器
Pod與controllers的關係
控制器管理pod
- • controllers:在叢集上管理和執行容器的物件
- • 使用label-selector 標籤 讓控制器關聯pod
- • Pod通過控制器實現應用的運維,如伸縮,升級等
Deployment
- • 部署無狀態應用--用於web服務,無需多的更改
- • 管理Pod和ReplicaSet(若是一個pod掛了,就起一個pod在別的節點)
- • 具有上線部署、副本設定、滾動升級、回滾等功能
- • 提供宣告式更新,例如只更新一個新的Image
記錄的版本,用於回滾:
總結
1、deployment 認為pod都保持一致
2、不用考慮啟動順序
3、不用考慮在哪個node上執行,在哪個node上執行都一樣
4、隨意的擴容、縮容
SatefulSet
部署有狀態應用
- • 解決Pod獨立生命週期,保持Pod啟動順序和唯一性
-
- 穩定,唯一的網路識別符號,持久儲存
-
- 有序,優雅的部署和擴充套件、刪除和終止
-
- 有序,滾動更新
- 應用場景:資料庫
總結
1、比如etcd就需要部署在這個控制器下,因為叢集之間的配置會變化
2、不對等的關係,需要用外部儲存,類似於3臺web,儲存附件,不要用一個nfs共享儲存,讓每個web都可以正常訪問
service:外部可以訪問,通過CLUSTER-IP 轉發到容器的節點上來提供服務
現需要將CLUSTER-IP 設定為None,這樣就能保證轉發到一臺節點上,需要用到的是dns的通訊
設定:clusterIP: None 若是不設定,預設都是有clusterIP
配置dns服務:
kubectl apply -f coredns.yaml
驗證:(若是running,就沒問題)
驗證開始
[[email protected] demo]# cat sys.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
-
port: 80
name: web
clusterIP: None
selector:
app: nginx
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:- containerPort: 80
說明:1、serviceName: nginx 與service 中的name: nginx 繫結
2、kind: StatefulSet 指定這個控制器
建立
kubectl apply -f sys.yaml
建立一個pod,在這裡用dns解析
[[email protected] demo]# kubectl apply -f pod1.yaml
[[email protected] demo]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: dns-test
spec:
containers:
- name: busybox
image: busybox:1.28.4
args:- /bin/sh
- -c
- sleep 39999999
說明:1、必須要加上引數,不然啟動就退出了,保證不被退出
進入到容器裡解析:
說明:1、nginx-statefulset-0.nginx 中nginx-statefulset-0 是pod的主機名,nginx是service名稱,這樣來保證穩定
主機名獲取:
StatefulSet與Deployment區別:有身份的!
身份三要素:
• 固定域名
• 固定主機名
• 儲存(PVC)
ClusterIP A記錄格式:<service-name>.<namespace-name>.svc.cluster.local
ClusterIP=None A記錄格式:<statefulsetName-index>.<service-name>.svc.cluster.local
示例:web-0.nginx.default.svc.cluster.local