二进制部署K8s集群第17节控制器使用

网友投稿 234 2022-10-27

二进制部署K8s集群第17节控制器使用

一、pod控制器

controller用于控制pod

控制器主要分为:

ReplicationController(相当于ReplicaSet的老版本,现在建议使用 Deployments加ReplicaSet替代RC) ReplicaSet 副本集,控制pod扩容,裁减 Deployments 控制pod升级,回退 StatefulSets 部署有状态的pod应用 DaemonSet 运行在所有集群节点(包括master), 比如使用 filebeat,node_exporter Jobs 一次性 Cronjob 周期性

1.1 Deployment&ReplicaSet

1.1.1 Replicaset控制器的功能:

支持新的基于集合的selector(以前的rc里没有这种功能) 通过改变Pod副本数量实现Pod的扩容和缩容

1.1.2 Deployment控制器的功能:

Deployment集成了上线部署、滚动升级、创建副本、回滚等功能 Deployment里包含并使用了ReplicaSet

1.1.3 YAML文件创建deployment

apiVersion: apps/v1 kind: Deployment metadata:   name: nginx2 # deployment名 spec:  replicas: 1 # 副本集,deployment里使用了   selector:    matchLabels:     app: nginx # 匹配的pod标签,表示deployment和rs控制器控制带有此标签的pod  template: # 代表pod的配置模板    metadata:     labels:      app: nginx # pod的标签   spec:     containers: # 以下为pod里的容器定义     - name: nginx      image: nginx:1.15-alpine      imagePullPolicy: IfNotPresent      ports:       - containerPort: 80 kubectl apply -f nginx2-deployment.yml kubectl get deployment kubectl get pods

1.2 DaemonSet控制器

DaemonSet能够让所有(或者特定)的节点运行同一个pod 当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,被DaemonSet调度的pod会被移除 如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。 如果一个DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上 DaemonSet一般应用于日志收集、监控采集、分布式存储守护进程等

vim nginx-daemonset.yml apiVersion: apps/v1 kind: DaemonSet metadata:   name: nginx-daemonset spec:   selector:    matchLabels:      name: nginx-test  template:    metadata:     labels:      name: nginx-test    spec:     tolerations: # tolerations代表容忍     - key: node-role.kubernetes.io/master  # 能容忍的污点key      effect: NoSchedule  # kubectl explain pod.spec.tolerations查看(能容忍的污点effect)     containers:     - name: nginx      image: nginx:1.15-alpine      imagePullPolicy: IfNotPresent      resources:   # resources资源限制是为了防止master节点的资源被占太多(根据实际情况配置)       limits:        memory: 100Mi       requests:       memory: 100Mi

1.3 Job控制器

Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束

1.3.1 创建一次性job

vim job.yml apiVersion: batch/v1 kind: Job metadata:   name: pi # job名 spec:  template:    metadata:     name: pi # pod名   spec:     containers:     - name: pi # 容器名      image: perl # 此镜像有800多M,可提前导入到所有节点,也可能指定导入到某一节点然后指定调度到此节点      imagePullPolicy: IfNotPresent      command: ["perl",  "-Mbignum=bpi", "-wle", "printbpi(2000)"]     restartPolicy: Never # 执行完后不再重启 kubectl apply -f job.yml kubectl get jobs kubectl get pods kubectl logs pi-tjq9b

1.3.2 创建固定次数job

vim job2.yml apiVersion: batch/v1 kind: Job metadata:   name: busybox-job spec:   completions: 10 # 执行job的次数   parallelism: 1 # 执行job的并发数  template:    metadata:     name: busybox-job-pod   spec:     containers:     - name: busybox      image: busybox      imagePullPolicy: IfNotPresent      command: ["echo", "hello"]     restartPolicy: Never kubectl apply -f job2.yml kubectl get job

1.4 crontab控制器

类似于Linux系统的crontab,在指定的时间周期运行相关的任务

vim cronjob.yml apiVersion: batch/v1beta1 kind: CronJob metadata:   name: cronjob1 spec:   schedule: "* * * * *"         # 分时日月周   jobTemplate:    spec:     template:       spec:        containers:       - name: hello        image: busybox        args:        - /bin/sh       - -c        - date; echo hello kubernetes       imagePullPolicy: IfNotPresent     restartPolicy: OnFailure kubectl apply -f cronjob.yml kubectl get cronjob kubectl get pod

1.5 创建service

cat > nginx_service.yml <

1.6 pod版本升级(滚动更新)

# 升级前查看版本 kubectl describe pod nginx1-7d9b8757cf-czcz4 |grep Image: # 升级前版本   Image:      nginx:1.15-alpine kubectl exec nginx1-7d9b8757cf-czcz4 --nginx -v # 正式升级 kubectl set image deployment nginx1 nginx1=nginx:1.16-alpine --record  # 升级为1.16版 kubectl set image -h # 查看帮助 kubectl rollout status deployment nginx1 # 滚努更新 # 查看版本 kubectl get pods kubectl describe pod nginx1-7ffc8cb4fb-tn4ls |grep Image: kubectl exec nginx1-7ffc8cb4fb-tn4ls --nginx -v

deployment nginx1 代表名为nginx1的deploymentnginx1=nginx:1.16-alpine 前面的nginx1为容器名--record 表示会记录

1.7 pod版本回滚

kubectl rollout history deployment nginx1 # 查看版本历史信息 kubectl rollout history deployment nginx1--revision=1 # 定义要回退的版本为1 kubectl rollout undo deployment nginx1 --to-revision=1 # 开始回退 deployment.extensions/nginx1 rolled back kubectl rollout history deployment nginx1 deployment.extensions/nginx1 # 查看有没回退 kubectl get pods kubectl describe pod nginx1-7d9b8757cf-m7rt4 |grep Image: kubectl exec nginx1-7d9b8757cf-m7rt4 --nginx -v

1.8 副本扩容

kubectl scale -h # 查看帮助 kubectl scale deployment nginx1 --replicas=10 -n kube-public # 扩容为10个副本,改小字则副本缩减 kubectl get pods -o wide

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详谈spring中bean注入无效和new创建对象的区别
下一篇:usb接口4个引脚的功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~