一.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:
  # deployment名
  name: nginx2 
spec:
  # 副本数量
  replicas: 1 
  selector:
    matchLabels:
      # 匹配的pod标签,表示deployment和rs控制器控制带有此标签的pod
      app: nginx 
 # 代表pod的配置模板
 template: 
   metadata:
     labels:
       # pod的标签
       app: nginx 
  spec:
    # 以下为pod里的容器定义
    containers: 
    - 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
     - key: node-role.kubernetes.io/master  
       # kubectl explain pod.spec.tolerations查看(能容忍的污点effect)
       effect: NoSchedule 
     containers:
     - name: nginx
       image: nginx:1.15-alpine
       imagePullPolicy: IfNotPresent
       # resources资源限制是为了防止master节点的资源被占太多(根据实际情况配置)
       resources:   
       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:
  # job名
  name: pi 
spec:
  template:
    metadata:
      # pod名
      name: pi 
  spec:
    containers:
    # 容器名
    - name: pi 
      # 此镜像有800多M,可提前导入到所有节点,也可能指定导入到某一节点然后指定调度到此节点
      image: perl 
      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:
  # 执行job的次数
  completions: 10 
  # 执行job的并发数
  parallelism: 1 
 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 <<eof
apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  # 这个ip可以不指定,让它自动分配,需要与集群分配的网络对应
  clusterIP: 10.2.11.22 
  # ClusterIP类型,也是默认类型
  type: ClusterIP 
  # 指定service 端口及容器端口
  ports: 
  # service ip中的端口
  - port: 80 
    protocol: TCP
    # pod中的端口
    targetPort: 80 
  # 指定后端pod标签(不是deployment的标签)
  selector: 
    # 可通过kubectl get pod -l  app=nginx查看哪些pod在使用此标签
    app: nginx 

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

# 升级前查看版本
# 升级前版本
kubectl describe pod nginx1-7d9b8757cf-czcz4 | grep Image 
  Image:      nginx:1.15-alpine
kubectl exec nginx1-7d9b8757cf-czcz4 --nginx -v

# 正式升级
# 升级为1.16版
kubectl set image deployment nginx1 nginx1=nginx:1.16-alpine --record     
# 查看帮助
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 表示会记录

1.7 pod版本回滚

# 查看版本历史信息
kubectl rollout history deployment nginx1    
# 定义要回退的版本为1
kubectl rollout history deployment nginx1--revision=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 
# 扩容为10个副本,改小字则副本缩减
kubectl scale deployment nginx1 --replicas=10 -n kube-public 
kubectl get pods -o wide
posted on 2021-07-23 14:12  jiayou111  阅读(160)  评论(0编辑  收藏  举报