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
            相关实践学习
            深入解析Docker容器化技术
            Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
            目录
            相关文章
            |
            Kubernetes Linux 应用服务中间件
            Kubernetes—集群环境搭建
            Kubernetes—集群环境搭建
            385 0
            |
            canal Kubernetes Docker
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            221 0
            |
            Kubernetes 调度 Docker
            Kubernetes:环境搭建
            Kubernetes:环境搭建
            |
            运维 Kubernetes jenkins
            【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
            【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
            627 0
            |
            Kubernetes 应用服务中间件 nginx
            02-Kubernetes-集群环境搭建(下)
            02-Kubernetes-集群环境搭建(下)
            |
            Kubernetes 网络协议 安全
            |
            运维 Kubernetes 监控
            Kubernetes环境搭建
            Kubernetes系列文章: 1. Kubernetes介绍
            Kubernetes环境搭建
            |
            Prometheus 监控 Kubernetes
            |
            Kubernetes 开发工具 git
            K8S原理简介及环境搭建(四)
            K8S原理简介及环境搭建
            412 0
            K8S原理简介及环境搭建(四)
            |
            Kubernetes 负载均衡 应用服务中间件
            K8S原理简介及环境搭建(三)
            K8S原理简介及环境搭建
            403 0
            K8S原理简介及环境搭建(三)

            热门文章

            最新文章