前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你入门 Kubernetes 世界

一文带你入门 Kubernetes 世界

原创
作者头像
Luga Lee
修改2021-11-20 21:17:07
5940
修改2021-11-20 21:17:07
举报
文章被收录于专栏:架构驿站架构驿站
代码语言:javascript
复制
基于这些工具,相信能够帮助大家从 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 应用程序。

代码语言:javascript
复制
[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 服务部署的示例清单,以当前最新版本 v1.19 为例,具体如下所示:

代码语言:javascript
复制
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 集群和本地机器之间建立反向隧道。它允许我们将我们所部署的机器作为集群中的服务公开至外部环境,其工作原理可参考如下所示:

Ktunnel 工作原理示意图
Ktunnel 工作原理示意图

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

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

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

代码语言:javascript
复制
[administrator@JavaLangOutOfMemory ~ ] % go get -u github.com/stern/stern
... ...
[administrator@JavaLangOutOfMemory ~ ] % asdf plugin-add stern
... ...
[administrator@JavaLangOutOfMemory ~ ] % asdf install stern latest
... ...
代码语言:javascript
复制
[administrator@JavaLangOutOfMemory ~ ] % stern envvars --context staging --container gateway
... ...

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

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

代码语言:javascript
复制
[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
K9s Command
K9s Command
图片
图片

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

代码语言:javascript
复制
# 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
Lens 管理控制台
Lens 管理控制台

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

Kubernetes 生态架构参考体系
Kubernetes 生态架构参考体系

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档