K8S教程(8)使用控制器创建Pods

本文详细介绍了Kubernetes中的控制器Deployment和DaemonSet的区别,通过实例演示如何创建、配置和管理这两个控制器,以及它们在应用部署和日志监控中的作用。还涵盖了滚动更新和回滚策略,以及创建Service以暴露服务。
摘要由CSDN通过智能技术生成

一、K8S控制器的作用

使用配置清单创建Pod的时候通常会加入控制器的配置,否则没有控制器的Pod不支持故障漂移、横向扩容、滚动升级等高级特性。控制器(Controller)可以确保资源符合我们的需求,常用的控制器有DeemonSet、Deployment、ReplicaSet、Jobs等,有关控制器的详细介绍可以参考官网https://kubernetes.io/docs/concepts/workloads/controllers/。最常用的2种控制器的主要用途和特点:

DaemonSet:用于确保所有节点运行同一个Pod的场景,比如日志采集、监控系统

Deployment:使用最多的无状态应用控制器,相比ReplicaSet来说,Deployment能直接对Pod进行滚动更新和回滚等操作(如果使用的是ReplicaSet控制器,yaml文件发生变化后直接apply是不会生效的,需要先手动删除Pod让控制器重新创建才可以,如果Pod很多的话就需要重复很多次)。

二、Deployment控制器配置示例

1、创建一个包含控制器的配置清单以创建Pod,这里的配置清单选项比较精简,主要关注控制器内容,更详尽的可以参考本站文章《K8S教程(6)使用YAML资源配置清单创建Pods》

vi nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3  #Pod的副本数量,多节点实现负载均衡与高可用
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

2、应用配置清单 

kubectl apply -f nginx-text.yaml

3、使用kubectl get命令查看控制器(由于这里是用的deployment,所以get的也就是deployment,使用其他控制器的话需要替换成对应的名字),可以看到会自动生成一个strategy字段,这个是用于滚动更新的策略 

kubectl get deployment #显示所有deployment和其状态
kubectl get deployment nginx-test -o yaml

 

4、使用Deployment实现滚动更新发布 

spec:
  ...
  strategy:
    rollingupdate:
      maxSurge: 1
      maxUnavailabe: 1
  template:
    metadata:
      labels:
        contraoller: deployment
        app: nginx
        version: 1.7.9
    spec:
      containers:
      - name: nginx
        image: nginx:1.8.1
  ...

应用配置文件创建好Pod,然后可以查看下历史版本 

kubectl apply -f nginx-test.yaml 
kubectl rollout history deployment nginx-test

回滚方法 

kubectl rollout undo deloyment nginx-test --to-version=1 #回滚到版本号1

5、为控制器创建Service,暴露服务

二、ReplicaSet的创建实例

apiVersion: apps/v1
kind: ReplicaSet  #定义控制器
metadata:
  name: frontend  
  labels:
    tier: frontend  #定义标签
spec:
  replicas: 3  #Pod的副本数量
  selector:  #标签选择器,符合条件的Pod才被控制
    matchLabels:
      tier: frontend
  template:  #由控制器所创建的Pod的信息在这里定义
    metadata:
      labels:  #容器的标签和控制器需要一致
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

三、DaemonSet创建示例 

vi daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:  #相比deployment少了replicase的定义,因为它是每个pod上都会运行
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:  #容忍度相关设置
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/container

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值