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使用过程

相关推荐
武汉唯众智创7 小时前
云计算实训室建设指南(2026版):从技能大赛赛项标准反推架构、课程与落地路径
云原生·kubernetes·云计算·云计算实训室·云计算教学平台·职业技能大赛
wdfk_prog7 小时前
ROS教程:01 搭建 ROS1 Noetic Docker 开发环境
运维·缓存·docker·容器·ros
szephyr8 小时前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
wdfk_prog8 小时前
ros教程02:创建 catkin Workspace、Package 与第一个 ROS1 C++ Node
运维·缓存·docker·容器·ros
阿里云云原生10 小时前
剧透丨AI 原生研发组织的探索和实践
云原生
名字还没想好☜12 小时前
Docker 网络实战:bridge/host/none/自定义网络、容器互通与端口映射踩坑
运维·docker·kubernetes
探索云原生14 小时前
KubeClipper 1.7.0 发布:Operation 优化与 Kubernetes 1.37 支持
linux·docker·云原生·kubernetes·go
fengkai454516 小时前
八、Docker详解1-3
运维·docker·容器
MrSYJ18 小时前
Veth pair 细讲
docker·云原生·容器
Elastic 中国社区官方博客18 小时前
将 Vercel 数据导入 Elastic:无需安装任何东西的无服务器可观测性
大数据·运维·elasticsearch·搜索引擎·云原生·serverless·全文检索