【云原生

2023-11-19

在这里插入图片描述

本期文章是K8s第3篇,主要是实战Kubectl创建Deployment部署应用。通过本期文章:我们将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

在前期的文章中,已经介绍了一些云原生入门的知识及简单实战,感兴趣的同学可以去我的云原生专栏中学习,任意门:云原生学习专栏

前言:学习目标

本篇文章,学习目标是:

  • 1、学习Kubetcl中应用的部署。
  • 2、使用Kubectl在Kubernetes上部署第一个应用。

一:用 Kubectl 创建 Deployment

上期文章中,我们介绍了如何运行集群,那么当运行了 Kubernetes 集群,就可以在其上部署容器化应用程序。

此时,需要我们创建 Kubernetes Deployment 配置。

  • Deployment 指挥 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。

创建应用程序实例后,Kubernetes Deployment 控制器会持续监视这些实例。 如果托管实例的节点关闭或被删除,则 Deployment 控制器会将该实例替换为集群中另一个节点上的实例。 这提供了一种自我修复机制来解决机器故障维护问题。

在没有 Kubernetes 这种编排系统之前,安装脚本通常用于启动应用程序,但它们不允许从机器故障中恢复。通过创建应用程序实例并使它们在节点之间运行, Kubernetes Deployments 提供了一种与众不同的应用程序管理方法。

1、部署第一个在K8s上的应用程序

在这里插入图片描述
接下来将使用 Kubernetes 命令行界面 Kubectl 创建和管理 Deployment。Kubectl 使用 Kubernetes API 与集群进行交互。将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

二:实战部署

1、查看Kubectl配置

Kubectl命令的常见格式是:Kubectl action resource。这将对指定的资源(如节点、容器)执行指定的操作(如创建、描述)。我们也可以在命令之后使用——help来获得关于可能参数的额外信息(kubectl get nodes——help)。

通过运行kubectl version命令,检查kubectl是否被配置为与集群通信:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.4", GitCommit:"e87da0bd6e03ec3fea7933c4b5263d151aafd07c", GitTreeState:"clean", BuildDate:"2021-02-18T16:12:00Z", GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

通过上述代码,可以看到Kubectl已经安装,可以看到客户端和服务器版本。

2、查询集群中节点信息

接下来我们需要查询集群中的节点信息,使用Kubectl get nodes命令。

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
minikube   Ready    control-plane,master   3m44s   v1.20.2
$ 

通过上述的命令可以看到可用的节点。Kubernetes将根据Node可用资源选择部署我们的应用程序的位置。

在这里插入图片描述

3、部署程序应用

现在需要使用Kubectl创建部署命令在Kubernetes上部署我们的第一个应用程序。我们需要提供部署名称和应用程序映像位置(包括Docker中心之外托管的映像的完整存储库url)。命令如下:

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created

上一个命令为我们实现了:

  • 搜索可以运行应用程序实例的合适节点(本次实验环境只有1个可用节点)。
  • 计划应用程序在该节点上运行。
  • 配置集群在需要时在新节点上重新计划实例。

现在要列出部署,使用kubectl get deployments部署命令:

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           80s

可以看到有一个部署运行着你的应用程序的单个实例。这个实例运行在节点上的Docker容器中。

在这里插入图片描述

4、查看部署的程序

Kubernetes内部运行的Pods是在一个私有的、孤立的网络上运行的。默认情况下,它们对同一个kubernetes集群内的其他pods和服务是可见的,但在该网络之外是不可见的。当使用Kubectl时,通过一个API端点与应用程序进行交互。

Kubectl命令可以创建一个将通信转发到集群范围的私有网络的代理。该代理可以通过按control-C终止,并且不会显示任何内容。

现在将打开第二个终端窗口来运行代理。

echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n"; 

在这里插入图片描述

现在,我们主机(在线终端)和Kubernetes集群之间有了连接。代理允许从这些终端直接访问API。

