kubernetes系列二之Deployment的管理和使用

2023-11-18

目录

1.Kubernetes管理对象

Pod

ReplicationController(简称RC)

ReplicaSet(简称RS)

Deployment

逻辑关系

从小到大的管理逻辑

2.创建Deployment

运行一个Deployment

命令行接口 - Kubectl 

Yaml文件创建deployment 

使用yaml文件创建Deployment (2) 

3.Deployment升级和弹性伸缩

Deployment弹性伸缩 (1)

Deployment弹性伸缩 (2) 

升级 (1)

升级 (2) 

升级 (3) 

 升级 (4)

回滚 (1)

回滚 (2) 

回滚 (3) 


1.Kubernetes管理对象

Pod

Kubernetes基本管理单元,每个Pod是一个或多个容器的一组集合。
一个Pod作为一个整体运行在一个节点(node)上。
Pod内的容器共享存储和网络

ReplicationController简称RC

Kubernetes需要管理大量的Pod,而显而易见的是通常情况下一个应用不会以单独的一个Pod完成。比较常见的情况是使用大量的Pod组成一个简单应用。管理这些大量的Pod的一个方式就是RC。
RC可以指定Pod的副本数量,并且在其中有Pod故障时可以自动拉起新的Pod,大大简化了管理难度。

ReplicaSet(简称RS)

目前最常用的控制器就是Deployment,创建Deployment时也会自动创建ReplicaSet。
Deployment可以管理一个或多个RS,并且通过RS来管理Pod。

Deployment

目前最常用的控制器就是Deployment,创建Deployment时也会自动创建ReplicaSet
Deployment可以管理一个或多个
RS,并且通过RS来管理Pod

逻辑关系

从小到大的管理逻辑

容器<Pod<ReplicaSet<Deployment
通常情况下
Pod中包含一个容器,或关系特别紧密的几个容器。
一个ReplicaSet
中包含多个相同的Pod
Deployment中包含一个或几个不同的
RS

2.创建Deployment

运行一个Deployment

kubectl create deployment mydep  --image=nginx
kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
mydep   1/1     1            1           2m3s

命令行接口 - Kubectl 

在Kubernetes中的操作很多都是用kubectl来完成,通过其命令可以管理Deployment,Replicaset,ReplicationController,Pod等,进行操作,扩容,删除等等全生命周期操作。同时可以对管理对象进行查看或者监控资源使用情况。

Kubectl的语法

kubectl [command] [TYPE] [NAME] [flags]
Command:指定你希望进行的操作,如create,get,describe,delete等。
TYPE:指定操作对象的类型,如deployment,RS,Pod等
NAME:指定对象的名字
Flags: 可选的标志位
常用Command:
Create:创建资源
Apply:应用资源的配置变更,也可以代替create创建新的资源
Get:查看资源
Describe:查看资源的详细描述
Delete:删除资源

Yaml文件创建deployment 

在前面的样例中,我们使用一行命令创建了Deployment。这是一种简单的形式,大量个性化参数没有定义,后续对该Deployment的升级管理也有诸多问题。在实际使用中,我们更常见的用法是通过一个yaml文件来创建各类资源。
创建一个yaml文件

vi nginx-deployment.yaml
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.7.9
        ports:
        - containerPort: 80

apiVersion:版本号,固定为apps/v1,如果使用1.9.0以前版本的kubernetes,填写apps/v1beta2
Kind: 类型,选择创建资源类型,可以填写pod,replicaset等
Metadata:元数据,其中name项指定了名称,label项指定标签。
Spec:deployment规格,其中replicas指定pod副本数量,选择器选择标签匹配为app:nginx 
Template:对pod模板的定义,其中至少要定义一个label
Spec:描述pod的规格
Containers:定义容器的属性,在范例中,容器名字是nginx,镜像为nginx:1.7.9,容器输入输出的端口是80端口。
最后注意格式,缩进一般使用两个空格,千万不要使用tab!

使用yaml文件创建Deployment (2) 

kubectl create -f nginx-deployment.yaml·
kubectl get deployment
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment  3/3     3            3           114s

3.Deployment升级和弹性伸缩

Deployment弹性伸缩 (1)

容器对比虚拟机,最大的优势在于可以灵活的弹性伸缩,而这一部分工作由kubernetes进行调度

Deployment弹性伸缩 (2) 

Deployment弹性伸缩本质是Pod数量增加或减少。
弹性伸缩可以支持自动化部署,并在很短时间内实现数量变更。
弹性伸缩通过修改yaml文件中的replica参数实现。
修改yaml后使用scale命令应用变更完成扩容或减容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
……

升级 (1)

当使用的deployment需要升级时(如软件版本更新),可以使用rolling update功能滚动升级deployment中所有pod。

升级 (2) 

