JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

kubernetes基础概念入门 kubernetes主要功能

wys521 2024-10-13 08:07:53 精选教程 20 ℃ 0 评论

Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.

k8s是一个开源的云操作系统,能够用来自动化部署,扩缩容和管理我们的容器应用,简单来说,就是提供了容器编排和管理功能的系统

架构图

Master:

  • ApiServer:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • Scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • Controller-Manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • ETCD:保存了整个集群的所有信息;

node:

  • Kubelet :负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • docker:负责镜像管理以及Pod和容器的真正运行(CRI);
  • kubeproxy:负责为Service提供cluster内部的服务发现和负载均衡;

核心附件:

  • CoreDNS:负责为整个集群提供DNS服务
  • Dashboard:提供一个简单的GUI界面来查看集群信息和操作集群
  • Ingress:为服务提供外网入口,提供域名访问服务功能
  • Flannel:为集群之间提供网络连接服务,分配pod和serviceIP功能

基本概念

  1. 容器:一种轻量级、可移植、自包含的软件打包技术
  2. Master:为用户可和服暴露API,以最优方式调度工作负载,编排其他组件
  3. Pod: k8s最小调度单位,封装了一个或者多个容器的资源对象,Pod内所有容器共享命名空间和存储资源,类比豌豆荚
  4. 资源标签:一个键值型(key/value)数据,辨别pod的属性,或者帮助Scheduler来进行调度
  5. 标签选择器: Lable Selector,根据标签过滤符合条件的资源对象
  6. namespace:资源对象的隔离,Service、Deployment、Pod
  7. Volume:存储卷,独立于容器文件系统的存储空间,为容器提供持久存储能力
  8. Pod控制器:用户不会直接部署管理pod,借助另一个抽象的工具【控制器(control) 】进行管理,保证副本数量达到预期

以下是Control的类型和功能列表


  • 命名空间
  • 作用:资源配额的隔离:CPU、Memory

    kubectl get namespace
    NAME              STATUS   AGE
    default           Active   28d
    kube-public       Active   28d
    kube-system       Active   28d

    创建一个命名空间

    $ cat namesapce-dev.yaml 
    apiVersion: v1 
    kind: Namespace 
    metadata:  
      name: dev 
    $ kubectl create -f namesapce-dev.yaml


    简单命令创建

    kubectl create ns dev
    kubectl get all -n kube-system    #查看一个命名空间下所有的内容

    注意:不同命名空间下SvcIP、PodIP是可以访问的,是对名字的隔离

    k8s集群的网络

    目的:

    所有Pod之间不需要经过NAT直接通信,都在一个扁平的网络空间内

    所有集群内节点可不经过NAT机制直接和所有容器进行通信

    分类:

    1. 各主机自身的网络,地址配置于主机网络接口,配置于k8s集群构建之前,不能由k8s管理
    2. k8s集群专用于pod资源对象的虚拟网络,配置在Pod的容器接口上,为Pod设定IP和网络,借助于CNI插件实现,可部署k8s集群之外或者托管在集群上,需要在构建集群有管理员定义
    3. 专用于service资源对象的虚拟网络,不配置在任何主机或者容器的网络接口,通过node的kube-proxy配置为iptables或者ipvs规则,网络在集群创建时指定Kubernetes 资源对象

    Kubernetes 资源对象


    资源类型( resource type )是指在URL 中使用的名称,如Pod 、Namespace 和Service等,其URL 格式为“ GROUPNERSION度ESOURCE ”,如apps/v1/deployment 。

    • apiVersion 版本号,例如 v1
    • kind 代表着资源对象所属的类 Pod/Deployment/Service/Namespace
    • metadata 字段为资源提供元数据信息,如名称、隶属的名称空间和标签等;
    • spec 则用于定义用户期望的状态,不同的资源类型,其状态的意义也各有不同
    • status 则记录着活动对象的当前状态信息,它由Kubemetes 系统自行维护,对用户来说为只读字段

    如果是YAML 格式的清单文件,多个资源彼此之间要使用—

    单独的一行进行资源分割,这样,多个资源就将以清单文件中定义的次序被create 、apply等子命令调用

    kubectl api-versions 查看现有api的版本

    kubectl常用命令

    kubectl 的命令分类:


    1、创建一个nginx的deployment
    $ kubectl run nginx-deploy --image=nginx:1.12 --port=80 --replicas=2
    
    2、对nginx-deploy进行扩缩容
    $ kubectl scale deploy/nginx-deploy --replicas=3
    
    3、对nginx-deploy进行服务端口暴露,通过Service的8080端口转发至容器的80端口上
    $ kubectl expose deployment nginx-deploy --port=8080 --target-port=80
    
    4、将nginx-deploy暴露为NortPort
    $ kubectl expose deployment nginx-deploy --type="NodePort" --port=80 --name=my_nginx_web
    
    5、打印容器日志
    $ kubectl logs coredns-7b47bbb54c-q6dkr -n kube-system -f
    .:53
    [INFO] plugin/reload: Running configuration MD5 = 1588bb3af386f386c40674040e2b3399
       ______                ____  _   _______
      / ____/___  ________  / __ \/ | / / ___/      ~ CoreDNS-1.6.3
     / /   / __ \/ ___/ _ \/ / / /  |/ /\__ \       ~ linux/amd64, go1.12.9, 37b9550
    / /___/ /_/ / /  /  __/ /_/ / /|  /___/ /
    \____/\____/_/   \___/_____/_/ |_//____/
    
    -f 用于持续监控指定容器中的日志输出,类似于tail -f
    
    6、进入容器执行命令
    格式: kubectl exec -it <Pod-name> /bin/bash  
    #进入容器,如果一个pod里面有多个容器加 -c <container name> 指定容器
    $ kubectl exec -it nginx-deploy-64c7978669-2x5xz -n kube-system /bin/bash
    
    7、删除某个命名空间所有pod
    $ kubectl delete pods --all -n kube-public
    
    8、查看版本
    $ kubectl version --short       #查看版本,也可以使用kubectl get node查看
    
    Client Version: v1.15.0 
    Server Version: v1.15.0
    
    9、运行一个测试容器
    $ kubectl run client --image=busybox --restart=Never -it -- /bin/sh
    
    10、命令的测试运行,选项--dry-run
    $ kubectl run nginx-deploy --image=nginx:1.12 --port=80 --replicas=2 --dry-run
    
    11、给指定节点打标签
    $ kubectl label nodes master disktype=ssd
    
    12、查看集群所有支持的api
    kubectl api-versions 
    

    Tags:

    本文暂时没有评论,来添加一个吧(●'◡'●)

    欢迎 发表评论:

    最近发表
    标签列表