1恰力、ReplicaSet
用于彈性伸縮副本,是最基礎(chǔ)的pod控制器
1.1簡單實例
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: base-rs-httpd
namespace: default
labels:
app: web
release: cannary
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- web
- key: release
operator: In
values:
- cannary
template:
metadata:
labels:
app: web
release: cannary
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- name: httpd
containerPort: 80
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: 80
readinessProbe:
httpGet:
path: /
通過標(biāo)簽選擇器選擇后端的pod
標(biāo)簽選擇器有兩種配置方式matchExpressions陡蝇,matchLabels
語法格式查看kubectl explain rs.spec.selector
1.2彈性伸縮
spec:
replicas: 3
只需要修改其replicas字段即可
1.3版本更新
spec:
containers:
- name: httpd
image: httpd:latest
只需修改其image字段即可
但是rs有一個問題痊臭,不能自動更新,所以需要用到deployment
2登夫、Deployment
建立于ReplicaSet之上广匙,比rs功能更加強(qiáng)大∧詹撸可以自動更新鸦致,并且可以設(shè)置更新策略。
2.1自動更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: base-deploy-web
spec:
replicas: 7
selector:
matchLabels:
app: web-http
release: stable
template:
metadata:
labels:
app: web-http
release: stable
spec:
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
ports:
- name: nginx
containerPort: 80
restartPolicy: Always
2.2基于策略自動更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: base-deploy-web
spec:
replicas: 7
# paused: True
strategy:
rollingUpdate:
maxSurge: 10%
maxUnavailable: 0
selector:
matchLabels:
app: web-http
release: stable
template:
metadata:
labels:
app: web-http
release: stable
spec:
containers:
- name: nginx
image: nginx:1.18
imagePullPolicy: IfNotPresent
ports:
- name: nginx
containerPort: 80
restartPolicy: Always
maxSurge: 代表最大用于更新時可以超過原pod的多少
maxUnavailable: 代表最大用于更新時不可提供服務(wù)的原pod為多少
可以使用數(shù)字和百分比
2.3金絲雀發(fā)布
[root@master inventory]# kubectl set image deployment base-deploy-web nginx=nginx:lastet && kubectl rollout pause deployment base-deploy-web
更新一個容器后立即暫停,當(dāng)后期業(yè)務(wù)沒有問題分唾,再全部更新
3抗碰、DaemonSet
用于一個節(jié)點部署一個pod,一般用于做集群守護(hù)绽乔,日志收集弧蝇,監(jiān)控告警
3.1日志收集
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-elasticsearch
annntations:
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
imagePullPolicy: IfNotPresent
restartPolicy: Always
配置字段跟deployment基本相同,只是少了replicas折砸,因為其不用于一個節(jié)點跑多個Pod