k8s(Kubernetes)是什么?

Kubernetes(简称k8s)是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它由Google设计并捐赠给Cloud Native Computing Foundation(CNCF)来维护。Kubernetes源自Google多年运行容器化工作负载的经验,其设计目标是提供一个用于自动部署、扩展、以及运行应用程序容器的平台,无论运行环境是公有云、私有云还是混合云。

Kubernetes的核心概念

Pod

Pod是Kubernetes中的最小部署单元,包含一个或多个容器。这些容器共享网络、存储和配置环境。在实际应用中,Pod通常只包含一个容器,但在某些情况下,一个Pod可以包含多个紧密协作的容器。

Node

Node(节点)是Kubernetes集群中的一台工作机器,可以是物理服务器也可以是虚拟机。每个Node上运行着Pod,并由Master节点负责管理和调度。

Cluster

Cluster(集群)是由多个Node组成的Kubernetes部署单元。Cluster的管理和调度由Master节点负责。Master节点包括API Server、Scheduler、Controller Manager和etcd等组件。

Service

Service是Kubernetes中定义的一种抽象,定义了一组Pod的访问策略。Service通过标签选择器来定位Pod,并为它们提供一个稳定的访问接口,即使Pod的IP地址发生变化,Service的访问地址也不会改变。

Namespace

Namespace用于在一个Kubernetes集群中将资源划分为逻辑上的组,从而实现资源的隔离和管理。每个Namespace都有自己的资源配额和访问控制策略。

核心特性和主要功能

服务发现和负载均衡: Kubernetes可以使用DNS名称或自己的IP地址暴露容器,并在容器之间负载均衡流量,从而提高应用的可用性和性能。通过Service和Ingress等资源,用户可以方便地实现应用的高可用性和负载均衡。

存储编排: Kubernetes支持多种存储系统的自动化挂载,包括本地存储、云存储和网络存储,确保容器化应用的数据持久性和稳定性。用户可以通过配置持久化存储卷来实现这一点。

自动部署和回滚: Kubernetes支持自动化应用部署和回滚功能,确保在应用更新时不会出现停机。它可以在新版本部署不成功时自动回滚到之前的版本,使应用的升级和维护更加可靠和高效。

自动装箱: 基于应用的资源需求和其他约束,Kubernetes自动决定在哪里运行容器,更有效地利用资源。

自我修复: Kubernetes具备强大的自愈能力,可以自动检测并替换失效的Pod,重新启动失败的容器,替换和重新部署不响应用户定义健康检查的容器,并在节点不可用时重新调度容器,确保应用的高可用性。此外,Kubernetes还能够自动重启、重新调度或清理Pod,以维持系统的健康状态。

密钥与配置管理: Kubernetes允许您存储和管理敏感信息,如密码、OAuth令牌和SSH密钥,可以在不重建容器镜像的情况下更新应用配置和密钥。

水平扩展: 通过简单地增加或减少Pod的数量,Kubernetes能够根据负载情况自动扩展或收缩应用的规模,确保应用能够应对不同的负载需求。

架构

Kubernetes遵循主从架构模式。一个Kubernetes集群由至少一个主节点和多个工作节点组成。主节点负责集群的管理和调度,而工作节点则运行应用容器。

  • 主节点(Master Node): 包含几个核心组件,包括API服务器、调度器、控制管理器和etcd(用于存储集群配置的键值数据库)。
  • 工作节点(Worker Node): 运行实际的应用容器。每个节点都有Kubelet(与主节点通信的代理)、容器运行环境(如Docker或rkt)和kube-proxy(处理节点内部的网络通信)。

使用场景

Kubernetes非常适用于各种应用和环境,从小型个人项目到大型企业级应用,尤其是当需要高可用性、扩展性和无缝的更新时。它支持声明式配置和自动化,使系统管理员和开发者可以更轻松地部署和管理应用。

如何开始使用k8s?

学习基本概念

在深入k8s之前,建议先了解其核心组件,如Pods、Services、Deployments等。这些是构建和部署应用在k8s上的基石。

设置开发环境

