k8s 基础&环境搭建

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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
            相关实践学习
            通过Ingress进行灰度发布
            本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
            容器应用与集群管理
            欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
            目录
            相关文章
            |
            3月前
            |
            Kubernetes Linux 应用服务中间件
            Kubernetes—集群环境搭建
            Kubernetes—集群环境搭建
            120 0
            |
            3月前
            |
            canal Kubernetes Docker
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            Kubernetes_v1.18.2环境搭建 博主亲自实践可用
            72 0
            |
            3月前
            |
            Kubernetes 调度 Docker
            Kubernetes:环境搭建
            Kubernetes:环境搭建
            |
            10月前
            |
            运维 Kubernetes jenkins
            【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
            【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
            264 0
            |
            Kubernetes 应用服务中间件 nginx
            02-Kubernetes-集群环境搭建(下)
            02-Kubernetes-集群环境搭建(下)
            |
            Kubernetes 网络协议 安全
            |
            运维 Kubernetes 监控
            Kubernetes环境搭建
            Kubernetes系列文章: 1. Kubernetes介绍
            Kubernetes环境搭建
            |
            Prometheus 监控 Kubernetes
            |
            Kubernetes 开发工具 git
            K8S原理简介及环境搭建(四)
            K8S原理简介及环境搭建
            228 0
            K8S原理简介及环境搭建(四)
            |
            Kubernetes 负载均衡 应用服务中间件
            K8S原理简介及环境搭建(三)
            K8S原理简介及环境搭建
            168 0
            K8S原理简介及环境搭建(三)