K8S知识点记录

一、kubernetes是什么?

个人实操学习,可以参考8S快速入门教程,很实用哦:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45

  1. k8s是什么?k8s是一个为容器化 应用提供集群部署和管理的开源工具,由 Google 开发。

  2. k8s优势
    高可用,不宕机,自动灾难回复;
    灰度更新,不影响版本升级;
    应用部署&服务版本管理,可以一键回滚到历史版本;
    方便伸缩扩展(应用伸缩,机器增减),提供负载均衡;

  3. k8s的部署方式:minikube,裸机部署,云平台

  4. K8S架构:Matser-Slave模式

  5. 什么是Pod? K8S调度、管理的最小单位。一个slave上可以运行一个或者多个Pod;Pod里面运行一个或多个应用容器。

  6. 什么是Deployment?
    deployment通过lable关联pod

Deployment是一个pods控制器,这种控制器并不直接管理pod,而
是通过管理replicaset来间接管理pod。即:deployment管理replicaset,replicaset管理pod。

  • Replication Controller(RC):保证一定数量的pod正常运行(副本伸缩,镜像升降)
  • ReplicatSet(RS):是RC的升级
  • Deployment:在RS基础上增加了版本管理。

控制器根据工作负载的又分为四类:
  • Deployment(默认):适合无状态应用,所有pod等价,可替代
  • StatulefulSet:有状态的应用,适合数据库这种类型。
  • DaemonSet:指定在一个节点上跑一个Pod,常常用来做监控,日志收集等
  • Job/CronJob:一次性任务或者根据时间重复性任务。
  1. 什么是Service?
    如下内容来自于:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/C0fakgwO

K8s中pos上的一个抽象层,主要是提供负载均衡和服务自动发现。

  • Service通过label关联pod
  • Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP
  • 提供了负载均衡功能,自动转发流量到不同 Pod
  • 可对集群外部提供访问端口
  • 集群内部可通过服务名字访问

k8s中pod是随时消亡与 重建的,ip经常发生改变,这样对外暴露服务比较难以管理,引入 service可以解决这个问题。

Service 对外暴露服务方式

  • ClusterIP(默认):仅在集群内部可访问;HeadLess(ClusterIP=None):当前方法不会分配ip,可以使用数据库中,通过数据库名称访问。
  • NodePort:暴露端口到节点,提供了集群外部访问的入口端口范围
    固定 30000 ~ 32767
  • LoadBalancer:需要负载均衡器(云服务商提供),会额外生成一个对外的IP
  • Ingress:是集群中服务的外部访问进行管理的API对象,智能路由,反向代理;Ingress资源仅支持用于转发HTTP流量的规则。
  1. 什么是StorageClass(SC),PersistentVolume(PV),PersistentVolumeClaim(PVC)?

数据存储的一种方式PV/PVC


PVC/PV博客:https://blog.csdn.net/hxpjava1/article/details/103751294
  • SC:将存储卷划分为不同的种类,例如:SSD,普通磁盘,本地磁盘,按需使用。 —>管理员预先创建存储类
  • PVC:对存储需求的一个申明,可以理解为一个申请单,系统根据这个申请单去找一个合适的 PV 还可以根据 PVC 自动创建 PV。—> 用户创建
  • PV:描述卷的具体信息,例如磁盘大小,访问模式。—>运维人员创建,目前交给k8s自动创建。
  1. k8s存储方式有哪些?
    参考博客:https://blog.csdn.net/qq_33261700/article/details/119549172
  • emptyDir:是pod调度到节点上时创建的一个空目录,当pod被删除时,emptydir中数据也随之删除,emptydir常用于容器间分享文件,或者用于创建临时目录。
  • hostpath:将宿主主机中的文件挂载pod中,Pod调度到哪个节点,则直接挂载到当前节点。
  • NFS:不限定节点,不受集群影响。nfs服务:网络文件存储系统。
  • PV/PVC:不限定节点,不受集群影响,安全稳定;需要云服务商提供,裸机集群是没有的。
  1. 什么是confiMap? ConfigMap是一个或多个key/value的形式保存在k8s中,内部可以管理变量也可以管理完整的配置文件内容。

  2. 什么是Secret?Secret是用来保存敏感数据的k8s资源,例如密码,token,或者秘钥

  3. 什么是Helm?Helm类似 npm,pip,docker hub, 可以理解为是一个软件库,可以方便快速的为我们的集群安装一些第三方软件。简单化我们前面写yml的步骤。

  4. Ingress是什么?Ingress 为外部访问集群提供了一个 统一 入口,避免了对外暴露集群端口。

