砀山做网站,网站建设有哪些软件有哪些内容,个人电脑做网站违法吗,连锁网站开发文章目录 一、控制器类型二、Deployment控制器三、SatefulSet控制器四、Daemonset控制器五、Job控制器六、CronJob 控制器 一、控制器类型
Deployment#xff1a;适合无状态的服务部署StatefullSet#xff1a;适合有状态的服务部署DaemonSet#xff1a;一次部署#xff0c… 文章目录 一、控制器类型二、Deployment控制器三、SatefulSet控制器四、Daemonset控制器五、Job控制器六、CronJob 控制器 一、控制器类型
Deployment适合无状态的服务部署StatefullSet适合有状态的服务部署DaemonSet一次部署所有的node节点都会部署Job一次性的执行任务Cronjob周期性的执行任务
二、Deployment控制器 简介 一般情况下我们并不直接创建 Pod而是通过 Deployment 来创建 Pod由 Deployment 来负责创建、更新、维护其所管理的所有 Pods。 过程 1创建Deployment 2调用deployment-controllerdeployment控制器创建一个ReplicaSet 3ReplicaSet调用replicaset-controller创建pod 4Pod创建完之后就会由启用资源调度程序default-scheduler将pod分配对应的node节点由kubelet管理pod 应用场景 1定义Deployment来创建Pod和ReplicaSet 2滚动升级和回滚应用 3扩容和缩容 4暂停和继续Deployment 编写yaml清单vi deployment-nginx.yaml apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-nginx #Deployment 的名称labels:app: nginx
spec:replicas: 3 # 创建 Pod 的副本数selector: #定义 Deployment 如何找到要管理的 Pod与 template 的 label标签对应matchLabels:app: nginxtemplate: #字段包含以下字段metadata:labels:app: nginx #使用 label标签标记 Podspec: #表示 Pod 运行一个名字为 nginx 的容器containers:- name: nginximage: nginx:1.15 #表示 Pod 运行一个名字为 nginx 的容器ports: #容器用于发送和接收流量的端口- containerPort: 80创建控制器 kubectl apply -f deployment-nginx.yaml 查看 kubectl get deployment
三、SatefulSet控制器 简介 StatefulSet是用来管理有状态应用的工作负载API对象实例之间有不对等关系以及实例对外部数据有依赖关系的应用称为有状态应用。 StatefulSet本质上是Deployment的一种变体在v1.9版本中已成为GA版本它为了解决有状态服务的问题它所管理的Pod拥有固定的Pod名称启停顺序在StatefulSet中Pod名字称为网络标识(hostname)还必须要用到共享存储。 在Deployment中与之对应的服务是service而在StatefulSet中与之对应的headless serviceheadless service即无头服务与service的区别就是它没有Cluster IP解析它的名称时将返回该Headless Service对应的全部Pod的Endpoint列表。 service与Headless service 区别 service一组Pod访问策略提供cluster-IP群集之间通讯还提供负载均衡和服务发现。Headless service 无头服务不需要cluster-IP直接绑定具体的Pod的IP。 应用场景 1 稳定的持久化存储 通过VolumeClaimTemplate为每个Pod创建一个PV。即使Pod重新调度后还是能访问到相同的持久化数据 基于PVC来实现 2 稳定的网络标志 即Pod重新调度后其Pod Name和HostName不变 基于Headless Service(即没有ip地址和端口的ClusterIP) 来实现 3 有序部署 有序扩展有序收缩对于N个副本的StatefulSet每个Pod都在[0N)的范围内分配一个数字序号且是唯一的 基于initcontainers来实现 编写yaml清单vi statefulset-nginx.yaml apiVersion: apps/v1
kind: StatefulSet
metadata: name: web-statefulset
spec: serviceName: nginx-statefulsetreplicas: 3selector: matchLabels: app: nginx-statefulsettemplate: metadata: labels: app: nginx-statefulsetspec: containers: - name: nginx-statefulsetimage: nginxports: - containerPort: 80name: web-statefulset创建资源文件kubectl apply -f statefulset-nginx.yaml 查看启动的podkubectl get pod psstatefulset资源控制器启动后pod的名称为psstatefulsetName-[0-n] 起一个容器并且进入容器内部kubectl run -it --image busybox:1.28.4 dns-test --restartNever --rm /bin/sh 在容器内测试ping web-statefulset-0.nginx-statefulset 查看地址nslookup web-statefulset-0.nginx-statefulset StatefulSet的DNS说明 StatefulSet中每个Pod的 DNS格式为statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
1. serviceName为 Headless Service的名字
2. 0..N-1为Pod所在的序号从О开始到N-1
3. statefulSetName为StatefulSet的名字
4. namespace为服务所在的namespace,Headless Servic和StatefulSet必须在相同的namespace
5. .cluster.local为Cluster Domain StatefulSet扩容与缩容命令的两种命令 1. kubectl scale statefulset web-statefulset --replicas5
2. kubectl patch statefulset web-statefulset -p {spec:{replicas:2}}StatefulSet不支持直接更新镜像需要使用patch间接实现 kubectl patch statefulset web-statefulset --typejson -p[{op:replace,path:/spec/template/spec/containers/0/image,value:nginx:1.9.1}]四、Daemonset控制器 简介 服务守护进程它的主要作用是在Kubernetes集群的所有节点中运行我们部署的守护进程相当于在集群节点上分别部署Pod副本如果有新节点加入集群Daemonset会自动的在该节点上运行我们需要部署的Pod副本相反如果有节点退出集群Daemonset也会移除掉部署在旧节点的Pod副本。 应用场景 1日志系统的日志收集 2监控系统的数据收集 编写yaml清单vi daemonSet-nginx.yaml apiVersion: apps/v1
kind: DaemonSet #创建DaemonSet资源
metadata:name: fluentd #名字
spec: selector: matchLabels: app: loggingtemplate: metadata: labels: app: loggingid: fluentdname: fluentdspec:containers: - name: fluentd-esimage: agilestacks/fluentd-elasticsearch:v1.3.0env: #环境变量配置- name: FLUENTD_ARGS #环境变量的keyvalue: -qq #环境变量的valuevolumeMounts: #加载数据卷,避兔数据丢失- name: containers #数据卷名字mountPath: /var/lib/docker/containers #将数据卷挂载到容器内的哪个目录- name: varlogmountPath: /varlogvolumes: #定义数据卷- hostPath: #数据卷类型主机路径的模式也就是与node 共享目录path: /var/lib/docker/containers # node中的共享目录name: containers #定义的数据卷的名称- hostPath:path: /var/logname: varlog创建资源kubectl apply -f daemonSet-nginx.yaml 查看kubectl get pod -o wide ps可以看到默认在工作节点地下都生成了DaemonSet的pod 修改配置kubectl edit ds fluentd Daemonset会忽略Node的unschedulable状态有几种方式来指定 Pod只运行在指定的Node节点上:
nodeSelector:只调度到匹配指定label的Node 上
nodeAffinity:功能更丰富的Node选择器比如支持集合操作
podAffinity:调度到满足条件的Ped所在的Node 上spec:nodeSelector:type: microservervices再次查看podkubectl get pod 查看node的label发现没有符合部署pod条件的kubectl get node --show-labels 给worker1和worker2添加标签 kubectl label no worker1 typemicroservervices
kubectl label no worker2 typemicroservervices再次查看podkubectl get pod
五、Job控制器 简介 Job控制器用于调配pod对象运行一次性任务容器中的进程在正常运行结束后不会对其进行重启而是将pod对象置于completed状态。若容器中的进程因错误而终止则需要依据配置确定重启与否未运行完成的pod对象因其所在的节点故障而意外终止后会被重新调度。 编写yaml清单vi job-demo.yaml apiVersion: batch/v1
kind: Job
metadata:name: job-demo
spec:template:metadata:name: job-demospec:restartPolicy: Nevercontainers:- name: counterimage: busyboxcommand:- bin/sh- -c- for i in 9 8 7 6 5 4 3 2 1; do echo $i; done创建podkubectl apply -f job-demo.yaml 查看 kubectl logs job-demo-4dr95
六、CronJob 控制器 简介 CronJob其实就是在Job的基础上加上了时间调度类似Linux中的crontab。 crontab格式 ps多个时间可以用逗号隔开 范围可以用连字符给出*可以作为通配符 /表示每… 分钟 值从 0 到 59.
小时 值从 0 到 23.
日 值从 1 到 31.
月 值从 1 到 12.
星期 值从 0 到 6, 0 代表星期日编写yaml清单vi cronJob-demo.yaml apiVersion: batch/v1
kind: CronJob
metadata:name: cronjob-demo
spec:schedule: */1 * * * *jobTemplate:spec:template:spec:restartPolicy: OnFailurecontainers:- name: helloimage: busyboxargs:- /bin/sh- -c- for i in 9 8 7 6 5 4 3 2 1; do echo $i; done 创建podkubectl apply -f cronJob-demo.yaml 查看kubectl get pod ps一分钟执行一次 查看 kubectl logs cronjob-demo-28281040-866ns