Kubernetes

Kubernetes概述

Kubernetes(通常简称为K8s)是一个开源的容器编排平台 ,用于自动化部署、扩展和管理容器化应用程序。它提供了一个可靠且高度可扩展的基础架构,可以简化容器化应用程序的部署、伸缩、负载均衡和故障恢复等任务。Kubernetes通过使用容器抽象层(如Docker)来管理容器,并提供了一组强大的功能来处理应用程序在分布式环境中的部署和运行。它具有自我修复、自动扩展、服务发现与负载均衡、滚动更新等特性,被广泛应用于云原生应用的开发和部署中。
中文官网: https://kubernetes.io/zh/
中文社区: https://www.kubernetes.org.cn/
官方文档: https://kubernetes.io/zh/docs/home/
社区文档: http://docs.kubernetes.org.cn/

时光回溯

让我们回顾一下为何 Kubernetes 能够裨益四方。

传统部署时代:

早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。

虚拟化部署时代:

因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。

容器部署时代:

容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些? Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。

Kubernetes 为你提供:

  • 服务发现和负载均衡

    Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

    Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

    你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

    你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

  • 自我修复

    Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理

    Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

  • 批处理执行 除了服务外,Kubernetes 还可以管理你的批处理和 CI(持续集成)工作负载,如有需要,可以替换失败的容器。
  • 水平扩缩 使用简单的命令、用户界面或根据 CPU 使用率自动对你的应用进行扩缩。
  • IPv4/IPv6 双栈 为 Pod(容器组)和 Service(服务)分配 IPv4 和 IPv6 地址。
  • 为可扩展性设计 在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。

整体架构

Kubernetes(简称为K8s)是一个开源的容器编排和管理平台,用于自动化部署、扩展和操作应用程序容器。其整体架构包括以下组件:

  1. Master节点:Master节点是Kubernetes集群的控制中心,负责整个集群的管理和控制。它包含以下组件:

    • API Server(API服务器):提供与Kubernetes进行交互的API接口。
    • Scheduler(调度器):根据资源需求和约束条件,将Pod调度到合适的节点上运行。
    • Controller Manager(控制器管理器):负责管理各种控制器,如副本集控制器、部署控制器等。
    • etcd(分布式键值存储):存储集群的配置数据、状态信息和元数据。
  2. Node节点:Node节点是工作节点,负责运行应用程序容器和相关的Kubernetes组件。每个Node节点上包括以下组件:

    • Kubelet:负责与Master节点通信,并管理在该节点上运行的Pod和容器。
    • kube-proxy:维护节点上的网络代理规则,实现Pod之间的网络通信和负载均衡。
    • 容器运行时(如Docker):负责在节点上创建和管理容器。
  3. Pod:Pod是Kubernetes的最小调度和管理单位,它可以包含一个或多个相关的容器。Pod内的容器共享网络和存储资源,并通过localhost进行通信。

  4. 控制器:控制器是Kubernetes中的核心组件,用于确保系统状态与期望状态一致。常见的控制器包括:

    • 副本集(ReplicaSet):用于管理Pod副本的创建和伸缩。
    • 部署(Deployment):提供声明式的应用程序部署方式,管理副本集的创建、更新和回滚。
    • 服务(Service):定义一组Pod的访问方式和负载均衡规则。
  5. 网络插件:网络插件负责为Pod提供网络通信能力,实现不同节点上Pod之间的通信和跨节点的负载均衡。常用的网络插件有Flannel、Calico等。

  6. 存储插件:存储插件提供持久化存储解决方案,使得Pod能够使用持久化卷来存储数据。常用的存储插件有PersistentVolume(PV)、PersistentVolumeClaim(PVC)等。

整体架构中,Master节点负责集群的管理和控制,Node节点负责运行容器和相关的Kubernetes组件,而控制器负责管理应用程序的部署和伸缩。这种分布式的架构使得Kubernetes具备高可用性、可扩展性和容错性,并能够自动化地管理容器化应用程序。

k8s是不是主从架构

Kubernetes(K8s)本身并不是严格意义上的主从架构。它采用了一种分布式架构,其中Master节点和Node节点具有不同的角色和功能,但并没有直接的主从关系。

Master节点充当了控制平面的角色,负责集群管理和控制,包括调度Pod、处理API请求、监控集群状态等。Master节点通常由多个组件组成,如API Server、Scheduler、Controller Manager和etcd等。这些组件可以部署为独立的实例或作为冗余部署以提高可用性。

