二进制部署K8s集群进阶使用之第4节pod控制器

四、pod控制器

  • controller用于控制pod

控制器主要分为:

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

4.1 Deployment&ReplicaSet

4.1.1 Replicaset控制器的功能:

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

4.1.2 Deployment控制器的功能:

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

4.1.3 命令创建deployment

kubectl run nginx1 --image=nginx:1.15-alpine --port=80 --replicas=1
kubectl get deployment
kubectl get pod -o wide

如果本地没有镜像,会自动去下载. nginx:1.15-alpine 比较小巧,下载快.也
可以指定自己的内网镜像仓库来提升下载速度

--port=80相当于docker里的暴露端口

--replicas=1指定副本数,默认也为1

4.1.4 YAML文件创建deployment

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx2 # deployment名
spec:
2, 应用YAML文件创建deployment
3, 查看验证
删除deployment
 replicas: 1 # 副本集,deployment里使用了
replicaset
 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

4.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:

4.3 Job控制器

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

4.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

4.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

4.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

4.5 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的deployment
nginx1=nginx:1.16-alpine 前面的nginx1为容器名
--record 表示会记录

4.6 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

4.7 副本扩容

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

猜你喜欢

转载自blog.51cto.com/yht1990/2539866