一文带你入门 Kubernetes 世界

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: Kubernetes,通常我们将其缩写为 “K8s”,是一个开源的容器编排平台,最初在 Shipyard 平台中广泛使用。其基于自动化模式维护容器化的应用程序所涉及的许多任务,例如部署、扩展、负载平衡、灰度以及资源弹性伸缩等。


基于这些工具,相信能够帮助大家从 0 开始入门 Kubernetes 集群,开启云原生之旅 ~

    Kubernetes,通常我们将其缩写为 “K8s”,是一个开源的容器编排平台,最初在  Shipyard 平台中广泛使用。其基于自动化模式维护容器化的应用程序所涉及的许多任务,例如部署、扩展、负载平衡、灰度以及资源弹性伸缩等。其鸟瞰图如下所示:

Kubernetes 劣势

    Kubernetes 是云原生生态资产管理的主要编排平台,为数成千上万家公司优化了部署,降本增效。然而,它因其陡峭的学习曲线以及繁琐的底层原理而臭名昭著。简言之, Kubernetes 的确有点无辜,既受广大开源爱好者欢迎又让大家望之却步,使得其很难做到一碗水平。

    这也就是说,如果大家是一个试图学习和驾驭 Kubernetes 冰山的技术人员,那么你很幸运,因为有大量的开源资源可以帮助大家正确地开始 Kubernetes 云原生之旅。

Kubernetes 优点

    尽管使用 Kubernetes 时可能会碰到各种各样的困难、险阻,但庆幸的是,基于h合理的 Kubernetes 平台将会为我们带来如下效益:

    1、通过高效扩展集群来降低云成本

    2、简化团队的不同工程流程(例如开发、测试和发布)

    3、尽量减少安全问题,如跨容器通信

    4、确定交通如何通过基础设施

    5、防止资源匮乏的服务相互中断

你的 Kubernetes 之旅

    诚然,学习 Kubernetes 是一个漫长而复杂、兴奋而颓废的过程,但每个人都必须从某个地方开始。其实,只需 2-3天,我们就可以在本地或云中使用 Kubernetes 部署和管理容器。本文将是一个高层次的指南,引领大家一步一个脚印,从宏观到微观,从工具到原理,以 0 基础入门 Kubernetes 世界。

    在开始之前。。。

    我们需要下载并安装基础环境,例如,Docker、Kubectl 及其他基础工具,以便其能够提供正常用于与集群交互的命令。

第 1 天:本地集群

    建立本地 Kubernetes 集群是熟悉基本操作和概念的最佳实践路线之一。在本文中,我将为大家重点介绍比较经典的 2 款工具,Minikube 和 K3d,下面对 2 者进行简要解析。

    如果你是一个云原生小白,意味着所有的一切将是从零开始,Minikube 或许是一个很好的选择。使用 Minikube,我们可以通过命令行快速轻松地设置本地 Kubernetes 集群。网络上有较多的案例,介绍如何使用 Kubernetes 文档中的 Minikube 创建集群。关于 Minikube 相关内容,暂不在本文中赘述,大家可参考公众号之前文章:Kubernetes 构建工具浅析

    Minikube 的强大毋庸置疑,在广大技术人员本地环境中其作用发挥的淋漓尽致。除此,作为后起之秀,K3d 作为本地运行 K3s( K8s 的轻量级版本)的另一种方式正在加速发展。K3d 最吸引人的功能之一便是,它允许我们在 Docker 中创建和管理集群(而不是通过在虚拟机中运行的 Minikube )。查看此 starter repo : https://github.com/iwilltry42/k3d-demo 以获取示例 K3d 应用程序。


[administrator@JavaLangOutOfMemory ~ ] % curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
... ...
[administrator@JavaLangOutOfMemory ~ ] % k3d cluster create mycluster -p 9080:80@loadbalancer
... ...


第 2 天:部署

    在容器编排生态中,Kubernetes 的基本构建块是称为清单的 YAML文件。这些文件向 Kubernetes 阐述我们想要创建什么,以及想要如何进行创建。

    以下是 Nginx 服务部署的示例清单,具体如下所示:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.10
        ports:
        - containerPort: 80

    对单副本,我们可能轻而易举地创建及维护,然而,一旦我们想要部署应用程序的多个副本,维护几个稍有不同的清单的副本可能会显得有点捉襟见肘

    这就是 Helm 模板制作的用武之地。基于模板工具,我们可以轻松创建和管理应用程序的变体,保持某一特定值的通用性,并根据需要进行自适应调整。Helm 作为一款用于集群创建和发布管理的综合工具便应运而生。

    除此之外,Helm 还成为了用于包装整个应用的 Kubernetes 系统,我们将这些包统称为图表。例如,我们可以使用图表基于 helm install kube prometheus stack prometheus community/kube prometheus stack 命令行安装监控服务(度量收集器、时间序列数据库和仪表盘)。

    关于 Helm 相关内容,可参考之前文章:Helm管理工具解析