Node节点则充当了工作平面的角色,负责运行应用程序容器和相关的Kubernetes组件。每个Node节点上都会运行Kubelet和kube-proxy等组件,它们与Master节点进行通信,并执行Master节点下发的指令来管理Pod和容器的状态。

虽然在整个Kubernetes集群中,Master节点像是对Node节点进行控制和调度的中心,但并不存在单个主节点与从节点之间的直接主从关系。相反,Kubernetes设计为分布式和去中心化的系统,具备高可用性和容错性,所有节点都扮演着协同工作的角色,通过相互通信和交互来实现集群的统一管理和协调。

因此,可以将Kubernetes描述为一个分布式系统,其中Master节点和Node节点相互协作,但没有明确的主从关系。这种架构使得Kubernetes能够实现容器编排、自动化部署和弹性伸缩等功能,为容器化应用程序提供高效的管理和调度能力。

k8s相关概念

Kubernetes(K8s)是一个用于容器编排和管理的开源平台,涉及到多个相关概念。以下是一些常见的Kubernetes相关概念:

  1. Pod:Pod是最小的可部署单元,它由一个或多个紧密关联的容器组成。Pod中的容器共享网络和存储,并可以通过本地的IPC(Inter-Process Communication)进行通信。

  2. Deployment:Deployment是一种声明性的方式来创建和管理应用程序的副本。它定义了应用程序的期望状态,并负责自动化地创建、更新和扩缩容Pod的副本数量。

  3. ReplicaSet:ReplicaSet是Deployment背后的实际控制器,用于确保Pod的副本数量满足定义的期望状态。它可以根据需要启动或停止Pod的副本,并处理故障恢复等情况。

  4. Service:Service提供了稳定的网络地址和负载均衡功能,使得应用程序可以通过Service来访问其他Pod或服务。它充当了内部网络的入口,并提供一种抽象层来管理后端Pod的访问方式

  5. Namespace:Namespace是一种资源隔离机制,用于将集群划分为多个虚拟集群。不同的Namespace之间具有独立的资源空间,可以用于隔离不同团队、应用程序或环境的资源。

  6. ConfigMap:ConfigMap是一种用于存储配置数据的对象。它可以将配置信息以键值对的形式存储,然后可以被容器中的应用程序使用。

  7. Secret:Secret是一种安全地存储敏感信息(如密码、令牌等)的对象。它可以用于将敏感信息传递给Pod中的容器,并确保安全性和机密性。

  8. StatefulSet:StatefulSet是一种用于部署有状态应用程序的控制器。与Deployment不同,StatefulSet为每个Pod分配一个唯一标识符,并提供稳定的网络标识和状态管理功能。

  9. PersistentVolume(PV)和PersistentVolumeClaim(PVC):PV和PVC用于持久化存储,允许应用程序在Pod重新调度时保留其数据。PV是集群上的存储资源,而PVC则是Pod对PV的请求。

这只是Kubernetes中的一小部分概念,Kubernetes还涉及到众多其他概念和组件,如Ingress、NamespaceQuota、Job、CronJob等。理解这些概念有助于更好地理解和管理Kubernetes集群中的应用程序和资源。

架构原理和核心概念

Kubernetes(k8s)是一个开源的容器编排平台,其架构原理和核心概念包括:

架构原理:

  1. Master节点:集群的控制中心,负责整个集群的管理和调度。包含以下组件:

    • kube-apiserver: 提供 Kubernetes API 的入口,用于集群内外的通信。
    • kube-controller-manager: 负责运行控制器,监视集群状态并作出相应的响应。
    • kube-scheduler: 负责将 Pod 调度到工作节点上运行。
    • etcd: 一个分布式键值存储系统,用于保存集群的状态信息。
  2. Worker节点:集群中运行用户工作负载(Pod)的节点,包含以下组件:

    • kubelet: 在每个节点上运行,负责与 Master 节点通信,管理 Pod 的生命周期。
    • kube-proxy: 负责维护网络规则,实现服务的负载均衡和代理。
    • Container Runtime: 如 Docker、containerd 等,负责运行容器。
  3. Pod:Kubernetes 中最小的调度单元,包含一个或多个容器。Pod 是可以扩展和收缩的应用程序逻辑单位。

  4. Service:定义一组 Pod 的访问方式和策略,提供了内部负载均衡和服务发现功能。

  5. Controller:用于确保在集群中实现期望状态的控制循环,包括 ReplicaSet、Deployment、StatefulSet 等。

