控制器:
1,deployment 无状态部署
2,StatefulSet 有状态部署
3,DaemonSet 守护进程部署
4,Job 批处理
5,CronJob 批处理
Deployment:
部署无状态应用
管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的Image
应用场景:Web服务
SatefulSet:
部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
1. 稳定,唯一的网络标识符,持久存储
2. 有序,优雅的部署和扩展、删除和终止
3. 有序,滚动更新
应用场景:数据库
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
无状态的特点:
1,deployment认为所有的pod都是一样的
2,不用考虑顺序的要求
3,也不用考虑哪个在哪个node运行
4,随意扩容/缩容
常用的服务:
headless service:无头服务
service: 一组pod访问策略,提供负载均衡和服务发现。
DaemonSet:
在每一个Node上运行一个Pod
新加入的Node也同样会自动运行一个Pod
应用场景:Agent
Job分为普通任务(Job)和定时任务(CronJob)
一次性执行
应用场景:离线数据处理,视频解码等业务
CronJob定时任务,像Linux的Crontab一样。
定时任务
应用场景:通知,备份
[root@centos7 demo]# cat headless.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
[root@centos7 demo]#
[root@centos7 demo]# kubectl apply -f headless.yaml
service/nginx created
[root@centos7 demo]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 3d4h
nginx ClusterIP None <none> 80/TCP 40s
[root@centos7 demo]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.0.11:6443 3d4h
nginx <none> 59s
[root@centos7 demo]#
[root@centos7 demo]# cat sts.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
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
[root@centos7 demo]#
[root@centos7 demo]# kubectl apply -f sts.yaml
service/nginx unchanged
statefulset.apps/nginx-statefulset unchanged
[root@centos7 demo]#
[root@centos7 demo]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-statefulset-0 1/1 Running 0 9m25s
pod/nginx-statefulset-1 1/1 Running 0 8m51s
pod/nginx-statefulset-2 1/1 Running 0 8m17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 3d5h
service/nginx ClusterIP None <none> 80/TCP 9m41s
[root@centos7 demo]#
[root@centos7 demo]# kubectl run -it --image=busybox:1.28.4 --rm --restart=Never sh
If you don't see a command prompt, try pressing enter.
/ #
/ #
/ # nslookup nginx-statefulset-0.nginx.default.svc.cluster.local
Server: 10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local
Name: nginx-statefulset-0.nginx.default.svc.cluster.local
Address 1: 10.244.1.5 nginx-statefulset-0.nginx.default.svc.cluster.local
/ #