Kubernetes的控制器实验

一,建立控制器

仍旧是先使用kubectl命令进行YAML格式文件的创立

bash 复制代码
[root@master controler]# kubectl create deployment webcluster --image myapp:v1  --dry-run=client -o yaml  > repset.yml

然后再进入到YAML文件进行具体的修改

bash 复制代码
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webcluster
#  strategy: {}
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp

之后使用apply命令进行容器的运行

二,deployment

此时需要另开一台shell进行监控,具体的监控命令如下

bash 复制代码
[root@k8s-master ~]# watch -n 1 " kubectl get pods   --show-labels;echo ====;kubectl get replicasets.apps"

然后新建立deployment控制器来管理无状态应用,控制 Pod 副本同时也可以完成滚动更新、版本回滚、扩缩容的任务,具体命令如下

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webcluster
  name: webcluster
spec:
  minReadySeconds: 5
  replicas: 2
  selector:
    matchLabels:
      app: webcluster
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1   #修改这里来进行容器的升级与回滚
        name: myapp

三,版本的更新优化及管理

先查看容器的更新策略,同时另一台的监控不要断开,便于直接观察容器版本的更新

bash 复制代码
[root@master controler]# kubectl describe deployments.apps webcluster
RollingUpdateStrategy:  25% max unavailable, 25% max surge

根据命令返回的结果可以发现,跟新为百分之二十五的额外容器来进行更新的,可以打开前面deployment控制器的YAML来进行修改

bash 复制代码
spec:
  minReadySeconds: 5
  replicas: 6
  selector:
    matchLabels:
      app: webcluster
  strategy:
    rollingUpdate:
      maxSurge: 1					#更新时pod数量最多比期望值多一个
      maxUnavailable: 0				#不能使用pod数量比期望值数量多0
  template:
    metadata:
      labels:
        app: webcluster
    spec:
      containers:
      - image: myapp:v1
        name: myapp

同时也可以结合我上一篇文章提出的rollout命令来完成更新的回滚和暂停

四.DaemonSet控制器

DaemonSet控制器的作用是在集群每一个(或者符合标签选择器的)Node 上运行且仅运行一个 Pod 副本,具体的YAML 文件如下

bash 复制代码
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: daemonset
  name: daemonset
spec:
  selector:
    matchLabels:
      app: daemonset
  template:
    metadata:
      labels:
        app: daemonset
    spec:
      containers:
      - image: myapp:v1
        name: myapp

同时添加一台新的node进入到k8s的集群中,具体添加方法参考我的k8s环境的部署

五.Job控制器

job控制器的作用为执行一次性任务,保证任务 Pod 成功完成退出,确保任务执行结束(成功终止),适合一次性批量任务、数据备份、计算任务,具体文件内容如下

bash 复制代码
apiVersion: batch/v1
kind: Job
metadata:
  name: testjob
spec:
  completions: 6
  parallelism: 2
  backoffLimit: 4
  template:
    spec:
      containers:
      - image: busybox
        name: testjob
        command: ["/bin/sh", "-c"]
        args:
        - |
          echo this is testjob message
          sleep 10
      restartPolicy: Never

六.Cronjob控制器

Cronjob控制器的作用是基于 cron 表达式定时创建 Job 对象,Job 再去跑一次性 Pod 任务。相当于 K8s 里面的 crontab 定时任务。具体的YAML文件内容如下

bash 复制代码
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob
spec:
  jobTemplate:
    metadata:
      name: cronjob
    spec:
      template:
        spec:
          containers:
          - image: busybox
            name: cronjob
            command:
              - /bin/sh
              - -c
              - echo "hello timinglee"
          restartPolicy: OnFailure
  schedule: '* * * * *'

控制器的作用是为了更好的使用YAML文件格式来便捷操作k8s使用过程

相关推荐
xzl041 小时前
Ubuntu24.04 生产环境 Docker(全国内源)
运维·docker·容器
腾讯数据架构师2 小时前
摩尔线程 GPU 怎么接入 Kubernetes 跑 DeepSeek?CubeStudio 摩尔线程(MUSA)适配实操
人工智能·云原生·容器·kubernetes·开源·mlops·maas
明王明王2 小时前
从零搭建一个单节点 K8S 可观测实验室(十三):总结——这个实验室如何服务工作、学习和开源项目
学习·kubernetes·开源
μθημα2 小时前
K8s Pod 管理实战:虚拟机环境下的具体命令与步骤
java·docker·kubernetes
阿里云云原生3 小时前
企业级实时数据平台建设:利用存算分离 Kafka 实现低成本、高可靠入湖
分布式·阿里云·云原生·kafka
2301_780789664 小时前
WAF与Web应用安全的深度融合:从边界防护到业务风控
运维·服务器·网络·云原生·ddos
ylj_dev4 小时前
从 0 构建 AI Workload Platform(八):受限执行环境与 Kubernetes
docker·容器·kubernetes·分布式系统·ai工作流·容器安全·ai infra
sryyd_024 小时前
Kubernetes 控制器完全指南:从原理到实战
云原生·容器·kubernetes
niyesd4 小时前
Kubernetes Pod 控制器管理与实验记录
云原生·容器·kubernetes