核心概念:

  1. Namespace:用于将集群内部划分为多个虚拟集群。

  2. Label和Selector:通过标签为对象进行分类和查询。

  3. Deployment:用于定义应用程序的部署方式,支持滚动更新等功能。

  4. Service:用于暴露一个应用程序的服务,以便其他应用程序可以访问它。

  5. Volume:用于在 Pod 中持久化数据的存储。

  6. ConfigMap 和 Secret:用于存储配置信息和敏感信息的对象。

  7. Ingress:允许对集群中的服务进行外部访问,支持 HTTP 和 HTTPS 路由。

  8. PersistentVolume 和 PersistentVolumeClaim:用于持久化存储的抽象层,使存储可以独立于 Pod 运行。

以上是 Kubernetes 的架构原理和核心概念的简要介绍。深入了解这些概念可以帮助你更好地理解和使用 Kubernetes。

Kubernetes 集群

要搭建一个 Kubernetes 集群,你可以按照以下步骤进行:

  1. 选择合适的部署工具 :常见的部署工具包括 kubeadm、kops、kubespray 等。根据你的需求和熟悉程度选择适合的工具。

  2. 准备环境:确保每个节点都满足 Kubernetes 的最低要求,包括操作系统版本、内存、CPU、网络设置等。

  3. 安装 Docker 或其他容器运行时:Kubernetes 使用容器来运行应用程序,因此确保在所有节点上安装 Docker 或其他容器运行时。

  4. 安装 kubeadm (如果使用 kubeadm):如果你选择使用 kubeadm 来搭建集群,需要在所有节点上安装 kubeadm、kubelet 和 kubectl。

  5. 初始化主节点 :在主节点上运行 kubeadm init 命令来初始化集群。这将生成加入集群所需的命令和配置信息。

  6. 加入其他节点:按照初始化主节点时生成的指令,在其他节点上运行命令加入集群。

  7. 安装网络插件 :部署网络插件(如Calico、Flannel 或其他选项),以便 Kubernetes 中的 Pod 可以相互通信。

  8. 配置持久存储(可选):如果需要持久存储,可以部署存储解决方案(如NFS、Ceph 等)并配置 PersistentVolume。

  9. 部署 Dashboard(可选):部署 Kubernetes Dashboard 以方便监控和管理集群。

  10. 验证集群:运行一些测试 Pod 来验证集群的正常运行,确保各个组件工作正常。

k8s入门操作

Kubernetes(k8s)的入门操作通常包括以下步骤:

  1. 安装 Kubernetes:根据你的环境选择合适的安装方式,可以使用 Minikube(用于本地开发和测试)、kubeadm、kops 等工具来搭建一个单节点或多节点的 Kubernetes 集群。

  2. kubectl命令行工具:安装 kubectl 命令行工具,它是与 Kubernetes 集群进行交互的主要方式。通过 kubectl 可以管理集群、部署应用程序、查看日志等。

  3. 创建和管理Pod:在 Kubernetes 中,最小的调度单位是 Pod,可以通过编写 Pod 的配置文件(YAML 格式)并使用 kubectl apply 命令来创建和管理 Pod。

  4. Deployment:使用 Deployment 对象来管理应用程序的部署。Deployment 提供了对应用程序的声明式定义,支持滚动更新和扩缩容等功能。

  5. Service:创建 Service 对象来暴露应用程序的服务,使其他应用程序可以访问。可以通过 ClusterIP、NodePort、LoadBalancer 等类型的 Service 来实现不同的服务暴露方式。

  6. Pod 日志和状态检查:使用 kubectl logs 命令查看 Pod 的日志,使用 kubectl describe 命令查看 Pod 的详细信息和状态。

  7. 扩展和收缩:使用 kubectl scale 命令来扩展或收缩部署的副本数量,也可以通过 Horizontal Pod Autoscaler 来自动根据 CPU 使用率或其他指标进行扩缩容。

  8. 配置管理:使用 ConfigMap 和 Secret 对象来管理配置信息和敏感数据,并在应用程序中引用这些配置项。

  9. 存储管理:使用 PersistentVolume 和 PersistentVolumeClaim 对象来管理持久化存储,使存储可以独立于 Pod 运行。

这些是 Kubernetes 入门操作的基本步骤,通过学习和实践这些操作,你可以快速掌握 Kubernetes 的基础知识并开始在 Kubernetes 上部署应用程序。

KubeSphere简介

