分享交流
合作共赢!

Kubernetes/K8S基础使用方法总结【四】——Pod控制器

一、简介:

Kubernetes/K8S基础使用方法总结【三】——用yaml配置清单创建资源

这篇文章主要记录自主式pod资源的创建,即删除pod后不会自动重建,下面将介绍如何通过Pod控制器创建和管理pod。

kubernetes的pod资源主要的控制管理器有ReplicaSet、Deployment、DaemonSet、StatefulSet、Job、CronJob等类型,最常用的基本上是Deployment、DaemonSet和StatefulSet。

二、Pod控制器分类

1.ReplicaSet(简写rs)

多副本运行pod资源,可实现自动管理无状态pod, ReplicaSet实例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
    name: myapp
    namespace: default
spec:
    replicas: 2
    selector:
        matchLabels:
            app: myapp
            release: canary
    template:
        metadata: 
            name: myapp-pod
            labels:
                app: myapp
                release: canary
                environment: qa
        spec:
            containers:
            - name: myapp-container
              image: ikubernetes/myapp:v1
              ports:
              - name: http
                containerPort: 80

查看创建的ReplicaSet和pod资源:

[root@master1 yaml]# kubectl get ReplicaSet
NAME DESIRED CURRENT READY AGE
myapp 2 2 2 11m
[root@master1 yaml]# kubectl get rs
NAME DESIRED CURRENT READY AGE
myapp 2 2 2 11m
[root@master1 yaml]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-6f95l 1/1 Running 0 11m
myapp-vvvgq 1/1 Running 0 11m

说明:这样创建的pod资源没有service控制管理。

2.Deployment(简写deploy)

无状态服务,包含ReplicaSet的功能,可以创建期望的pod资源副本数量

# 实例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels: 
      app: myapp
      release: canary         
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80

3.DaemonSet(简写ds)

无状态服务,主要用于确保集群中的每个节点只运行一个pod资源,若新添加节点会自动添加pod副本资源,一般用来运行系统集的后台任务,如日志收集等。实例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
      role: logstor
  template:
    metadata:
      labels:
        app: redis
        role: logstor
    spec:
      containers:
      - name: redis
        image: redis:4.0-alpine
        ports:
      role: logstor
  template:
    metadata:
      labels:
        app: redis
        role: logstor
    spec:
      containers:
      - name: redis
        image: redis:4.0-alpine
        ports:
        - name: reids
          containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-daemonset
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        imagePullPolicy: Always
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
        - name: REDIS_LOG_LEVEL
          value: info

4.StatefulSet

可以管理有状态应用,每个pod资源可以被单独管理。请参考: Kubernetes/K8S基础使用方法总结【九】——Pod控制器StatefulSet

5.Job

一般用于单独执行某特定任务的pod资源,执行完毕后可以被自动删除,如数据库的数据备份,临时执行一次。

6.Cronjob

相对于Job而言,可以周期性的执行任务。

三、Pod资源的扩展、缩减和版本升级、降级

1. 扩展缩减

此内容查看价格1.99立即购买

4.常用命令小结:

  • kubectl get pods –show-labels: 查看pod及其labels
  • kubectl label pods pod-name release=canary: 给pod-name打release=canary标签
  • kubectl patch deployment myapp-deploy -p ‘{“spec”:{“strategy”:{“rollingUpdate”:{“maxSurge”:1,”maxUnavailable”:0}}}}: 通过打补丁的方式(也可以用kubectl edit命令)更改更新策略,最多可增加一个pod资源,不允许减少
  • kubectl roolout status deployment myapp-deploy: 可以查看更新状态,也可以用kubectl get pods -w监控
  • kubectl logs : 查看pod资源日志
  • kubectl expose deployment redis –port=6379: 创建服务
  • kubectl exec -it redis-fbfdf8c65-5vr7r — /bin/sh: 交互式进入pod
赞(0) 打赏
未经允许不得转载:琼杰笔记 » Kubernetes/K8S基础使用方法总结【四】——Pod控制器

评论 抢沙发

评论前必须登录!

 

分享交流,合作共赢!

联系我们加入QQ群

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册