首页 > 其他分享 >K8S核心技术

K8S核心技术

时间:2022-12-05 09:56:59浏览次数:42  
标签:容器 kubectl nginx 核心技术 yaml pod K8S Pod

一、命令行工具Kubectl

kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能 够在集群上进行容器化应用的安装部署

1、基本语法

kubectl [command] [type] [name] [flags]

  • comand:指定要对资源执行的操作,例如 create、get、describe 和 delete
  • TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的 形式
  • NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源
  • flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口

2、kubectl help 获取更多信息

kubectl --help
image

image

image

image

二、资源编排(yml文件)

1、YAML 文件概述

k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也 就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文 件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了

2、YAML 文件书写格式

  • 使用空格做为缩进
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 低版本缩进时不允许使用 Tab 键,只允许使用空格
  • 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略

3、资源清单描述

在 k8s 中,一般使用 YAML 格式的文件来创建符合我们预期期望的 pod,这样的 YAML 文件称为资源清单

(1)常用字段

image

(2)主要字段

image
image
image
image

(3)额外的参数

image

写一个例子:

快速编写yaml文件的方式

  • ①使用kubectl create命令生成yaml文件
kubectl create deptoyment web --image=nginx -o yaml --dry-run
  • ②使用kubectl get命令导出yaml文件
