K8s 入门教程:从零开始学习 Kubernetes – wiki大全

K8s 入门教程:从零开始学习 Kubernetes

1. 简介

1.1 什么是 Kubernetes?

Kubernetes(通常简称为 K8s)是一个开源的容器编排平台,由 Google 设计并捐赠给云原生计算基金会(CNCF)孵化。它可以自动化容器化应用程序的部署、扩展和管理。

使用 Kubernetes,你可以:

  • 自动化部署:快速、可预测地部署应用程序。
  • 弹性伸缩:根据负载动态地扩展或缩减应用程序。
  • 服务发现和负载均衡:自动管理容器之间的网络流量。
  • 自我修复:自动替换、重启或重新调度失败的容器。
  • 滚动更新和回滚:逐步更新应用程序,并在出现问题时自动回滚。

1.2 为什么需要 Kubernetes?

在现代的云原生应用中,容器技术(如 Docker)被广泛使用。当应用程序规模变大,容器数量增多时,手动管理这些容器变得非常困难。Kubernetes 提供了一个强大的平台来解决这些问题,让开发者可以专注于业务逻辑,而不是底层的部署和管理细节。

2. 核心概念

在开始之前,你需要了解一些 Kubernetes 的核心概念:

  • Cluster (集群):一个 Kubernetes 集群由一组工作机器组成,称为 Nodes (节点)。这些节点运行容器化的应用程序。集群至少有一个 Worker Node (工作节点) 和一个 Master Node (主节点)。
  • Node (节点):一个节点是 Kubernetes 中的一台工作机器,可以是虚拟机或物理机。每个节点都包含运行 Pods 所需的服务。
  • Pod:Pod 是 Kubernetes 中可以创建和管理的最小部署单元。一个 Pod 可以包含一个或多个容器,这些容器共享存储、网络和运行规范。
  • Deployment (部署):一个 Deployment 提供了对 Pod 和 ReplicaSet (副本集) 的声明式更新。你可以在 Deployment 中描述应用程序的期望状态,Kubernetes 会负责将其变为现实。
  • Service (服务):Service 是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。通过 Service,你可以为应用程序提供一个稳定的入口点,而无需关心后端 Pod 的具体 IP 地址。
  • ReplicaSet (副本集):确保在任何给定时间都有指定数量的 Pod 副本在运行。通常,我们不直接使用 ReplicaSet,而是通过 Deployment 来管理。

3. 准备工作

3.1 安装 kubectl

kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。

  • Windows:
    • 可以使用包管理器 ChocolateyScoop 安装。
    • choco install kubernetes-cliscoop install kubectl
  • macOS:
    • brew install kubectl
  • Linux:
    • 可以通过 snapapt/yum 安装。
    • sudo snap install kubectl --classic

安装后,通过 kubectl version --client 验证是否成功。

3.2 安装本地 Kubernetes 集群 (Minikube)

对于初学者来说,在本地搭建一个单节点的 Kubernetes 集群是最好的选择。Minikube 是一个可以让你在本地轻松运行 Kubernetes 的工具。

  1. 安装 Hypervisor:Minikube 需要一个虚拟机监控程序,如 VirtualBox、Hyper-V 或 Docker Desktop。推荐使用 Docker Desktop,因为它内置了对 Kubernetes 的支持。
  2. 安装 Minikube:
    • Windows: choco install minikubescoop install minikube
    • macOS: brew install minikube
    • Linux: curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube

4. 实践教程:部署你的第一个应用

4.1 启动 Minikube 集群

打开命令行工具,执行以下命令来启动你的本地 Kubernetes 集群:

bash
minikube start --driver=docker

这个过程可能需要几分钟,Minikube 会下载所需的镜像并配置一个单节点的 K8s 集群。

启动后,你可以通过以下命令查看集群状态:

bash
minikube status
kubectl get nodes

你应该能看到一个名为 minikube 的节点,状态为 Ready

4.2 部署一个应用程序

现在,我们将部署一个简单的 Nginx Web 服务器。

  1. 创建 Deployment

    我们将使用 kubectl create deployment 命令来创建一个 Deployment。这个 Deployment 会创建一个 Pod,并在其中运行一个 Nginx 容器。

    bash
    kubectl create deployment nginx-deployment --image=nginx

    • nginx-deployment 是我们为 Deployment 指定的名字。
    • --image=nginx 指定了要使用的容器镜像。
  2. 查看 Deployment 和 Pod

    部署需要一些时间来拉取镜像和启动容器。你可以通过以下命令查看状态:

    “`bash

    查看 Deployment

    kubectl get deployments

    查看 Pod

    kubectl get pods
    “`

    nginx-deploymentREADY 状态变为 1/1,并且 Pod 的 STATUS 变为 Running 时,说明部署成功了。

4.3 将应用程序暴露给外部

默认情况下,Pod 只能在 Kubernetes 集群内部访问。为了从外部访问 Nginx 服务,我们需要创建一个 Service

  1. 创建 Service

    我们将创建一个 NodePort 类型的 Service,它会在节点上打开一个特定的端口,并将流量转发到 Nginx Pod。

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

    • --type=NodePort 指定了 Service 的类型。
    • --port=80 指定了 Service 应该监听的端口。
  2. 查看 Service

    bash
    kubectl get services

    你会看到一个名为 nginx-deployment 的 Service。记下 PORT(S) 列中 80 端口映射到的那个较高的端口号(例如 3xxxx)。

  3. 访问应用程序

    现在,我们需要获取 Minikube 集群的 IP 地址,并通过刚刚获取的 NodePort 访问 Nginx。

    bash
    minikube service nginx-deployment --url

    这条命令会自动在浏览器中打开 Nginx 的欢迎页面。你也可以手动获取 IP 和端口,然后在浏览器中访问 http://<minikube-ip>:<node-port>

4.4 扩展应用程序

假设我们的应用访问量增加了,需要扩展实例数量。通过 kubectl scale 命令可以轻松实现。

“`bash

将副本数量扩展到 3 个

kubectl scale deployment nginx-deployment –replicas=3
“`

再次查看 Pods,你会发现现在有 3 个 Nginx Pod 正在运行:

bash
kubectl get pods

Service 会自动将流量负载均衡到这三个 Pod。

4.5 更新应用程序

我们可以使用 kubectl set image 命令来更新应用程序的镜像版本。

bash
kubectl set image deployment/nginx-deployment nginx=nginx:1.21.6

Kubernetes 会执行滚动更新,逐个替换旧的 Pod,确保服务不中断。你可以通过以下命令观察更新过程:

bash
kubectl rollout status deployment/nginx-deployment

4.6 清理资源

完成学习后,你可以删除之前创建的资源,以保持环境整洁。

“`bash

删除 Service

kubectl delete service nginx-deployment

删除 Deployment

kubectl delete deployment nginx-deployment

停止 Minikube 集群

minikube stop
“`

如果想彻底删除 Minikube 集群和所有相关文件:

bash
minikube delete

5. 总结

恭喜你!你已经完成了 Kubernetes 的基本入门。通过这个教程,你学会了:

  • Kubernetes 的核心概念。
  • 如何使用 Minikube 搭建本地开发环境。
  • 如何部署、暴露、扩展和更新一个应用程序。

这只是一个开始。Kubernetes 的世界非常广阔,还有许多高级功能等待你去探索,例如 ConfigMaps (配置管理)、Secrets (敏感信息管理)、Volumes (持久化存储) 和 Ingress (高级路由)。

希望这篇教程能为你打开通往云原生世界的大门!

滚动至顶部