kubernetes学习笔记1(资源对象篇)

本文介绍了Kubernetes中的资源对象文件,包括其概念、用途和如何使用资源文件管理对象。内容涉及Pod、Deployment、DaemonSet、Job、CronJob以及StatefulSet等核心资源对象,阐述了它们在集群管理和自动化任务执行中的作用。
摘要由CSDN通过智能技术生成

什么是资源对象文件?概念?

k8s通过RC/RS管理pod,在RC中定义如何启动运行pod,启动几副本等功能,如果我们自己创建一个yaml格式的文件呢,提前给他定义好呢,这个yaml格式的文件就是我们的资源对象文件。我的理解差不多就是----一个自己定义好的脚本或者ansible-playbook剧本。

资源对象文件有什么用?

1.可以创建、管理、删除资源对象

2.很多的复杂的功能光靠命令实现不了,这些复杂难以实现的就需要用资源文件描述

怎么使用资源文件管理对象呢?

先看看资源文件管理对象的3个命令

create  创建资源对象

apply   声明更新资源对象

delete   删除资源对象

#个人建议apply,效果更佳,反正我个人不喜欢create

格式:kubectl (apply | create | delete)  -f  资源文件

栗子:kubectl  apply  -f  myweb.yaml
deployment.extensions  "myweb" created   #输出这个,就是创建成功
验证:kubectl  get  deployment  myweb   #可以看到出现了该资源

删除:kubectl  delete  -f  myweb.yaml

注意注意!!!
1.如果不能补全建议先安装tab设置

设置kubectl
kubectl completion bash >/etc/bash_completion.d/kubectl

设置kubeadm
kubeadm completion bash >/etc/bash_completion.d/kubeadm
exit   #需要退出重新进去验证

2.如果误删了资源对象文件
亲,这边建议你从deployment控制器删到RS再删到pod
不然你直接干pod,控制器会再给你创建一个
pod无法自愈,但是控制器可以给他治愈,所以先杀他的老大

1.pod资源文件

---              #看到三条横线大家就知道了,学过ansible的都知道,资源定义起始标志
kind: Pod             #当前创建资源的类型
apiVersion: v1         #当前格式的版本
metadata:               #当前资源的元数据
 name: mypod            #当前资源的名字,也就是pod
spec:                   #当前资源的详细定义
 containers:           #从这里开始就是容器的定义
 - name:  myhaha       #容器名称,多个容器在一个pod中名字不能重复
   image: 192.168.242.10/myos:v1818   #启动容器的镜像地址
   stdin: true     #-i参数,分配标准输出
   tty: true       #-t参数,分配终端




怎么验证呢?
kubectl  apply  -f  mypod.yaml   #创建
kubectl  get  pod   #查看

2.deploy资源文件

---                        #资源定义标志
kind: Deployment       #当前创建资源的类型
apiVersion: app/v1     #当前格式的版本
metadata:         #当前资源的元数据
 name: myhaha     #当前资源deployment的名字
spec:             #当前资源的详细定义
 selector:         #资源匹配选择器,主要确定资源的方式
  matchLabels:      #匹配卷标
   app: myapp      #具体匹配的东西,和labels内定义相同
 replicas: 1       #pod副本数量
 template:         #资源模板



标签和选择器!!!
为了建立控制器和pod的关联,k8s先给每个pod打上一个标签(label),然后再给相应的位置定义标签选择器(label selector),怎么用这些标签呢?答案是在资源文件中引用

selector      #控制器中声明定义标签选择器
  app: myapp-app   #为服务的后端选择标签   和下面的标签一致


metadata:      #pod中定义声明标签 
 labels:         #声明标签
   app: myapp-app    #定义标签名字    !!!上下标签必须一致

那么因此我们可以写一个apache的资源对象文件

这里不做过多解释,看我操作就完了
---                   #起始
kind: Deployment    #资源的类型
apiVersion: app/v1   #版本
metadata:           #元数据
  name: myapache    #deployment的名字
spec:              #详细配置信息
 selector:         #选择器
   matchLabels:      #标签选择
     myapp: http      #标签,在pod中定义
 replicas: 1          #以上是pod和控制器的定义,副本数量
 template:            #以下是定义容器
   metadata:
     labels:
       myapp: http     #定义标签,在其他地方被引用
   spec:               #容器详细定义
     containers:       #容器定义
     - name: webcluster     #容器名字
       image: 192.168.242.10:5000/myos:http   #镜像地址
       stdin: false     #标准输入,默认是false,服务容器可以省略
       tty: false       #终端,默认false,服务容器可以省略
       ports:            #端口
       - protocol: TCP    #服务使用的协议
         containerPort: 80    #容器监听的端口
     restartPolicy: Always   #创建 Pod 时,如果 restartPolicy 不写,默认为:Always
                              容器重启策略Always



