前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一个Kubernetes应用

第一个Kubernetes应用

作者头像
月梦@剑心
发布2023-11-18 08:14:47
1280
发布2023-11-18 08:14:47
举报
文章被收录于专栏:月梦·剑心的技术专栏

这两天搭建了一个Kubernetes集群,包含三个节点,如图所示:

pPdtmJ1.png
pPdtmJ1.png

接下来该学习如何在k8s集群上运行第一个k8s应用了。

准备镜像

首先第一步,我们应该准备我们运行这个应用所需要的容器镜像。

编写应用配置文件

有了容器镜像之后,我们需要编写应用配置文件告诉k8s我们想要如何运行我们的容器。

应用配置文件一般是YAML格式的,其中包含容器的定义、参数、配置等等信息,然后只需一条指令(kubectl create -f)就可以通过这个YAML文件把容器运行起来。

一个典型的YAML格式应用配置文件示例如下:

pPdUECR.png
pPdUECR.png

运行应用

代码语言:javascript
复制
# 执行如下指令即可运行k8s应用
kubectl create -f nginx-test.yaml

# 通过如下指令查看应用的运行状态是否与预期一致
# 这个指令从k8s中获取指定的API对象
kubectl get pods -l app=nginx
pPr8atJ.png
pPr8atJ.png

可以看到两个nginx镜像已经运行起来了!

我们甚至没有手动拉取镜像,因为在使用kubectl create指令时,k8s会自动将所需镜像拉取下来。

很简单,不是吗?可以看到运行k8s应用的最重要的部分应该是编写对应的YAML格式文件了。

YAML格式文件

YAML格式的文件使用缩进来表示层次关系,但要注意不可用tab键来进行缩进,对于相同层级的元素,需要使用相同的空格个数来进行缩进,空格的个数并无指定,我一般使用4个。

一个YAML文件对应到k8s中就是一个API对象,k8s会按照YAML文件来创建出这些对象所定义的容器或者其他类型的API资源。

以上面的YAML文件为例

kind字段这个API对象的类型——Deployment,Deployment是一个定义多副本应用的对象(多个Pod),他的副本数(spec.replicas)为2,Pod定义发生变化时,Deployment对每个副本进行滚动更新。

Pod的定义在何处呢?在Pod模板中(spec.template)。模板中描述了我们想要创建的Pod的细节。这个Pod中包含一个容器,其镜像(image)为nginx:1.7.9,监听80端口,名字为nginx。

Pod是k8s世界中的”应用运行单元”,一个应用运行单元可以由多个容器组成。

每个API对象都有一个叫做Metadata的字段,是API对象的”标识”,是我们从k8s中找到这个对象的主要依据。

Deployment对象可以通过metadata中的labels字段从k8s中过滤出它所关心的对象,而这个规则的定义在spec.selector.matchLabels中,Deployment识别所有携带app: nginx的Pod,确保它们的数量等于2。

一个k8s的API对象的定义,大多可以分为Metadata和Spec两部分,前者存放这个对象的元数据,后者描述这个对象所要表达的功能。

查看API对象

代码语言:javascript
复制
# 使用kubectl describe命令查看一个API对象的细节,具体使用方法如下
kubectl describe pod nginx-deployment-f7ccf9478-69kkl
pPrJdQ1.png
pPrJdQ1.png

比如可以看到,这个pod被调度到了node3上,还有它的IP信息等等。

如何更新API对象

如果想要更新API对象,比如修改nginx的版本,一个如何做呢?

k8s提供了非常方便的方法,我们只需要修改YAML文件,再通过一条指令更新应用即可。

代码语言:javascript
复制
# 修改YAML文件后的更新指令
kubectl apply -f xxx.yaml
# 这个命令不仅可以用作更新对象,也可以用来创建对象

这就是声明式API,我们只要告诉系统我们期望得到什么样的状态(YAML文件中所描述),至于系统如何去做我们不需要去管。

进入及删除容器

可以通过如下指令进入到Pod当中

代码语言:javascript
复制
kubectl exec -it nginx-deployment-94c47774b-jxsnc -- /bin/bash

效果如下:

pPrY0pj.png
pPrY0pj.png

也可以通过一条指令删除这个Deployment

代码语言:javascript
复制
# xxx.yaml为这个对象对应的YAML文件
kubectl delete -f xxx.yaml

参考文献

[1] 张磊. 深入剖析Kubernetes[M]. 第1版. 人民邮电出版社, 2021.3.

版权声明: 如无特别声明,本文版权归 月梦の技术博客 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:《 第一个Kubernetes应用 》

本文链接:https://ymiir.netlify.app//kubernetes/%E7%AC%AC%E4%B8%80%E4%B8%AAk8s%E5%BA%94%E7%94%A8.html

本文最后一次更新为 天前,文章中的某些内容可能已过时!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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