#云原生征文#Kubernetes基础知识 原创

急需吃饭的小谢
发布于 2022-5-13 16:00
浏览
1收藏

@[TOC]

Kubernetes基础知识

kubernetes整体分为控制平面组件和节点组件
节点组件有kubelet,kube-proxy和容器运行时
容器运行时指的是负责运行容器的软件比如docker,kube-proxy负责网络代理,kubelet用来管理Kubernetes创建的容器,保证容器运行状态良好
控制平面节点有API Server,这个是访问的入口,调度器主要负责调度pod运行到工作节点中,控制器负责管理集群状态,etcd是存储服务,保存集群数据,而pod就是一个虚拟主机或者物理主机,里面运行着各种容器,通过共享存储卷实现容器间的数据共享,当pod出现错误的时候通过控制器来管理pod
Kubernetes至少有一个主控节点和三个工作节点,主控节点中有控制平面的组件,工作节点中有节点组件
Kubernetes提供了各种各样的控制器来管理这些pod,下面介绍一下Kubernetes的控制器

ConfigMap 配置表

这里定义name为app-config的ConfigMap,以key-value的形式存储

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  application.properties:
    server.port = 9090
    spring.application.name = myapp

这个ConfigMap配置的是服务的端口号和服务名,名为app-config,我们看一下怎么使用这个配置表

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app
  labels:
    app: demo-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      containers:
        - name: app
          image: localhost:5000/demo-app
          env:
            - name: SPRING_CONFIG_LOCATION
              value: /etc/config/
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: app-config

这里的Deployment定义中configMap指定app-config,这个文件存储在了/etc/config中

控制器

ReplicationController

ReplicationController保证一定数量的pod正常运行,当比指定pod数量少的时候就添加pod,当多于pod数量的时候就删除节点

ReplicaSet副本集

ReplicaSet相当于ReplicationController的升级版,副本集模式也是创建指定数量的副本,它和ReplicationController的区别在于它的支持基于集合的标签选择算符,配置文件如下:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

配置文件中replicas变量指定的就是副本数量,spec:containers:中指定pod节点,但是一般我们不使用ReplicaSet因为它没有更新的功能,使用Deployment来替代和管理ReplicaSet
创建ReplicaSet命令

kubectl apply -f  ReplicaSet.yaml

查看创建的pod

kubectl get pods

所有控制器的yaml文件的运行都是这样的

Deployment部署

Deployment最大的特点就是可以对副本集的pod进行滚动更新,滚动更新能够保证服务的不中断,当创建一定数量后再删除旧的pod节点,这也是生产中经常使用的pod控制器,代码如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

和ReplicaSet副本集控制器的区别就是kind不同,其他都是相同的

StatefulSet有状态集

有状态集就是确定每一个pod的创建顺序,创建副本的时候会根据标识符来对pdi进行命名:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
    - port: 80
      name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  serviceName: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.17
          ports:
            - containerPort: 80
              name: web

通过metadata:name: 来指定创建的pod名称分别的Nginx-0、Nginx-1、Nginx-2,在扩缩容方面,删除pod节点的时候是按照创建节点的倒序进行删除的
DaemonSet守护程序集
DaemonSet顾名思义就是守护的程序集,和守护线程差不多,它会为节点创建一个pod,包括节点加入集群中,删除节点的时候,创建的pod也会删除,和守护线程一样同生共死

Job一次性的任务

Job是设置一次性的任务,job在pod的生命周期中只适合restartPolicy重启策略为OnFailure和Never,对于Job我们还可以设置任务完成或失败后存活时间,通过参数.spec.ttlSecondsAfterFinished来设置

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
      - name: myjob
        image: busybox
        command: ["echo",  "hello k8s job"]
      restartPolicy: Never

这就是这个pod运行成功结束后100s后被删掉

CronJob定时任务

CronJob就是利用定时任务表达式来设置定时执行某个pod

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello Kubernetes
          restartPolicy: OnFailure

每隔一分钟输出一次时间和输出Hello Kubernetes信息

总结

这篇主要主要讲了Kubernetes的相关知识点和各种组件,主要内容是控制器的定义和特点,我们生产中经常用的控制器的Deployment,它支持滚动更新。

【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
2
收藏 1
回复
举报
回复
    相关推荐