云原生-K8S-资源控制器controller
pod 分类:自主式pod: 死亡不会被拉起控制器式pod :在控制器的生命周期里,始终维持pod的副本数量什么是控制器k8s 中内建了很多控制器,这些控制器相当于一个状态机,用来控制pod的具体状态和行为控制器是存在master节点上,控制node节点上的kubelet然后kubelet在创建对应的pod控制器类型ReplicationController & ReplicaSetDep
pod 分类:
自主式pod: 死亡不会被拉起
控制器式pod :在控制器的生命周期里,始终维持pod的副本数量
什么是控制器
k8s 中内建了很多控制器,这些控制器相当于一个状态机,用来控制pod的具体状态和行为
控制器是存在master节点上,控制node节点上的kubelet然后kubelet在创建对应的pod
控制器类型
- ReplicationController & ReplicaSet
- Deployment
- DaemonSet
- StateFulSet
- Job/ConJob
- Horizontal Pod Autoscaling
Deployment & ReplicaSet & ReplicationController(废弃)
replicaSet
用来维护固定的pod数量
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-rs-demo
spec:
replicas: 5
selector: # 这就是rs 比rc多出来的地方,支持selector的选择标签
matchLabels:
appName: zhucheng
template:
metadata:
labels:
app: fg
appName: zhucheng
spec:
containers:
- name: my-boot
image: zhucheng1992/myboot:1.0
ports:
- containerPort: 80 # 这个端口就是容器内部开放的端口,如果容器里面有一个8080的服务,这里就写8080
这样创建一个 rs.yaml 然后执行 kubectl create -f rs.yaml 就会创建出5个 pod 命名规则是 rs名称-随机字符串
RS 的控制副本数量规则是
缩容扩容
kubectl edit rs rs的metadata名称
修改后 wq退出,副本就会自动变成对应数量
Deployment 和 ReplicaSet
Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:
- 定义Deployment来创建Pod和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: zc-deploy
image: zhucheng1992/myboot:1.0
ports:
- containerPort: 8080
使用 kubectl apply -f deployment.yaml 创建deployment控制器,会发现这个deployment控制器创建了一个名称为
my-deployment-md5 名称的一个 ReplicaSet。然后这个replicaSet 又创建了3个 pod
Deployment 扩容缩容
kubectl scale deployment my-deployment --replicas 4
更新镜像
kubectl set image deployment/deployment名称 容器名称=镜像名称:版本号
kubectl set image deployment/my-deployment zc-deploy=zhucheng1992/myboot:2.0
回滚
kubectl rollout undo deployment/deployment名称
查看历史记录
kubectl rollout history deployment/my-deployment
deployment.apps/my-deployment
REVISION CHANGE-CAUSE
2 kubectl apply --filename=mydeploy.yaml --record=true
3 kubectl apply --filename=mydeploy.yaml --record=true
4 kubectl apply --filename=mydeploy.yaml --record=true
回滚到指定的版本
kubectl rollout undo deployment/my-deployment --to-revision=2
DaesmonSet
DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括:
日志收集,比如fluentd,logstash等
系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
系统程序,比如kube-proxy, kube-dns, glusterd, ceph等
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: daemonSet-app
template:
metadata:
labels:
app: daemonSet-app
spec:
containers:
- name: zc-deploy
image: zhucheng1992/myboot:1.0
ports:
- containerPort: 8080
通过daemonSet创建出来的pod永远在node上面只会有一份
Job & ConJob
更多推荐
所有评论(0)