k8s 基础&环境搭建

简介: k8s 基础&环境搭建

0x01 背景

背景容器部署时代,容器类似于 VM,但是具有被放宽的隔离属性,可以在应用程序之间共享操作系统,因此容器被认

为是轻量级的隔离。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等,由于它们与基础架构分

离,因此可以跨云和 OS 发行版本进行移植随着微服务、容器化等技术的发展,解决了资源利用率不高的问题,但是随之而来却是如何进行容器管理,过多的

容器使得运维工作也成为了一种负担,因此容器编排对于大型依托于容器化部署的分布式系统至关重要

kubernetes 集群结构

Master 节点

Master 节点是 Kubernetes 集群的控制节点,每个 Kubernetes 集群里至少有一个 Master 节点,它负责整个集群的决策(如调度),发现和响应集群的事件。Master 节点可以运行在集群中的任意一个节点上,但是最好将Master 节点作为一个独立节点,不在该节点上创建容器,因为如果该节点出现问题导致宕机或不可用,整个集群的管理就会失效

Node 节点

Node 节点是 Kubernetes 集群的工作节点,每个集群中至少需要一台 Node 节点,它负责真正的运行 Pod,当某个 Node 节点出现问题而导致宕机时,Master 会自动将该节点上的 Pod 调度到其他节点。Node 节点可以运行在物理机上,也可以运行在虚拟机中

pod

Pod 里面包含一个或多个容器,在 yaml 中的 containers 中通过写多个 name 来创建多个容器

yaml 文件详解

指定api版本标签


apiVersion: apps/v1

定义资源的类型/角色,deployment为副本控制器

此处资源类型可以是Deployment、Job、Ingress、Service等


kind: Deployment

定义资源的元数据信息,比如资源的名称、namespace、标签等信息


metadata:

定义资源的名称,在同一个namespace空间中必须是唯一的

    name: nginx-test
    lables:
    app: nginx

    定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性


    spec:

    定义副本数量


    replicas: 3

    定义标签选择器


    selector:

    定义匹配标签


    matchLabels:

    需与后面的.spec.template.metadata.labels定义的标签保持一致


    app: nginx

    定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配

      template:
      metadata:

      定义Pod副本将使用的标签,需与前面的.spec.selector.matchLabels定义的标签保持一致

        labels:
        app: nginx
        spec:

        定义容器属性


        containers:

        定义一个容器名,一个-name:定义一个容器


        - name: nginx

        容忍度(Toleration)与污点(Taint)

        Kubernetes 可以约束一个 Pod 只能在特定的节点上运行

        节点亲和性是 Pod 的一种属性,它使 Pod 被吸引到一类特定的节点

        污点(Taint)则相反,它使节点能够排斥一类特定的 Pod

        容忍度(Toleration)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上,我们可以控制 Pod 创建时候的污点来向集群内的节点进行喷射创建。

        Namespace

        Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services, replication controllers和deployments 等都是属于某一个 namespace 的(默认是default),而 node, persistentVolumes 等则不属于任何 namespace Namespace 常用来隔离不同的用户,比如 Kubernetes 自带的服务一般运行在 kube-system namespace中Kubernetes 中的名称空间与 docker 中的名称空间不同,K8s 中的名称空间只是做了一个逻辑上的隔离

        Deployment

        Deployment 可以部署应用并管理实例数量,它提供了一种故障的自我修复机制,当应用挂了后,Deployment 可自动启动一个新的实例,维护固定数量的 Pod

        Service

        Service 为 Pod 提供了一种外网访问能力,默认情况下,Pod 只能在 Kubernetes 集群的同一节点访问,如果要外网络访问,则需要为 Pod 暴露一个 Kubnetes Service,Service 为 Pod 提供了外网访问能力

        0x02 k8s搭建

        安装

          minikube
          brew install minikube

          记得安装 docker

          启动minikube start # 创建一个集群


          kubectl get node

          查看节点


          kubectk get pod -A

          查看内部服务组件是否成功运行


          minikube node add

          添加一个新节点

          master 节点正常默认具有污点,等下创建pod 如果没有容忍度会一直在Pending 状态中,要创建一个新节点,minikube 的默认没污点


          kubectl create deployment hello-nginx --image=nginx:latest

          创建管理 Pod 的 Deployment,指定镜像为 nginx


          kubectl expose deployment hello-nginx --type=NodePort --port=80

          创建 Service,将 pod 的 80 端口公开

          也可以用


          kubectl run hello-nginx --image=nginx--port=80

          来快速创建,相当于执行上面的那两个命令

          之后可以用


          kubectl delete service hello-nginx

          来删除服务


          kubectl port-forward service/hello-nginx 7080:80

          转发端口,之后就能在本机的 http://127.0.0.1:7080 上访问到 pod


          kubectl get deployments

          查看 Deployment


          kubectl get pod -o wide

          查看 pod,刚才这个是在 节点2 上运行的


          kubectl get services hello-nginx

          查看刚才创建的 service

          清理环境

            minikube stop
            minikube delete
            相关实践学习
            容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
            通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
            云原生实践公开课
            课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
            目录
            相关文章
            |
            4月前
            |
            canal Kubernetes Docker
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            60 0
            |
            Prometheus 监控 Kubernetes
            |
            Kubernetes 容器
            |
            Kubernetes 网络安全 Docker
            |
            Kubernetes 开发工具 git
            K8S原理简介及环境搭建(四)
            K8S原理简介及环境搭建
            200 0
            K8S原理简介及环境搭建(四)
            |
            Kubernetes 负载均衡 应用服务中间件
            K8S原理简介及环境搭建(三)
            K8S原理简介及环境搭建
            151 0
            K8S原理简介及环境搭建(三)
            |
            Kubernetes 安全 SDN
            K8S原理简介及环境搭建(二)
            K8S原理简介及环境搭建
            133 0
            K8S原理简介及环境搭建(二)
            |
            Kubernetes 负载均衡 网络协议
            K8S原理简介及环境搭建(一)
            K8S原理简介及环境搭建
            267 0
            K8S原理简介及环境搭建(一)
            |
            Kubernetes Linux Docker
            k8s环境搭建入门
            linux环境配置及k8s环境配置
            504 0
            |
            Kubernetes 关系型数据库 MySQL
            单机版的K8s环境搭建及部署Java Web应用Demo
            傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
            1099 0
            单机版的K8s环境搭建及部署Java Web应用Demo

            推荐镜像

            更多