已有一个nginx-deployment,让我们查看它现在的状态。
[root@k8s-master]# kubectl get rs
NAME                                   DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d             3         3         3       11s
[root@k8s-master]# kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
nginx-deployment-6dd86d77d-7vlmb       1/1     Running   0          3s
nginx-deployment-6dd86d77d-92cqm       1/1     Running   0          3s
nginx-deployment-6dd86d77d-l6pw8       1/1     Running   0          3s
修改yaml文件
执行rolling-update
……
spec:
      containers:
      - name: nginx
        image: nginx:1.9.1
        ports:
        - containerPort: 80

升级 (3) 

升级后,再次查看状态,会发现replicaset和pod的状态都发生了变化
出现了一个新的replicaset,原有replicaset中无pod
三个pod的名字发生了变更

[root@k8s-master]# kubectl get rs
NAME                                 DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d           0         0         0       63s
nginx-deployment-784b7cc96d          3         3         3       21s
[root@k8s-master runfile]# kubectl get pods
NAME                                 READY   STATUS    RESTARTS   AGE
nginx-deployment-784b7cc96d-4wlnl    1/1     Running    0         9s
nginx-deployment-784b7cc96d-j72jm    1/1     Running    0         12s
nginx-deployment-784b7cc96d-kbx6n    1/1     Running    0         10s

 升级 (4)

 再次查看该deployment日志,可以发现在滚动更新中系统所做的操作。
 

Events:
  Type    Reason             Age   Message
  ----    ------             ----  -------
  Normal  ScalingReplicaSet  50s   Scaled up replica set nginx-deployment-784b7cc96d to 1
  Normal  ScalingReplicaSet  48s   Scaled down replica set nginx-deployment-6dd86d77d to 2
  Normal  ScalingReplicaSet  48s   Scaled up replica set nginx-deployment-784b7cc96d to 2
  Normal  ScalingReplicaSet  47s   Scaled down replica set nginx-deployment-6dd86d77d to 1
  Normal  ScalingReplicaSet  47s   Scaled up replica set nginx-deployment-784b7cc96d to 3
  Normal  ScalingReplicaSet  45s   Scaled down replica set nginx-deployment-6dd86d77d to 0

回滚 (1)

使用kubernetes滚动更新后,kubernetes会记录下本次更新,并且保存为一个历史版本,如果更新后出现应用异常,可以通过回滚操作回到之前版本

kubectl apply -f nginx-deployment.v1.yaml –-record
kubectl apply -f nginx-deployment.v2.yaml --record
kubectl apply -f nginx-deployment.v3.yaml --record

(2) 

使用命令查看历史版本

[root@k8s-master]# kubectl rollout history deployment nginx-deployment
deployment.extensions/nginx-deployment
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=nginx-deployment.v1.yaml --record=true
2         kubectl apply --filename=nginx-deployment.v2.yaml --record=true
3         kubectl apply --filename=nginx-deployment.v3.yaml --record=true

回滚 (3) 

--revision=命令可以查看某个历史版本的详细信息。

[root@k8s-master]# kubectl rollout history deployment nginx-deployment --revision=2
deployment.extensions/nginx-deployment with revision #2
Pod Template:
  Labels:       app=nginx
        pod-template-hash=59988f74c7
  Annotations:  kubernetes.io/change-cause: kubectl apply --filename=nginx-deployment.v2.yaml --record=true
  Containers:
   nginx:
    Image:      nginx:1.8.1
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>


#使用rollout undo命令回滚到指定版本。
kubectl rollout undo deployment nginx-deployment --to-revision=2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes系列二之Deployment的管理和使用 的相关文章

