文章目录
一、 控制器
控制器:又称之为工作负载,分别包含以下类型控制器
- Deployment,适合无状态的服务部署
- StatefulSet,适合有状态的服务部署
- DaemonSet,一次部署,所有的node节点都会部署,包括新加入的node节点,同样会被部署。适用于集群、日志、监控。
- Job,一次性执行任务,执行完任务容器关闭。
- CronJob,周期性执行任务。
1.1 Pod与控制器之间的关系
kubernetes内部会有很多的控制器,这些控制器相当于一个状态机,用来控制Pod的具体状态和行为。
controllers:在集群上管理和运行容器的对象通过label-selector相关联
Pod通过控制器实现应用的运维,如伸缩,升级等

1.2 Deployment
特点:
- 部署无状态应用
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:web服务
测试
[root@master test]# vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80
[root@master test]# kubectl create -f nginx-deployment.yaml ##创建pod
deployment.apps/nginx-deployment created
[root@master test]# kubectl get pods,deploy,rs ##查看创建的pod、deployment、replicasets资源
NAME READY STATUS RESTARTS AGE
pod/foo 0/1 Completed 0 22h
pod/frontend 2/2 Running 0 23h
pod/liveness-exec 1/1 Running 70 12h
pod/nginx-deployment-d55b94fd-2s2zf 1/1 Running 0 26m
pod/nginx-deployment-d55b94fd-bpn9w 1/1 Running 0 26m
pod/nginx-deployment-d55b94fd-qlvtz 1/1 Running 0 26m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/nginx-deployment 3 3 3 3 26m
NAME DESIRED CURRENT READY AGE
replicaset.extensions/nginx-deployment-d55b94fd 3 3 3 26m
查看控制器,并可以对控制器的参数进行修改
kubectl edit deployment/nginx-deployment
查看Deployment历史版本
[root@master test]# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
1.2 SatefulSet
官方文档
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
特点
- 部署有状态应用
- 解决Pod独立生命周期,保持Pod启动顺序和唯一性
- 稳定,唯一的网络标识符,持久存储(例如:etcd配置文件,节点地址发生变化,将无法使用)
- 有序,优雅的部署和扩展、删除和终止(例如:mysql主从关系,先启动主,再启动从)
- 有序,滚动更新
应用场景:数据库
常规service和无头服务区别
service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
Headless service:就是无头服务,不需要cluster-IP,ClusterIP设置为none,直接绑定具体的Pod的IP。
测试
官方文档讲解
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: web
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # by default is 1
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi
名为 nginx 的 Headless Service 用来控制网络域名。
名为 web 的 StatefulSet 有一个 Spec,它表明将在独立的 3 个 Pod 副本中启动 nginx 容器。
volume ClaimTemplates 将通过 Persistent Volumes 驱动提供的 Persistent Volumes 来提供稳定的存储。
[root@master test]# vim nginx-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
[root@master test]# kubectl create -f nginx-headless.yaml
service/nginx-headless

本文详细介绍了Kubernetes中的一些核心控制器,包括Deployment用于无状态应用的管理,具备滚动更新、回滚等特性;StatefulSet适用于有状态服务,保证Pod的顺序和持久存储;DaemonSet确保每个Node上运行一个Pod;Job和CronJob则用于一次性或周期性任务的执行。此外,还涉及了Pod、Service、Endpoint和DNS解析等内容。
最低0.47元/天 解锁文章
2943

被折叠的 条评论
为什么被折叠?



