• k8s实战入门篇



    入门实战
    本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。

    一、 Namespace

    Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。

    默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

    可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。

    也就是资源之间相互隔离。

    kubernetes在集群启动之后,会默认创建几个namespace

    [root@master ~]# kubectl  get namespace
    NAME              STATUS   AGE
    default           Active   45h     #  所有未指定Namespace的对象都会被分配在default命名空间
    kube-node-lease   Active   45h     #  集群节点之间的心跳维护,v1.13开始引入
    kube-public       Active   45h     #  此命名空间下的资源可以被所有人访问(包括未认证用户)
    kube-system       Active   45h     #  所有由Kubernetes系统创建的资源都处于这个命名空间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    下面来看namespace资源的具体操作:
    查看

    1、查看所有的ns 命令:kubectl get ns

    [root@master ~]# kubectl get ns
    NAME              STATUS   AGE
    default           Active   45h
    kube-node-lease   Active   45h
    kube-public       Active   45h     
    kube-system       Active   45h     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、查看指定的ns 命令:kubectl get ns ns名称

    [root@master ~]# kubectl get ns default
    NAME      STATUS   AGE
    default   Active   45h
    
    • 1
    • 2
    • 3

    3、指定输出格式 命令:kubectl get ns ns名称 -o 格式参数
    kubernetes支持的格式有很多,比较常见的是wide、json、yaml

    [root@master ~]# kubectl get ns default -o yaml
    apiVersion: v1     //显示版本
    kind: Namespace    //对命名空间操作
    metadata:
      creationTimestamp: "2022-11-17T04:27:00Z"    //创建的时间
      labels:        //标签
        kubernetes.io/metadata.name: default
      name: default      //在那操作
      resourceVersion: "191"
      uid: 3debe6c9-f2ed-483a-b938-c363d5755036
    spec:
      finalizers:
      - Kubernetes   //对谁操作
    status:  //状态
      phase: Active 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4.可以用explain看标准文档获取参数——一般用于写yaml文件时用

    [root@master ~]# kubectl explain ns
    KIND:     Namespace
    VERSION:  v1
    
    DESCRIPTION:
         Namespace provides a scope for Names. Use of multiple namespaces is
         optional.
    
    FIELDS:
       apiVersion	<string>
         APIVersion defines the versioned schema of this representation of an
         object. Servers should convert recognized schemas to the latest int
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5、查看ns详情 命令:kubectl describe ns ns名称

    [root@master ~]# kubectl describe ns default
    Name:         default
    Labels:       kubernetes.io/metadata.name=default
    Annotations:  <none>
    Status:       Active  	# Active 命名空间正在使用中  Terminating 正在删除命名空间
    No resource quota.  # ResourceQuota 针对namespace做的资源限制
    No LimitRange resource.  # LimitRange针对namespace中的每个组件做的资源限制
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6、创建namespace

    [root@master ~]# kubectl create ns dev
    namespace/dev created
    删除
    # 删除namespace
    [root@master ~]# kubectl delete ns dev
    namespace "dev" deleted
    配置方式
    首先准备一个yaml文件:ns-dev.yaml
    //只用于简单的命名空间话只需这几步
    [root@master ~]# cat ns-hh.yaml 
    apiVersion: v1
    kind: Namespace
    metadata: 
      name: ll
    然后就可以执行对应的创建和删除命令了:
    创建:
    [root@master ~]# kubectl create -f ns-hh.yaml
    namespace/ll created
    [root@master ~]# kubectl get ns ll
    NAME   STATUS   AGE
    ll     Active   78s
    删除:kubectl delete -f ns-dev.yaml
    [root@master ~]# kubectl delete -f ns-hh.yaml 
    namespace "ll" deleted
    [root@master ~]# kubectl get ns ll
    Error from server (NotFound): namespaces "ll" not found
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    二、 Pod

    Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
    Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。

    kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:

    [root@master ~]# kubectl get pod -n
    • 相关阅读:
      vulnhub-xxe lab: 1
      X86 bios 中断大全
      springboot2.3.7升级到springboot2.7.2
      Linux安装Anaconda(Anaconda3-2022.10-Linux-x86_64.sh版本)
      安装visual studio报错“无法安装msodbcsql“
      【174】Java解析文件名中的方括号表达式
      基于Java+MySQL的三维模型素材交易平台设计
      Javascript----原型链
      什么是SpringMVC?SpringMVC之hello.jsp实现过程 问题:SpringMVC在JSP页面取不到ModelAndView中的值(已解决)
      修改CMD默认路径
    • 原文地址:https://blog.csdn.net/cxyxt/article/details/128084910