第 3 天:管理

    经过前面 2 天的实践,我们现在已经部署了一个完整的集群,但同时,我们需要知道发生了什么,需要基于我们的实际业务或 Demo 进行有效性管理。这里面,我们通常会给大家推荐如下工具,当然,也有更好的,或许因每个人的使用习惯及风格所定。

    首先,我们来看一下最为经典的命令行工具-Kubectl,基于此种工具,Kubectl 对于监视 Kubernetes 集群非常有用。我们可以获取 Kubernetes 知道的任何对象的状态,查看实时日志,并在 Pod 中获取命令行。一些有用的、鲜为人知的好玩意如下所示:

kubectl watch:查看 Kubernetes 对象的实时事件。

kubectl port forward:从本地主机到群集中服务的自组织端口隧道。

kubectl proxy:创建 kubernetes API 的本地代理。

   与 Kubectl 命令行工具类似的,比如 Ktunnel 。其同样也是一个 CLI 工具,用于在 Kubernetes 集群和本地机器之间建立反向隧道。它允许我们将我们所部署的机器作为集群中的服务公开至外部环境,其工作原理可参考如下所示:

    如果我们想一次快速记录一组 Pod,Kubectl 在这方面并没有真正的给予我们相关有效帮助。为此,我们可以尝试使用 Stern 工具

    基于 Stern,我们可以跨任何指定的(通过 regex )Pod 集查看日志。它甚至显示在执行期间启动和停止的服务的日志。

    例如,运行 stern-n kube 系统 DNS 将显示 Kube 系统名称空间中包含字符串中 “DNS” 的任何 Pod 的所有日志。


[administrator@JavaLangOutOfMemory ~ ] % go get -u github.com/stern/stern
... ...
[administrator@JavaLangOutOfMemory ~ ] % asdf plugin-add stern
... ...
[administrator@JavaLangOutOfMemory ~ ] % asdf install stern latest
... ...
[administrator@JavaLangOutOfMemory ~ ] % stern envvars --context staging --container gateway
... ...

    接下来,我们来介绍 2 款经典的 GUI 管理工具:K9s 与 Lens 。就概览工具而言,K9 和 Lens 本质上其实是同一枚硬币的不同面。无论基于那种选择,都可以归结为个人喜好,但从本质上而言,两者都具备齐全的功能以及较好的维护性,值得大家尝试使用。

    如果大家喜欢基于终端的控制台,可以优先尝试考虑 K9s ,毕竟其能够监控现有 K8s 集群的基本仪表板。除此之外,K9s 拥有一系列有用的功能,例如,基准测试和资源分配信息等等。


[administrator@JavaLangOutOfMemory ~ ] % wget https://github.com/derailed/k9s/releases/download/v0.24.2/k9s_Linux_x86_64.tar.gz
[administrator@JavaLangOutOfMemory ~ ] % tar -xzf k9s_*.tar.gz -C ~/luga-cloud/tools/k9s
... ...
[administrator@JavaLangOutOfMemory ~ ] % ~/luga-cloud/tools/k9s/k9s

    如果大家喜欢 GUI 提供的可用性和清晰度,请查看 Lens。它提供了一系列用于一般集群概览的工具,以及其他关联工具,以便我们只需单击几下就可以深入了解详细的配置。


# Download the 3.4.0 AppImage for Lens, mark it executable and copy it to your $PATH
# (output omitted for brevity)
[administrator@JavaLangOutOfMemory ~ ] % wget https://github.com/lensapp/lens/releases/download/v3.4.0/Lens-3.4.0.AppImage
[administrator@JavaLangOutOfMemory ~ ] % chmod +x Lens-3.4.0.AppImage
[administrator@JavaLangOutOfMemory ~ ] % sudo mv Lens-3.4.0.AppImage /usr/sbin/lens

    基于上述工具的相关简要解析,相信大家能够将很好地踏上通往 Kubernetes 启蒙之旅。接下来,我们需要花大量的精力去梳理、掌握 Kubernetes 生态的每一个具体组件,只有基于此,我们才能对 Kubernetes 生态架构体系有所熟知、融会贯通。

    如果大家想了解更多信息,可前往 Kubernetes 官网及相关技术社区,每天都在发布新的、信息丰富的文档、技术服务和案例教程以供大家学习、借鉴。

    感谢大家的阅读,祝大家旅途愉快~


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
87 5
|
26天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
72 3
|
29天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
42 3
|
27天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
16天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
31 0
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes的奇妙之旅
【9月更文挑战第34天】在数字化浪潮中,云原生技术如Kubernetes已经成为IT行业的重要力量。本文旨在通过浅显易懂的方式,向初学者揭示Kubernetes的核心概念、架构设计及其在实际业务中的应用价值,帮助读者快速理解并掌握这一技术,为进一步深入学习和实践打下坚实基础。
56 1
|
1月前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。
|
1月前
|
Kubernetes 网络协议 Docker
Kubernetes入门到进阶实战
Kubernetes入门到进阶实战
83 0
下一篇
无影云桌面