二、k8s组件介绍

1.k8s架构图在这里插入图片描述

2.K8s组件

该图来自知乎:https://zhuanlan.zhihu.com/p/409971135
在这里插入图片描述

三、k8s对象介绍&命令介绍

K8S中的资源对象:
Pod
Deployment|StatefulSet|DaemonSet|Job|CronJob
Service
StorageClass|PersistentVolume|PersistentVolumeClaim
ConfiMap
Secret
在这里插入图片描述

四、k8s yaml详解

YAML文件参考博客:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45
Pod参考:https://blog.csdn.net/qq_32485197/article/details/88999075

1.Pod yaml

apiVersion: v1 #必选,可通过 kubectl apiversions查看
kind: Pod  #必选,资源类型:Pod,[Deployment,StatefulSet,DaemonSet,Job,CronJob],Service,[StorageClass,PersistentVolume,PersistentVolumeClaim],confiMap,Secret
metadata:   # 定义资源的元数据信息
  name: string  #必选,定义资源名称
  namespace: string  #必选,指定命令空间
  labels:   # 可选,自定义标签
    - name: string  #可选,自定义k-v值
  annotations:  #可选,自定义注释列表
    - name: string
spec:
  containers: #必选,pod中定义容器具体信息
    - name: string
      image: string
      imagePullPolicy: string  #镜像拉取方式:总是在线拉取;只使用本地镜像;优先使用本地,没有则在线拉取。[Always|Never|IfNotPresent]
      command: [string]  #容器启动命令列表
      args: [strings]  #容器启动命令参数
      workingDir: string  #指定容器的工作目录
      volumeMounts: #指定容器挂载的数据卷信息
        - name: string #卷名字
          mountPath: string  #挂载路径,少于512个字符
          readOnly: boolean  #指定是否为只读模式
      ports:  #指定需要暴露的端口
        - name: string  #端口名称
          containerPort: int #容器端口号
          hostPort: int   #宿主机端口
          protocol: string  #端口协议
      env:  #指定容器运行前需要的环境变量
        - name: string
          value: string 
      resources:  #资源限制和请求设置
        limits: #资源限制设置
          cpu: int  #cpu限制,单位为core数
          memory: strin  #内存限制,单位可以为Mib/Gib
        requests:  #资源请求设置
          cpu: string  #设置容器启动的cpu要求
          memory: string  #设置容器内存要求
      livenessProbe:  #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
        exec: #对pod的exec检查方式,进入容器执行如下命令
          command: [string]  #定制检查脚本
        httpGet:  # httpGet检测
          path: string
          port: number
          host: string
          scheme: string
          HttpHeaders: 
            - name: string
              value: string
        tcpSocket: #tcp检测
          port: number
        initialDelaySeconds: 5   #容器启动完成后,kubelet在执行第一次探测前应该等待5秒默认是0秒,最小值是0。
        periodSeconds: 60  #指定kubelet每隔60秒执行一次存活探测。默认是10秒。最小值是1
        timeoutSeconds: 3   #对容器健康检查探测等待响应的超时时间为3秒,默认1秒
        successThreshold: 1   #检测到有1次成功则认为服务是`就绪`
        failureThreshold: 5    #检测到有5次失败则认为服务是`未就绪`。默认值是 3,最小值是 1。
      restartPolicy: string #pod重启策略[Always|Never|OnFailure],Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
      nodeSelector:   #定义Node的label过滤标签,以key:value的格式指定。节点选择,先给主机打标签kubectl label nodes kube-node01 key1=value1 
        key1: value1
      imagePullSecrets: #Pull镜像时使用的secret名称,以name:secretKeyName格式指定
        - name: string
      hostNetwork: false    #是否使用主机网络模式,默认为false。如果设置为true,表示使用宿主机网络,不使用docker网桥
      volumes:   #在该pod上定义共享存储卷列表
        - name: string     #共享存储卷名称 (volumes类型有很多种)
          emptyDir: {}     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值, 存储卷三种方式:emptyDir,gitRepo,hostPath;emptyDir:一个pod创建两个容器,一个pod提供请求服务,另一个pod提供文件存储,pod删除,存储卷就删除;gitRepo:使用docker镜像提供存储;hostPath:宿主机路径,pod删除,存储卷还在(在多个node节点要创建路径)。nfs:使用共享存储(多个pod要在共享存储中创建多个目录)。
          hostPath: string    #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
            path: string     #Pod所在宿主机的目录,将被用于同期中mount的目录
          secret:      #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
            scretname: string  
            items:     
              - key: string
                path: string
          configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
            name: string
            items:
             - key: string
               path: string