可以看到通过代理端点托管的所有api。比如,可以使用curl命令curl http://localhost:8001/version直接通过API查询版本:

$ curl http://localhost:8001/version
{
  "major": "1",
  "minor": "20",
  "gitVersion": "v1.20.2",
  "gitCommit": "faecb196815e248d3ecfb03c680a4507229c2a56",
  "gitTreeState": "clean",
  "buildDate": "2021-01-13T13:20:00Z",
  "goVersion": "go1.15.5",
  "compiler": "gc",
  "platform": "linux/amd64"
$ 

在这里插入图片描述

需要注意的是,需要检查终端顶部。代理在一个新选项卡(终端2)中运行,最近的命令在原始选项卡(终端1)中执行。代理仍然在第二个选项卡中运行,这允许curl命令使用localhost:8001工作。

如果无法访问端口8001,请确保上面启动的kubectl代理正在运行。

API服务器将根据pod名称自动为每个pod创建一个端点,这个端点也可以通过代理访问。

首先,需要获取Pod名称,并将其存储在环境变量POD_NAME中:

使用:**export POD_NAME=$(kubectl get pods -o go-template --template ‘{{range .items}}{{.metadata.name}}{{“\n”}}{{end}}’)**命令

$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-57978f5f5d-mhtpf

可以通过运行下面的API来访问Pod:

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/

在这里插入图片描述
为了在不使用代理的情况下访问新部署,需要一个服务,这一点我们将在下一篇文章中进行讲解。

后文:总结

通过本篇文章,我们已经大致了解到了如何在实战中Kubectl创建Deployment部署应用。也学习熟悉了创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【云原生 的相关文章

随机推荐

  • 单例模式(小小单例,一点也不小)

    小小单例 一点也不小 今天终于发现了原来单例模式还有这么多道道 单例模式解决了两个基本问题 全局访问和实例化控制 出自 大话设计模式 懒汉式单例模式 定义 要在第一次被引用时 才会将自己实例化 所以就被称为懒汉式单例模式 也就是我们常用的单
  • C 标准库 - 《assert.h》

    原文链接 https www runoob com cprogramming c standard library assert h html 简介 C 标准库的 assert h头文件提供了一个名为 assert 的宏 它可用于验证程序做
  • R: R版本更新及R包迁移(详细步骤)

    在安装R包的过程中 有时候会提醒R版本不够等情况 当需要更新R版本 又需要保证旧版本安装的R包可以完整迁移到新版本R时 可通过 installr 包实现 install packages installr library installr
  • python使用SMTP发送邮件

    SMTP是发送邮件的协议 Python内置对SMTP的支持 可以发送纯文本邮件 HTML邮件以及带附件的邮件 Python对SMTP支持有smtplib和email两个模块 email负责构造邮件 smtplib负责发送邮件 首先 我们来构
  • ARC105

    C Camels and Bridge 题意 一堆骆驼过桥 每个桥有承重和长度 问骆驼从头到尾的最近距离 假设这时候骆驼的过桥顺序已经安排好 每一个桥相当于一个限制条件 限制了 l r 的最近距离 也就是说 对于每一个骆驼 j 要保证 好了
  • OJ题目8--动态规划问题

    1 509 斐波那契数 力扣 LeetCode leetcode cn com 过去一直用递归法 但由于栈区空间的限制 当递归过深时容易发生栈溢出 int fib int n if n 0 return 0 else if n 1 retu
  • css按钮样式

    创建漂亮的 CSS 按钮的 10 个代码片段 IT程序狮子烨 1 个月前 如果你正在寻找一些高质量的 CSS 按钮的示例 那么这篇文章一定是你的 菜 在本文中 我们从 CodePen 上收集了 10 个独特的 CSS 按钮合集 并附有它们的
  • linux文件系统初始化过程(4)---加载initrd(中)

    一 目的 上文详细介绍了CPIO格式的initrd文件 本文从源代码角度分析加载并解析initrd文件的过程 initrd文件和linux内核一般存储在磁盘空间中 在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的
  • 苹果steam手机令牌未能连接服务器,steam手机令牌登不上怎么办(6种原因方法轻松解除)...

    引用自 平底锅揽件指南 随着 绝地求生 游戏的回温 最近芝士君收到了好多小伙伴关于 令牌 的问题 在这里为大家专门出一篇文章科普一下 好好看完这篇文章 以后妈妈再也不用担心我 绝地求生 游戏令牌出问题啦 在这里 芝士把大家遇到的问题总结为5
  • Java 中Arrays工具类的使用

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 介绍 java util Arrays类即为操作数组的工具类 包含了用来操作数组 比如排序和搜索 的各种算法 下面我用代码给大家演示一下
  • 十二. Kubernetes Pod 与 探针

    目录 一 Pod Pod 中的多容器协同 Pod 的组成与paush 重要 Pod 的生命周期 Pod状态与重启策略 静态Pod 二 探针 1 livenessProbe存活探针 2 readinessProbe就绪探针 3 startup
  • 页面滚动动画库,快看看

    本文属xxKarina原创 转载请注明 个人博客地址 https xxkarina github io 前端涉及的领域真的很广 但是粗略的划分的话 其实就是简单的三要素 html css js 当然 这些基本的Web前端技术是远远不足以让你
  • SpringBoot+mybatis+thymeleaf实现登录功能

    项目文件目录一栏 2 开始工作 先按照上图建立好相应的controller mapper等文件 接着进行一个配置 首先是application properties server port 8080 启动端口 加载Mybatis配置文件 m
  • 2023 年如何将您的应用提交到 App Store

    您夜以继日地工作来创建您的梦想应用程序 最后 是时候向全世界宣布您的应用程序了 但不知道如何将您的应用提交到 App Store 为您的商店获取现成的移动应用程序 将应用程序提交到 App Store 可能是一项复杂的任务 但在本指南的帮助
  • 揭开智能卡的面纱

    一 概述 ICC是Integrated Circuit Card的缩写 意思是集成电路卡 我们通常把它称为智能卡 Smart Card 智能卡应用广泛 它可以用来保存私人密码 银行账号 个人资料等 那么如何编写应用程序 从智能卡上读出或向其
  • RabbitMQ之交换机类型

    一 交换机类型 在 RabbitMQ 中 交换机主要用来将生产者生产出来的消息 传送到对应的队列中 即交换机是一个消息传送的媒介 其英文被称为 exchange 交换机在 RabbitMQ 中起着承上启下的作用 交换机主要有四种类型 dir
  • 卡尔曼滤波的推导

    与尔共勉 1 状态方程 其中为卡尔曼滤波估计值 也就是我们的目的值 我们要估计的也就是这个值了 为由K时刻得到K 1时刻的值 为系统的输入乘上一个系数 A为转移矩阵 为噪声 服从 2 测量方程 为测量误差 其服从正态分布 H为测量矩阵 3
  • 【Android 自定义 View】--> 双列时间轴

    不断学习 做更好的自己 视频号 CSDN 简书 欢迎打开微信 关注我的视频号 KevinDev 点我 点我 效果图 基类代码 适配器 BaseAdapter java Created on 2021 7 16 14 50 author Go
  • 计算机网络-协议栈分层

    1 划分网络层次的优缺点 优点 1 开发人员可以只关注整个结构中的某一层 2 可以很容易用新的实现替换原有层次中的实现 3 可以降低层与层之间的依赖 4 有利于标准化 5 利于各层逻辑的复用 缺点 1 一层可能冗余较低层的功能 例如许多协议
  • 【云原生

    本期文章是K8s第3篇 主要是实战Kubectl创建Deployment部署应用 通过本期文章 我们将学习创建在 Kubernetes 集群上运行应用程序的 Deployment 所需的最常见的 Kubectl 命令 在前期的文章中 已经介