KubeSphere 是一个基于 Kubernetes 的全面容器管理平台,旨在帮助企业实现多云容器管理、微服务应用支持、DevOps 自动化等功能。主要特点包括:

  1. 多云管理:KubeSphere 提供统一的多云容器管理能力,可在各种云环境中部署和管理应用程序。

  2. 多租户架构:支持多租户隔离,不同团队可以在同一个集群上独立管理应用程序,提供资源隔离和访问控制。

  3. 应用生命周期管理:提供应用程序的编排、部署、扩展、更新和监控等功能,简化了应用程序的生命周期管理。

  4. DevOps 工具链:集成了 CI/CD 等 DevOps 工具,支持自动化构建、测试和部署流程,提高开发效率和质量。

  5. 内置监控与日志:集成了 Prometheus、Grafana 和 ELK 等监控和日志系统,为用户提供全面的监控和日志查询功能。

  6. 应用商店:提供应用商店功能,用户可以轻松地部署常见的应用程序模板,并快速构建应用程序。

  7. 自定义插件:支持插件化架构,用户可以根据需求开发和集成自定义插件,扩展平台功能。

总体而言,KubeSphere 通过提供全面的容器管理功能、DevOps 自动化支持以及多云管理能力,帮助企业简化容器化应用程序的管理和部署,提高生产效率和灵活性。

KubeSphere安装

要安装 KubeSphere,一个基于 Kubernetes 的多租户容器管理平台,可以按照以下步骤进行:

  1. 准备环境

    • 至少一台运行 Kubernetes 的主机节点。
    • 确保 Kubernetes 已正常部署并运行。
  2. 下载 KubeSphere 安装文件

    • 从 KubeSphere 官方网站下载最新版本的安装包。
  3. 安装 Helm(如果尚未安装)

    • Helm 是 Kubernetes 的包管理工具,KubeSphere 使用 Helm 进行安装。
    • 可以通过官方文档提供的方法安装 Helm。
  4. 添加 KubeSphere Helm 仓库

    helm repo add kubesphere https://kubesphere.github.io/charts helm repo update

  5. 创建命名空间

    创建一个命名空间来安装 KubeSphere。

    kubectl create ns kubesphere-system

  6. 安装 KubeSphere

    使用 Helm 安装 KubeSphere。

    helm install kubesphere kubesphere/kubesphere --namespace kubesphere-system

  7. 检查安装状态

    等待安装完成,可以使用以下命令检查各个组件的状态。

    kubectl get pods -n kubesphere-system

  8. 访问 KubeSphere

    • 通过浏览器访问 KubeSphere 的 UI 界面,并使用默认用户名和密码登录(可在安装配置中修改)。

这些是简单的 KubeSphere 安装步骤。请务必查阅 KubeSphere 的官方文档以获取更详细的安装和配置信息,并根据需要进行调整。

WordPress 应用程序

WordPress 是一个开源的内容管理系统(CMS),用于创建和管理网站、博客和应用程序。它是使用 PHP 编程语言和 MySQL 数据库构建的,具有易用性、可扩展性和大量的插件生态系统。

主要特点包括:

  1. 用户友好:WordPress 提供直观的用户界面,使用户可以轻松创建、编辑和发布内容,无需专业编程知识。

  2. 主题和插件:WordPress 支持大量主题和插件,用户可以根据需要定制网站外观和功能。

  3. 多用户支持:WordPress 具有多用户支持功能,允许多个用户协作管理同一网站。

  4. SEO 优化:WordPress 提供丰富的 SEO 插件和功能,帮助网站提高搜索引擎排名。

  5. 社区支持:作为开源项目,WordPress 拥有庞大的全球社区,提供技术支持、插件开发和主题设计等服务。

  6. 安全性:WordPress 提供安全更新和插件,帮助用户保护网站安全。

WordPress 在网站建设领域非常流行,被广泛用于个人博客、企业网站、电子商务平台等各种类型的网站。由于其灵活性和易用性,WordPress 成为广大用户首选的网站建设工具之一。