2.Deployment

apiVersion: v1
kind: Service
metadata:
  name: string
  namespace: string
spec:
  replicas: 10 #指定副本的数量
  selector:  #用来查找关联的Pod,通过标签匹配
    matchLabels:
      - name: string  #根据如下pod中的 labels中的字段来填写
  template:  #定义Pod
    metadata:
      name: string
      namespace: string
      labels:
        - name: string
      containers:  #可以定义多个容器,但是我们为了方便管理,一个Pod中只跑一个容器
        - name: string
          image: url
        - name: string1
          image: url1

3.Service

apiVersion: v1
kind: Service
metadata:
  name: string
spec:
  selector:  #service也是通过label匹配的
    name: string
  type: CluserIp #转发K8S后端服务的四种方式: cluserIp(默认),仅仅在集群内部可用;NodePort,暴露端口到节点,提供集群外部访问入口,端口范围默认30000到32767;loadBlance,需要负载均衡器,会额外生成一个对外的IP;Headless(clusterIp=None),适合数据库,不分配IP。
  port:
    - port: int
      targetPort: int
  
  # type: NodePort  #该段注释为多端口暴露
  # port:
  #   - port: int
  #     name: string
  #     targetPort: int
  #     nodePort: 30000
  #   - port: int
  #     name: string
  #     targetPort: int
  #     nodePort: 31000

4.StorageClass(SG)

#创建SC,运维人员以来SC动态创建PV核心API: StorageClass(可以自动创建PV的机制)
# https://www.cnblogs.com/panwenbin-logs/p/12196286.html
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: slow
provisioner: kubernetes.io/aws-ebs  #provisioner 存储分配器
parameters: #存储参数
  type: io1
  iopsPerGB: "10"
  fsType: ext4
reclaimPolicy: delete      #回收策略: Delete 或者 Retain,没有指定默认为Delete。

5.PersistentVolumeCliam(PVC)

#创建PVC,用户提出创建需求
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongodata
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: "local-storage"
  resources:
    requests:
      storage: 2Gi

6.PersistentVolume(PV)

# 创建PV,运维人员需要不断的创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongodata
spec:
  capacity:  #PV容量
    storage: 2Gi
  volumeMode: Filesystem  # Filesystem(文件系统) Block(块)
  accessModes:  #ReadWriteOnce:可以被一个node读写。缩写为RWO;ReadOnlyMany:可以被多个node读取。缩写为ROX。;ReadWriteMany:可以摆多个node读写。缩写为RWX。
    - ReadWriteOnce       # 卷可以被一个节点以读写方式挂载
  persistentVolumeReclaimPolicy: Delete  #回收机制
  storageClassName: local-storage  #PV和PVC通过storageClassName绑定
  local:
    path: /root/data
  nodeAffinity:
    required:
      # 通过 hostname 限定在某个节点创建存储卷
      nodeSelectorTerms: # nodeAffinity属性是必须要指定的,因为local模式一定要确定数据保存在哪个机器
        - matchExpressions: #label匹配的volumne绑定PVC上
            - key: kubernetes.io/hostname
              operator: In
              values:
                - node2

7.ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongoHost: mongodb-0.mongodb

8.Secret

apiVersion: v1
kind: Secret
metadata:
  name: mongo-secret
# Opaque 用户定义的任意数据,更多类型介绍 https://kubernetes.io/zh/docs/concepts/configuration/secret/#secret-types
type: Opaque  #三种类型:Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中;kubernetes.io/dockerconfigjson : 用来存储私有docker registry的认证信息。
data:
  # 数据要 base64。https://tools.fun/base64.html
  mongo-username: bW9uZ291c2Vy
  mongo-password: bW9uZ29wYXNz

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值