安装kubectl(Kubernetes命令行工具),它是与Kubernetes集群交互的主要方式。

选择一个Kubernetes集群环境

你可以在本地机器上安装Minikube作为学习和测试用途,或者使用云服务提供商的Kubernetes服务,如Google Kubernetes Engine (GKE)、Amazon Elastic Kubernetes Service (EKS)、或Microsoft Azure Kubernetes Service (AKS)。

部署你的第一个应用

学习如何使用kubectl命令或配置文件来部署和管理应用。

实践

实践是学习k8s的最好方式。尝试部署不同类型的应用,使用不同的配置,并了解如何监控和维护你的集群和应用。

kubectl

kubectl是Kubernetes的命令行工具,它允许你运行命令来部署应用、检查和管理集群资源以及查看日志。使用kubectl,你可以:

  • 创建、更新和删除资源
  • 查看集群的状态和信息
  • 与运行在集群中的应用进行交互

为了使用kubectl,你需要先安装它并配置对一个Kubernetes集群的访问。kubectl的安装和配置文档可以在Kubernetes官网找到。

安装部署使用k8s集群服务

自己安装

如果你选择自己安装k8s集群,可以使用如下开源项目:

  • Minikube: 适合在本地机器上学习和测试。
  • Kubeadm: 用于生产环境的集群初始化和管理。
  • Kubespray: 基于Ansible的工具,适合在云服务或裸机上部署k8s集群。
  • MicroK8s: 适合边缘、物联网、CI/CD的轻量级k8s安装。

使用云服务

几乎所有主要的云服务提供商都提供了Kubernetes作为服务:

  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Microsoft Azure Kubernetes Service (AKS)

这些服务简化了集群的创建、管理和维护过程。

Minikube简介

Minikube是一个轻量级的Kubernetes实现,旨在本地计算机上运行单节点Kubernetes集群。它使得开发者可以轻松试用Kubernetes,或日常开发和测试工作。Minikube支持的特性包括:

  • DNS
  • NodePorts
  • ConfigMaps和Secrets
  • Dashboards
  • 容器运行时(Docker、CRI-O和containerd)
  • 自动暂停和恢复以节省资源

k8s 和 docker 的关系

Kubernetes是一个容器编排系统,用于管理容器化应用程序的生命周期,而Docker是一个开源的容器运行时,用于创建和运行容器。Kubernetes和Docker一起工作,提供一个强大的平台,以容器为单位部署、扩展和管理应用程序。Kubernetes可以管理使用Docker(或其他容器运行时,如CRI-O或containerd)创建的容器。

k8s 和 Minikube 的关系

Kubernetes是一个开源的容器编排平台,它允许用户自动化部署、扩展和管理容器化应用程序。Kubernetes可以在多个主机上运行,为容器化的应用提供高可用性和扩展性支持。它是为了解决在生产环境中大规模运行容器的复杂性问题而设计的。

Minikube,另一方面,是一个工具,旨在让开发者在本地计算机上轻松运行Kubernetes环境。它通过创建一个在虚拟机内运行的单节点Kubernetes集群来实现这一点。Minikube的主要目的是为了开发和测试的需要,使得开发者可以在不依赖于远程或多节点集群的情况下,轻松地学习和实验Kubernetes。

简而言之,Kubernetes和Minikube之间的关系是:

  • Kubernetes: 容器编排的实际平台,设计用于在生产环境中管理容器化应用。
  • Minikube: 使开发者能够在本地轻松启动和运行Kubernetes环境的工具,主要用于学习和开发目的。

通过Minikube,开发者能够在本地机器上模拟Kubernetes环境,这意味着他们可以在不影响实际生产系统的情况下开发、测试和实验。这对于新手学习Kubernetes的核心概念和操作以及开发人员在将应用推向生产之前进行测试都非常有帮助。

参考链接

  1. [Kubernetes官方

文档](https://kubernetes.io/docs/home/)
2. Cloud Native Computing Foundation (CNCF)
3. Kubernetes GitHub仓库
4. Kubernetes指南 - 读书笔记
5. Kubernetes架构详解

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