KubeSphere 提供了一些常见应用程序的模板,包括 WordPress 应用程序。通过 KubeSphere 的应用商店功能,你可以轻松部署 WordPress 应用程序到 Kubernetes 集群中。以下是部署 WordPress 应用程序的一般步骤:

  1. 登录 KubeSphere 控制台:使用浏览器访问 KubeSphere 控制台,并使用你的用户名和密码登录。

  2. 进入应用商店:在 KubeSphere 控制台中找到应用商店或应用市场菜单项,然后搜索或浏览 WordPress 应用程序。

  3. 选择 WordPress 应用模板:在应用商店中找到 WordPress 应用模板,点击部署按钮开始部署 WordPress 应用程序。

  4. 配置 WordPress 应用程序:根据提示填写相关配置信息,例如数据库连接信息、域名等。可以根据需要自定义配置。

  5. 确认并提交部署:查看配置信息确保无误,然后提交部署请求,KubeSphere 将会自动创建所需的资源并部署 WordPress 应用程序。

  6. 访问 WordPress 应用程序:部署完成后,你可以通过浏览器访问 WordPress 应用程序,进行初始化设置和配置站点。

  7. 管理 WordPress 应用程序:在 KubeSphere 控制台中,你可以监控和管理部署的 WordPress 应用程序,查看日志、扩展应用程序等。

通过 KubeSphere 的应用商店功能,部署 WordPress 应用程序变得简单快捷,同时能够充分利用 Kubernetes 的强大功能和灵活性。记得阅读KubeSphere的官方文档以获取更详细的指导和说明。

DevOps

DevOps 是一种软件开发和运维(Operations)方法论,旨在缩短软件开发周期、提高交付质量以及加强团队合作。DevOps 结合了开发(Development)和运维(Operations)两个团队的工作流程和文化,通过自动化、协作和持续集成等实践,加速软件交付并增加业务价值。

关键特点包括:

  1. 自动化:利用自动化工具和脚本来完成软件开发、测试、部署和运维中的重复性任务,提高效率和准确性。

  2. 持续集成/持续交付(CI/CD):通过持续集成和持续交付实践,在保证代码质量的前提下实现快速、频繁地发布软件。

  3. 容器化和微服务架构:采用容器技术(如Docker)和微服务架构,实现更灵活、可扩展的应用部署和管理。

  4. 监控与日志:实时监控系统性能、应用程序行为,并记录日志,以便迅速识别和解决问题。

  5. 团队协作:促进开发、运维和其他相关团队之间的紧密协作,消除信息孤岛,共同推动项目向前。

  6. 持续学习:鼓励团队成员不断学习新知识和技能,提高整体团队的水平。

DevOps 的目标是通过改善软件开发和运维之间的沟通和合作,实现快速交付高质量的软件,并持续优化软件交付流程。这种方法可以帮助组织更快地响应市场需求、降低风险、提高效率,并提供更好的用户体验。

k8s流水线

在 Kubernetes(k8s)中建立持续集成/持续部署(CI/CD)流水线通常涉及以下步骤:

  1. 选择 CI/CD 工具:选择适合 Kubernetes 环境的 CI/CD 工具,如Jenkins、GitLab CI/CD、CircleCI、Tekton 等。

  2. 创建流水线配置文件:使用选定的 CI/CD 工具,在代码仓库中创建配置文件(如 Jenkinsfile、.gitlab-ci.yml 等),定义构建、测试和部署流程。

  3. 集成容器化:确保应用程序容器化,并将 Docker 镜像推送至容器注册表(如 Docker Hub、Harbor、AWS ECR 等)。

  4. 编写自动化部署脚本:根据 Kubernetes 的部署规范(Deployment 或 Helm Chart),编写自动化部署脚本。

  5. 配置 CI/CD 工具:设置 CI/CD 工具,配置触发条件、环境变量、构建步骤、测试策略、部署目标等。

  6. 触发流水线:在代码提交或特定事件触发流水线执行,CI/CD 工具将拉取代码、构建软件、运行测试并部署至 Kubernetes 集群。

  7. 监控与日志:配置监控和日志系统,实时跟踪流水线执行状态、记录关键指标和日志,便于排查问题。

  8. 持续优化:定期审查流水线性能,识别瓶颈并进行改进,以提高交付速度和质量。

通过建立流水线,可以实现自动化构建、测试和部署过程,加快软件交付速度,减少人为错误,提高部署一致性。请根据团队需求和项目特点调整流水线配置,确保最佳实践得以贯彻。

相关推荐
追梦不止~23 分钟前
Docker常用命令+详解
运维·docker·容器
GJCTYU1 小时前
阿里云多端低代码开发平台魔笔使用测评
低代码·阿里云·云原生·容器·serverless·云计算
铁锤妹妹头发多2 小时前
新手用docker真**难受
运维·docker·容器
南猿北者11 小时前
docker容器
docker·容器
YCyjs12 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R12 小时前
K8s小白入门
云原生·容器·kubernetes
€☞扫地僧☜€15 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
全能全知者17 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子18 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口20 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac