kubernetes第六天

发布于:2025-02-10 ⋅ 阅读:(94) ⋅ 点赞:(0)

1.deployments资源

将rs资源的kind的值改为Deployment即可。

相比rs资源,升级时无须删除pod,

deployments资源不会直接控制pod,而是通过控制rs资源控制pod

strategy升级策略(与template同级)

strategy:
    # 升级的类型,"Recreate" or "RollingUpdate"
    # Recreate:
    #   先停止所有的Pod运行,然后在批量创建更新。
    #   生产环节中不推荐使用这种策略,因为升级过程中用户将无法访问服务!
    # RollingUpdate:
    #   滚动更新,即先实现部分更新,逐步替换原有的pod,是默认策略。
    # type: Recreate
    type: RollingUpdate
    # 自定义滚动更新的策略
    rollingUpdate:
      # 在原有Pod的副本基础上,多启动Pod的数量。
      # maxSurge: 2
      maxSurge: 2
      # 在升级过程中最大不可访问的Pod数量.
      # maxUnavailable: 1
      maxUnavailable: 1

2.deployments资源交互式升级和非交互式升级

交互式升级:

kubectl edit -f 01-deploy-update.yaml

kubectl edit deployments.apps

非交互式升级:

kubectl set image deploy web-deploy nginx=harbor.lxcedu.com/base-img/nginx:3

即kubectl set image deploy deploy资源名 容器名=镜像名

3.svc的type之NodePort

NodePort类型的Service允许从集群外部访问集群内部的服务,如下配置,访问宿主机的30080端口相当于访问pod的80端口

 type: NodePort
  # 指定端口映射相关信息
  ports:
    # 指定svc的端口号
  - port: 80
    # 指定Pod端口号
    targetPort: 80
    # 指定协议
    protocol: TCP
    # 指定访问宿主机的端口,该端口的报文会被转发后端的容器端口
    # 默认svc有效端口范围是:"30000-32767"
    nodePort: 30080
  # 指定ClusterIP的地址
  clusterIP: 10.200.100.200

访问Node节点的IP加上nodePort(即30080)时,流量不会先到集群内部的clusterIP:port(即10.200.100.200:80),而是直接通过Node节点的IP和指定的nodePort(30080)进入集群,并由Kubernetes的网络组件(如kube-proxy)负责将流量转发到后端Pod的对应端口(在这个例子中是80端口)。

具体来说,当外部客户端通过Node节点的IP和nodePort访问Service时,Kubernetes的网络组件会识别出这是一个NodePort类型的Service请求,并根据Service的配置将流量转发到后端的一组Pods中的一个(这通常是通过负载均衡算法来实现的)。

4.coreDNS

作用:将coreDNS的名称解析为ClusterIP

查看clusterDNS地址:

配置文件 /var/lib/kubelet/config.yaml

clusterDNS:
- 10.200.0.10
#集群域名
clusterDomain: lxcedu.com

解析coreDNS的A记录

方式一:

默认集群域名时:<service name>.<namespace name>.svc.cluster.local

因为我这里集群域名是lxc.edu.com,所以使用时是<service name>.<namespace name>.svc.lxcedu.com

如下图

方式二:

使用bind-utils验证

yum install -y bind-utils

5.deployment实现蓝绿发布

1.部署当前版本(旧版本)

2.部署service

3.部署新版本(使用新的deployment名称或label标签)

4.切换service标签到新的pod

缺点:浪费资源

6.deployment实现灰度发布

1.部署当前版本(旧版本)

2.部署service

3.部署新版本deployments,pod数量为一个,标签与旧版本一致

4.无异常时,逐渐减小旧版本pod数量,增大新版本pod数量,直至所有pod变为新版本

7.job控制器

job概述:一次性任务,pod完成作业后并不重启,重启策略为restartPolicy:Never

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34
        # 它计算π到2000个位置并打印出来。大约需要 10 秒才能完成。
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  # 指定标记此作业失败之前的重试次数。默认值为6
  backoffLimit: 4

作业完成之后,pod的状态为competed

8.CronJob

概述:周期性任务,CronJob底层逻辑是周期性创建Job控制器来实现周期性任务的。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  # 定义调度格式,参考链接:https://en.wikipedia.org/wiki/Cron
  # ┌───────────── 分钟 (0 - 59)
  # │ ┌───────────── 小时 (0 - 23)
  # │ │ ┌───────────── 月的某天 (1 - 31)
  # │ │ │ ┌───────────── 月份 (1 - 12)
  # │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
  # │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
  # │ │ │ │ │
  # │ │ │ │ │
  # * * * * *
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello 
          restartPolicy: OnFailure


网站公告

今日签到

点亮在社区的每一天
去签到