为了账号安全,请及时绑定邮箱和手机立即绑定

kubernetes部署一个应用程序

标签:
Kubernetes

部署 nginx Deployment

如果你已经完成了Kubernetes的搭建,那我跟我一块来部署第一个应用程序吧。

创建 YAML 文件

创建文件 nginx-deploy.yaml,内容如下:


apiVersion: apps/v1  #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本

kind: Deployment  #该配置的类型,我们使用的是 Deployment

metadata: #译名为元数据,即 Deployment 的一些基本属性和信息

name: nginx-deployment  #Deployment 的名称

labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解

app: nginx  #为该Deployment设置key为app,value为nginx的标签

spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用

replicas: 1  #使用该Deployment创建一个应用程序实例

selector: #标签选择器,与上面的标签共同作用,目前不需要理解

matchLabels: #选择包含标签app:nginx的资源

app: nginx

template: #这是选择或创建的Pod的模板

metadata: #Pod的元数据

labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod

app: nginx

spec: #期望Pod实现的功能(即在pod中部署)

containers: #生成container,与docker中的container是同一种

- name: nginx  #container的名称

image: nginx:1.7.9  #使用镜像nginx:1.7.9创建container,该container默认80端口可访问

应用 YAML 文件


kubectl apply -f nginx-deploy.yaml

查看部署结果


# 查看 Deployment

kubectl get deployments

  

# 查看 Pod

kubectl get pods

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

如上图可分别查看到一个名为 nginx-deployment 的 Deployment 和一个名为 nginx-deployment-xxxxxxx 的 Pod

kubectl 常用命令

kubectl get

显示资源列表


# kubectl get 资源类型

  

#获取类型为Deployment的资源列表

kubectl get deployments

  

#获取类型为Pod的资源列表

kubectl get pods

  

#获取类型为Node的资源列表

kubectl get nodes

名称空间

在命令后增加 -A 或 --all-namespaces 可查看所有 名称空间中 的对象,使用参数 -n 可查看指定名称空间的对象,例如


# 查看所有名称空间的 Deployment

kubectl get deployments -A

kubectl get deployments --all-namespaces

# 查看 kube-system 名称空间的 Deployment

kubectl get deployments -n kube-system

kubectl describe

显示有关资源的详细信息


# kubectl describe 资源类型 资源名称

  

#查看名称为nginx-XXXXXX的Pod的信息

kubectl describe pod nginx-XXXXXX

  

#查看名称为nginx的Deployment的信息

kubectl describe deployment nginx

kubectl logs

查看pod中的容器的打印日志


# kubectl logs Pod名称

  

#查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志

#本案例中的 nginx-pod 没有输出日志,所以您看到的结果是空的

kubectl logs -f nginx-pod-XXXXXXX

kubectl exec

在pod中的容器环境内执行命令


# kubectl exec Pod名称 操作命令

  

# 在名称为nginx-pod-xxxxxx的Pod中运行bash

kubectl exec -it nginx-pod-xxxxxx /bin/bash

为nginx Deployment 创建 Service

创建文件 nginx-service.yaml


apiVersion: v1

kind: Service

metadata: #译名为元数据,即Deployment的一些基本属性和信息

name: nginx-service  #Service 的名称

labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组

app: nginx  #为该Deployment设置key为app,value为nginx的标签

spec: #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问

selector: #标签选择器

app: nginx  #选择包含标签 app:nginx 的 Pod

ports:

- name: nginx-port  #端口的名字

protocol: TCP  #协议类型 TCP/UDP

port: 80  #集群内的其他容器组可通过 80 端口访问 Service

nodePort: 30080  #通过任意节点的 30080 端口访问 Service

targetPort: 80  #将请求转发到匹配 Pod 的 80 端口

type: NodePort  #Serive的类型,ClusterIP/NodePort/LoaderBalancer

执行命令


kubectl apply -f nginx-service.yaml

检查执行结果


kubectl get services -o wide

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

如上图可查看到名称为 nginx-service 的服务。

访问服务


curl <任意节点的 IP>:30080

伸缩应用程序

伸缩的实现可以通过更改 nginx-deployment.yaml 文件中部署的 replicas(副本数)来完成


spec:

replicas: 2  #使用该Deployment创建两个应用程序实例

修改 nginx-deploy.yaml 文件


apiVersion: apps/v1  #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本

kind: Deployment  #该配置的类型,我们使用的是 Deployment

metadata: #译名为元数据,即 Deployment 的一些基本属性和信息

name: nginx-deployment  #Deployment 的名称

labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解

app: nginx  #为该Deployment设置key为app,value为nginx的标签

spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用

replicas: 2  #使用该Deployment创建一个应用程序实例

selector: #标签选择器,与上面的标签共同作用,目前不需要理解

matchLabels: #选择包含标签app:nginx的资源

app: nginx

template: #这是选择或创建的Pod的模板

metadata: #Pod的元数据

labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod

app: nginx

spec: #期望Pod实现的功能(即在pod中部署)

containers: #生成container,与docker中的container是同一种

- name: nginx  #container的名称

image: nginx:1.7.9  #使用镜像nginx:1.7.9创建container,该container默认80端口可访问

执行命令


kubectl apply -f nginx-deployment.yaml

查看结果


watch kubectl get pods -o wide

cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

如上图,你将会看到有两个应用程序在运行,运行了多个应用程序实例,可以在不停机的情况下执行滚动更新。

滚动更新

滚动更新允许以下操作:

  • 将应用程序从准上线环境升级到生产环境(通过更新容器镜像)

  • 回滚到以前的版本

  • 持续集成和持续交付应用程序,无需停机

如果需要滚动更新执行如下命令即可


kubectl apply -f nginx-deployment.yaml

查看过程及结果

执行命令,可观察到 pod 逐个被替换的过程。


watch kubectl get pods -l app=nginx

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消