一、kubernetes的基础知识

K8S的基础概念
K8S是由多台主机构成的一个大集群,在集群中运行容器,而这些容器都受到K8S的管理。可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

K8S的特性

  1. 自动装箱:基于资源依赖打包,自动完成新容器的部署而不影响旧容器的可用性
  2. 自我修复:基于容器的轻量性,能快速重新启动容器
  3. 自动扩展:根据业务量自动调整业务容器的数量
  4. 服务发现:业务容器的新建,会自动关联至前端负载上
  5. 负载均衡:将用户请求负载至多台业务容器
  6. 自动发布和回滚:修改容器配置信息,使得业务容器的版本更新和回滚
  7. 密钥和配置管理:当启动容器时,自动加载配置中心的配置信息,无需下载至容器中
  8. 存储排版:存储卷自动供给业务容器
  9. 任务批处理执行

K8S集群的组件
K8S集群分为两个角色:

  1. master: 管理中心,负责管理和调度集群的资源在node上运行
  2. node:使用集群资源运行容器,提供服务

Master上的核心组件

  1. api server : 负责响应用户的管理请求、进行指挥协调K8S所有组件进行工作
  2. scheduler: 从众多Node节点中选取最优node节点处理请求
  3. controller-manager:是控制器的管理器,控制器的作用是确保各资源在node节点上按需运行, 而控制器的管理器则确保控制器正常运行。
  4. etcd 保存K8S的配置信息和各种资源的状态信息。当发生变化时,etcd 会通知K8S的相关组件

node上的核心组件

  1. kubelet 用于和master上的api server交互,管理Node节点中的资源
  2. docker 作为容器引擎,提供容器的实现。
  3. kube-proxy 将service的流量转发到对应endpoint
  4. flannel 维持各个节点上pod之间的通信。

K8S集群架构图K8S集群架构图
K8S的核心资源对象

  1. workload:Pod,controller-manager(各类控制器)
  2. 服务发现及负载均衡相关:service(四层负载),ingress(实现url七层负载)
  3. 配置与存储相关的:
    Volume基于CSI容器接口来扩展的第三方存储卷,本地是分布式存储,
    configmap作为配置信息的存储,
    Secret敏感配置信息的存储
  4. 集群级的资源 Namespace,Node,Role,ClusterRole,Rolebind,ClusterRolebind
  5. 元数据型资源 HPA,PodTemplate,LimitRange

这些核心资源后面会进行单独列文详解

K8S资源的管理
K8S所有资源的管理都是向api-server发送资源定义,再有api-server调度各组件协调工作以实现请求。但api-server仅接收JSON格式的资源定义。

使用kubectl命令操作时都是自动将yaml格式转换为JSON格式发送给api-server

yaml格式更方便人写,yaml格式提供的内容能被无损转换为JSON格式
使用方式:kubectl apply -f yaml文件

查看某类资源的定义说明

kubectl explain pod  ##资源的定义内容分层进行,例如kubectl explain pod.spec

查看指定资源的配置清单

kubectl  get  pod  myapp  -o  yaml

大部分资源的配置清单内容如下
apiVersion:标记资源版本 格式group/version 使用命令kebectl api-version查看
kind:标记资源类别
metadata:元数据

  • name:资源实例化后的名称,在同一个namespace下的同类资源中必须是唯一的
  • namespace:名称空间
  • labels:资源标签,格式为键值对
  • annotation:资源注解
  • uid:在K8S中的唯一标识,由系统自动生成

spec:由用户定义的期望的状态(通过kubectl explain 资源.spec 获取更详细)
status:当前系统的状态。本字段由K8S生成,K8s会不断调整集群使其最终达到spec

举例一个pod实例的定义清单,如下:

apiVersion: v1
kind: Pod
metadata:
   name: pod-demo
   namespace: default
   labels:
     app: myapp
     tier: frontend
spec:
   containers:
   - name: myapp
     image: 192.168.80.146:5000/my_ngx:v1

创建此Pod

[root@k8s-master k8s-yaml]# kubectl create -f my_ngx_v1.yaml 
pod/pod-demo created
[root@k8s-master k8s-yaml]# kubectl get pod -w
NAME       READY     STATUS              RESTARTS   AGE
pod-demo   0/1       ContainerCreating   0          9s
pod-demo   1/1       Running   0         11s

每个资源都有引用PATH
/api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME

资源的label
label是Kubernetes系统中的一个核心概念。label以key/value键值对的形式附加到任何资源上,如Pod、Service、Node和控制器等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。

资源实例都有自己的label,也会有自己的label selector 用于选择心仪的资源进行关联;

下一篇:二、kubernetes之Pod创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值