kubectl get deploy nginx -o=yaml --export > qiu.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: null
  generation: 1
  labels:
    app: nginx
  managedFields:
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:app: {}
      f:spec:
        f:progressDeadlineSeconds: {}
        f:replicas: {}
        f:revisionHistoryLimit: {}
        f:selector:
          f:matchLabels:
            .: {}
            f:app: {}
        f:strategy:
          f:rollingUpdate:
            .: {}
            f:maxSurge: {}
            f:maxUnavailable: {}
          f:type: {}
        f:template:
          f:metadata:
            f:labels:
              .: {}
              f:app: {}
          f:spec:
            f:containers:
              k:{"name":"nginx"}:
                .: {}
                f:image: {}
                f:imagePullPolicy: {}
                f:name: {}
                f:resources: {}
                f:terminationMessagePath: {}
                f:terminationMessagePolicy: {}
            f:dnsPolicy: {}
            f:restartPolicy: {}
            f:schedulerName: {}
            f:securityContext: {}
            f:terminationGracePeriodSeconds: {}
    manager: kubectl
    operation: Update
    time: "2022-08-30T09:27:43Z"
  - apiVersion: apps/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:deployment.kubernetes.io/revision: {}
      f:status:
        f:availableReplicas: {}
        f:conditions:
          .: {}
          k:{"type":"Available"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
          k:{"type":"Progressing"}:
            .: {}
            f:lastTransitionTime: {}
            f:lastUpdateTime: {}
            f:message: {}
            f:reason: {}
            f:status: {}
            f:type: {}
        f:observedGeneration: {}
        f:readyReplicas: {}
        f:replicas: {}
        f:updatedReplicas: {}
    manager: kube-controller-manager
    operation: Update
    time: "2022-09-01T01:18:57Z"
  name: nginx
  selfLink: /apis/apps/v1/namespaces/default/deployments/nginx
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: {}

三、POD

1、pod基本概念

Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最 小资源对象模型,也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支 撑或者扩展 Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的,Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的,PersistentVolume 资源对象是用来为 Pod 提供存储等等,k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成

Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause 容器。Pause 容器对应的镜 像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器

  • pod是k8s中最小部署单元
  • 一个pod包含对个容器
  • 一个pod中容器共享网络命名空间
  • pod是短暂的

2、pod存在的意义

image

pod存在为了亲密性应用

  • 两个应用之间进行交互
  • 网络之间的调用
  • 两个应用需要频繁调用

3、pod实现机制

(1)共享网络

  • 通过pause容器把其他容器加入pause容器中,让所有业务容器在同一个名称空间中,可以实现网络共享

(2)共享存储

  • 引入数据卷Volume,使用Volume进行持久化存储

4、pod镜像拉取策略

imagePullPolicy:

  • IfNotPresent: 默认值,镜像在宿主机上不存在时才拉取
  • Always: 每次创建Pod都会重新拉取一次镜像
  • Never: pod永远不会主动拉取这个镜像

5、pod资源限制

每个 Pod 都可以对其能使用的服务器上的计算资源设置限额,Kubernetes 中可以设置限额 的计算资源有 CPU 与 Memory 两种,其中 CPU 的资源单位为 CPU 数量,是一个绝对值而非相 对值。Memory 配额也是一个绝对值,它的单 位是内存字节数。
Kubernetes 里,一个计算资源进行配额限定需要设定以下两个参数: Requests 该资源最 小申请数量,系统必须满足要求 Limits 该资源最大允许使用的量,不能突破,当容器试 图使用超过这个量的资源时,可能会被 Kubernetes Kill 并重启

例子:
image
上述配置表明 MySQL 容器申请最少 0.25 个 CPU 以及 64MiB 内存,在运行过程中容器所能使 用的资源配额为 0.5 个 CPU 以及 128MiB 内存。

6、pod重启机制

image

7、pod健康检查

image
image

8、pod调度策略

创建pod流程:
image

节点亲和性:
image

节点选择器:
image

污点和污点容忍:
image

四、Controller

1、什么是Controller

  • 在器群上管理和运行容器的对象

2、Pod和Controller的关系

  • Pod是通过Controller实现应用的运维,比如:伸缩,滚动升级等
  • Pod和Controller之间通过Lable和Selector标签简历关系

3、Deployment控制器的应用场景

  • 部署无状态应用
  • 管理Pod和ReplicaSet
  • 部署,滚动升级
    主要应用于:web服务,微服务

4、yaml文件字段说明

image

5、Deployment控制器部署应用

# 创建一个yaml文件,并导出
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml

# 使用yaml部署应用
kubectl apply -f web.yaml

# 查看应用
kubectl get pods

# 对外发布
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml

# 查看状态
kubectl get pods,svc

image

6、升级回滚

# 执行set指定相应的镜像image
kubectl set image deployment web nginx=nginx:1.15

# 查看升级状态
kubectl rollout status deployment web

# 查看升级版本
kubectl rollout history deployment web

# 回滚到上一个版本
kubectl rollout undo deployment web

# 回滚到指定版本
kubectl rollout undo deployment web --to-reversion=2

image

7、弹性伸缩

# 创建更多的副本
kubectl scale deployment web --replicas=3

五、Service

1、service存在的意义

(1)防止pod失联,作为注册中心起到服务发现的作用
(2)定义一组pod访问的策略(负载均衡)

2、pod和service的关系

(1)根据label和selector标签建立关联的
(2)通过service实现pod的负载均衡

3、常用的service类型

(1)ClusterIP:集群内部访问
(2)NodePort:对外访问应用使用
(3)LoadBalancer:对外访问应用使用,公有云

标签:容器,kubectl,nginx,核心技术,yaml,pod,K8S,Pod
From: https://www.cnblogs.com/qbbit/p/16642430.html

相关文章

  • [k8s] 删除Terminating状态的namespace
    ns=ingress-nginxkubectlgetnamespace$ns-ojson>tmp.jsonkubectlproxy--port=8081另起一个连接curl-k-H"Content-Type:application/json"-XPUT--data......
  • Kubernetes(K8S) helm 安装
    Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。Helm有3个重要概念:helm......
  • K8S-service介绍
    Service介绍在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解......
  • k8s高级存储(PV、PVC)
    高级存储前面已经学习了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不现实。为了能够屏......
  • Kubeadm高可用安装k8s集群-补充说明
    1.1k8s1.24管理用户无token处理1.24版本及以上关闭了自动生成admin-user-token的配置[root@k8s-master01dashboard]#kubectl-nkube-systemgetsecret|grepadmi......
  • k8s源码分析7-API核心服务Authorization的认证及鉴权
    一、Authentication认证本节重点总结:Authentication的目的Kubernetes使用身份认证插件利用下面的策略来认证API请求的身份客户端证书持有者令牌(BearerToke......
  • 进击的K8S:Kubernetes基础概念
    Kubernetes简介Kubernetes简称K8S(因为k和s中间有8个字母),是一个开源的容器集群管理平台,基于Go语言编写。使用K8S,将简化分布式系统上的容器应用部署,使得开发人员可以专注于......
  • K8S 部署电商项目
     Ingress和IngressController概述在k8s中为什么会有service这个概念?Pod漂移问题Kubernetes具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其......
  • k8s篇-k8s集群架构及组件详解【史上最详细】
    Okubernetes简介k8s是什么k8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可以促进声明式配置和自动化。k8s能做什么1)服务发现和负载......
  • K8S 核心组件 kubelet 与 kube-proxy 分析
    kubeletkubelet进程用于处理master下发的任务,管理pod中的容器,注册自身所在的节点.节点管理启动参数说明--register-node#如果设置为true则会向apiserver......