验证正确
kubectl  apply  -f  apache.yaml
kubectl  get deployments.apps
kubectl  get  pod 
kubectl   get pod  -o wide  查看更详细

3.DaemonSet控制器

daemonset是什么?

daemonset  每个机器都要启动运行的pod,确保全部或者一些node上运行pod副本
   1.当有node加入集群时,也会为他新增pod副本,当node从集群移除时,这些pod也会回收
   2.删除daemonset时将删除他创建的所有pod
   3.典型应用:ceph节点,监控节点,filebeat日志收集
   4.系统服务kube-proxy,flannel就是这种

daemonset和deployment的区别是什么?
   2者之间非常相似,区别在于不需要设置replicas,因为daemonset是每节点启动

了解daemonset是什么了,该干正事了,该怎么写呢

---
kind: DaemonSet      #控制器类型
apiVersion: apps/v1   #控制器版本
metadata:
  name: mynginx     #控制器名称
spec:
  selector:
    matchLabels:
      myapp: nginx
  template:           #以下容器模板配置
    metadata:
      labels:
       myapp: nginx
    spec:
      containers:
      - name: nginxcluster
        image: 192.168.242.10:5000/myos:nginx
        stdin: false
        tty: false
        ports:
        - protocol: TCP
          containerPort: 80
      restartPolicy: Always


怎么验证呢?
kubectl apply -f mynginx.yaml   #先跑一遍
kubectl  get  pod -o  wide   查看pod,你会发现3个pod分别运行在不同的节点

我们会发现一个有趣的现象,daemonset会调度在除master以外的所有节点上

master节点除了一些系统服务以外不会有其他pod

为什么其他pod不在master上部署,这里我们要说到污点策略了,后面会单独讲讲污点策略

污点策略
有哪些污点标签呢?
NoSchedule   不会被调度
PreferNoSchedule  尽量不调度
NoExecute   驱逐节点

查看master的污点策略
kubectl  describe  node  master
可以看到
Tains: node-role.kubernetes.io/master:NoSchedule
建议kubectl  describe nodes | grep -P “^Tains”  过滤一下

设置污点策略
kubectl  taint node node-0001  key=value:NoSchedule
删除污点策略
kubectl  taint  node  node-0001  key-
一定要加key,不加弄不了

容忍
有些时候我们需要无视污点标签进行操作,这种方式叫对污点的容忍
在哪加呢?
答案是pod.spec这里添加,不要加到容器配置那去了,是pod配置那
tolerations:                   #声明容忍规则
- key: "node-role.kubernetes.io/master"   #键key
  operator: "Equal"    #Equal完全匹配,Exists键存在即可
  value: ""         #值value
  effect: "NoSchedule"   #容忍策略

4.Job资源对象

job是什么?

job也叫单任务控制器,负责执行一次任务,保证任务在一个或者多个pod上执行成功

如果运行一个pod,当第一个pod失败或者被删除(比如:节点硬件失效或者重启)时,job对象会启动一个新pod,直到任务完成

删除job时,会清除所创建的全部pods

---
apiVersion: batch/v1   #当前格式版本
kind: Job         #当前资源类型
metadata:
  name:pi
spec:
  template:
   spec:
     containers:
     - name: pi
       image: 192.168.242.10:5000/myos:v1818
       command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]    #命令
     restartPolicy: OnFailure    #重启策略,只支持[Onfailure,Never]

5.Cronjob资源对象

job的升级版吧,重复多次任务控制器,他是基于时间管理的job,典型用法:周期性计划任务

Cronjob的本质是在约定的时间创建job

在job中会保留最后三次的状态,其他会清除

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-pi
spec:
  schedule: "*/1 * * * *"    #每分钟创建一个job
  jobTemplate:
    spec:
     template:
       spec:
        containers:
        - name: pi
          image: 192.168.242.10:5000/myos:v1818
          command: ["perl","-Mbignum=bpi","wle","print bpi(500)"]
        restartPolicy: OnFailure

6.其他对象

Statefulset有状态服务相关POD

   为了解决有状态服务设计的一种控制器

   基于PVC的稳定持久化存储

   稳定的网络标志,基于Headless  Service

   有序部署,有序扩展/收缩,基于init containers实现

Horizontal  pod autoscaling控制器

    自动扩展,可以根据业务的高峰和低谷自动水平扩展pod节点,提高资源利用率

花了一个下午写的,给个赞呗

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值