随机推荐

  • Linux软硬链接的区别

    1 概念 软链接 软链接又叫符号链接 这个文件包含了另一个文件的路径名 可以是任意文件或目录 可以链接不同文件系统的文件 硬链接 就是一个文件的一个或多个文件名 硬链接就是让多个不在或者同在一个目录下的文件名 同时能够修改同一个文件 其中一
  • 16.odoo入门——初探后台启动过程(三)

    第16天 终于周五 迎来难得的双休 上次说到 运行如下代码 rc odoo service server start preload preload stop stop 又调用了odoo service server py下的start函数
  • ssh命令,key认证

    1 sshd简介 当主机中开启openssh服务 那么就对外开放了远程连接的接口 openssh服务的服务端 开元的远程连接 sshd secure shell 服务端软件 对外开放一个接口 让别人通过其他途径连接可以通过网络在主机中开机s
  • Jean-Pierre Merlet 教授的并联机器人研究

    Jean Pierre Merlet是法国国家信息与自动化研究所 INRIA 的高级科研人员 严格来说不是教授 其著作 Parallel Robots 是并联机器人领域的经典教材 自1986年在巴黎第六大学获得博士学位后 他长期从事并联机器
  • SHA-3算法学习笔记——day1_算法简介。

    由于种种原因 对kyber算法的学习需要终止一阶段呜呜呜 现阶段学习SHA 3杂凑算法 SHA 3算法的优化等问题后续不知道还要不要学习 先学该算法的基本结构吧 SHA 3算法是一种杂凑算法 其涉及到的数学专业知识不多 结构也相对简单 轮运
  • WIN10局域网共享方法

    1 控制面板 网络和 Internet 网络和共享中心 高级共享设置 打开启动网络发现 启动文件共享和打印机共享 2 win r运行gpedit msc 打开本地组策略编辑器 找到 计算机配置 管理模板 网络 Lanman工作站 启动不安全
  • Mybatis学习笔记(一)

    MyBatis学习笔记 1 Mybatis 开源免费框架 以前叫ibatis 2010年在google code 2013年迁移到git tub 2 作用 数据访问层框架 2 1底层是对jdbc的封装 3 mybatis优点 使用mybat
  • 什么是Odoo ERP:部署方式、业务集成、成本投入、发展与未来

    ERP部署的类型 如何部署ERP 系统 通过多年的发展 ERP系统的部署方式更加多样化 包括公有云或私有云部署 本地部署或整合不同环境的混合部署场景 企业可根据自身条件与应用场景加以选择 下面介绍了每种部署模式的主要优势 旨在帮助你选择最合
  • 这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer

    我为大家准备了一份超级全面的Java 学习面试笔记 这份电子版笔记涵盖了诸多后端技术栈的面试题和答案 相信可以帮助大家在最短的时间内复习Java后端的大多数技术点和面试题 从而拿到自己心仪的offer 共4577页 整体还是比较清爽的 大家
  • 使用python中的随机森林进行数据分类预测

    以下是使用Python中的随机森林进行数据分类预测的示例代码 引入需要的库 from sklearn ensemble import RandomForestClassifier from sklearn model selection i
  • 利用百度AI 合成语音2

    文字合成语音 coding UTF 8 from aip import AipSpeech from playsound import playsound 你的 APPID AK SK APP ID 20232679 API KEY bZc
  • HEVC原理-图像的二维变换与离散余弦变换(DCT)

    最近在做RDOQ算法优化和硬件系统结构设计 建立其时序模型 估算算法的硬件复杂度 在做这部分工作的同时 博主学习了图像的二维变换与离散余弦变换 DCT 总结如下 1 图像的二维离散变换 与一维的有限长离散非周期信号存在傅里叶变换 DFT 一
  • properties文件快速转为yml文件

    只是做了简单的测试 没有考虑过文件里有注释的情况 思想就是先把数据读到map中 然后再保存到新的文件中 public class Test public static void main String args throws Excepti
  • C++ 0x 之移动语义和传导模板实现原理

    文 李博 光宇广贞 C 0x 之左值与右值 文中提到 std forward 和 std move 本文开头对之补充一句 在操作函数返回值或函数参数时 匿名左值仍然为左值 左值可以具名 匿名右值仍然为右值 右值一旦具名成功 立即转变为左值
  • Fping命令解析

    Fping程序类似于ping ping是通过ICMP 网络控制信息协议InternetControl Message Protocol 协议回复请求以检测主机是否存在 Fping与ping不同的地方在于 fping可以在命令行中指定要pin
  • QT_内存

    深度解析QMap与QHash 转载于 http www cnblogs com 5iedu p 5835715 html
  • Redis——持久化数据

    Redis被称为是内存数据库 那是因为它会将其所有数据存储在内存里 因此Redis具有强劲的速度性能 但是 也正因为数据存储在内存中 当Redis重启后 所有存储在内存的数据就会丢失 为了使得数据持久化 Redis提供了两种方式 RDB方式
  • VGG预训练模型网络结构详解——以VGG16为例

    VGG卷积神经网络是牛津大学在2014年提出来的模型 当这个模型被提出时 由于它的简洁性和实用性 马上成为了当时最流行的卷积神经网络模型 它在图像分类和目标检测任务中都表现出非常好的结果 在2014年的ILSVRC比赛中 VGG 在Top
  • Win10环境+ CUDA9.0 +CUDNN7.0+TensorFlow1.7/1.6/1.5配置

    前言 很多小伙伴在选择CUDA版本和cudnn版本上有疑问 这里简短的说一下 希望能帮到各位小伙伴 我在网上看到有人说 要根据自己的显卡来选择CUDA 其实是错误的 你可以下载自己所需要的CUDA版本 这只是个驱动而已 CUDA的版本和cu
  • kubernetes系列二之Deployment的管理和使用

    目录 1 Kubernetes管理对象 Pod ReplicationController 简称RC ReplicaSet 简称RS Deployment 逻辑关系 从小到大的管理逻辑 2 创建Deployment 运行一个Deployme