二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

  • ELK笔记

  • Kubernetes笔记

    • 手动部署kubernetes-1-8-6集群

    • 其他姿势快速部署

    • 手动搭建k8s-1-10-4高可用集群(推荐版).md

    • 基础学习

      • k8s整体架构的知识整理
      • 配置kubectl命令补全功能
      • k8s基本使用入门-使用Pod
      • k8s基本使用入门-了解ReplicationController
      • k8s基本使用入门-了解ReplicaSet
      • k8s基本使用入门-了解deployments
      • k8s基本使用入门-了解Service
    • 从新出发

  • LLM专题

  • 系列专题
  • Kubernetes笔记
  • 基础学习
二丫讲梵
2018-12-07

k8s基本使用入门-了解deployments

文章发布较早,内容可能过时,阅读注意甄别。

官网的介绍地址:https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

一个部署控制器提供声明更新 pods 和 ReplicaSets。

您在 Deployment 对象中描述了所需的状态,Deployment 控制器以受控速率将实际状态更改为所需状态。您可以定义 “部署” 以创建新的 ReplicaSet,或者删除现有的部署并使用新的部署采用所有资源。

注意:您不应管理部署所拥有的 ReplicaSet。应该通过操作 Deployment 对象来涵盖所有用例。如果您的用例未在下面介绍,请考虑在主 Kubernetes 存储库中打开一个问题。

同样,我们首先来看一个对应类型的 yaml 文件。

[root@master deployment]$cat deployment_nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3  #replicas指的是replicaset,定义了3个数目。
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.12.2 #定义镜像,这个地方随便指定了一个版本1.12.2
        ports:
        - containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

接下来创建一下:

[root@master deployment]$kubectl create -f deployment_nginx.yml
deployment.apps "nginx-deployment" created
1
2

使用 deployments 之后,管理方式也随之变化:

[root@master deployment]$kubectl get deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           7s
1
2
3

当然,也可以使用其他方式查看到:

[root@master deployment]$kubectl get deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           7s
[root@master deployment]$kubectl get rs
NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-7498dc98f8   3         3         3         1m
[root@master deployment]$kubectl get pods
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-7498dc98f8-2hhvg   1/1       Running   0          1m
nginx-deployment-7498dc98f8-gljq6   1/1       Running   0          1m
nginx-deployment-7498dc98f8-l5xns   1/1       Running   0          1m
1
2
3
4
5
6
7
8
9
10
11

这里可以做一个简单的有意思的小对比,可以看到,越往上层,名称越简化,又一次,曾经我提出过的,提取公因式法又出现了,看到在 pods 里边的时候,每个 pod 的名称区别在于最后的那几位随机数,而到 rs 这一层,则甩掉后边的几位数,提取了前边相同的,变成nginx-deployment-7498dc98f8,再到 deployments 当中,数字也去掉了,直接变成了nginx-deployment。

现在还回到正规的管理来查看:

[root@master deployment]$kubectl get deployment -o wide
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CONTAINERS   IMAGES         SELECTOR
nginx-deployment   3         3         3            3           5m        nginx        nginx:1.12.2   app=nginx
1
2
3

动态扩容管理。命令很相像的。

[root@master deployment]$kubectl get deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         3         3            3           11s
[root@master deployment]$kubectl scale deployment nginx-deployment --replicas=5
deployment.extensions "nginx-deployment" scaled
[root@master deployment]$kubectl get deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5         5         5            5           1m
[root@master deployment]$kubectl scale deployment nginx-deployment --replicas=2
deployment.extensions "nginx-deployment" scaled
[root@master deployment]$kubectl get deployment
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2         2         2            2           2m
1
2
3
4
5
6
7
8
9
10
11
12
13

升级的试验。

这里可以通过一些指令直接针对 pod 当中的容器进行替换,从而实现升级。

[root@master deployment]$kubectl set image deployment nginx-deployment nginx=nginx:1.13
deployment.apps "nginx-deployment" image updated
1
2

发现返回值没有问题。

那么查看一下过程:

[root@master deployment]$kubectl get rs
NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-7498dc98f8   3         3         3         9m
nginx-deployment-86cd46c4d9   1         1         0         13s
[root@master deployment]$kubectl get rs
NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-7498dc98f8   1         1         1         9m
nginx-deployment-86cd46c4d9   3         3         2         18s
[root@master deployment]$kubectl get rs
NAME                          DESIRED   CURRENT   READY     AGE
nginx-deployment-7498dc98f8   0         0         0         9m
nginx-deployment-86cd46c4d9   3         3         3         22s
[root@master deployment]$kubectl get pods
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-86cd46c4d9-gbrdx   1/1       Running   0          11s
nginx-deployment-86cd46c4d9-hs7bf   1/1       Running   0          26s
nginx-deployment-86cd46c4d9-mpwtr   1/1       Running   0          12s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

这个过程,完成记录了此 deployment 偷梁换柱(更改镜像)的过程,并且新的 pod 也成功 run 起来了。那么来查看一下,是否真的如操作所预想的:

[root@master deployment]$kubectl get deployment -o wide
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CONTAINERS   IMAGES       SELECTOR
nginx-deployment   3         3         3            3           10m       nginx        nginx:1.13   app=nginx
1
2
3

这里可以看到,我们一开始定义的版本是 1.12.2,现在已经变成了 1.13 了。这些操作过的流程,也会被记录下来,可以通过如下指令进行查看:

[root@master deployment]$kubectl rollout history deployment nginx-deployment
deployments "nginx-deployment"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
1
2
3
4
5

看到有两次的历史记录。现在,更神奇的操作来了,我们可以直接将版本回归到第一次部署时的版本,而不需要其他外部的任何动作。

[root@master deployment]$kubectl rollout undo deployment nginx-deployment
deployment.apps "nginx-deployment"
[root@master deployment]$kubectl get deployment -o wide
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE       CONTAINERS   IMAGES         SELECTOR
nginx-deployment   3         3         3            3           19m       nginx        nginx:1.12.2   app=nginx
1
2
3
4
5

除了感慨之外,还能说啥呢,以往在这种升级以及回滚的事情上,绞尽脑汁,费尽精力,现在,一切 so easy。

现在再去看一下历史:

[root@master deployment]$kubectl rollout history deployment nginx-deployment
deployments "nginx-deployment"
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
1
2
3
4
5

发现 1 被覆盖了,就会这样的轮替,以后再进行发布以及回滚,都非常的方便了。

现在,简单说一下网络的事儿,上边有留下过一个疑问,就是如何将 pod 的端口妥善的映射到宿主机上来,这时可以通过如下指令:

[root@master deployment]$kubectl expose deployment nginx-deployment --type=NodePort
service "nginx-deployment" exposed
1
2

这个时候其实是使用了 service 这个概念,下边会详细了解,接着来查看一下:

[root@master deployment]$kubectl get svc
NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.96.0.1        <none>        443/TCP        23h
nginx-deployment   NodePort    10.111.172.137   <none>        80:32188/TCP   22s
1
2
3
4

可以看到刚刚定义的这个 NodePort,将内部的 80 端口映射到了集群的 32188 端口上来,现在就可以通过集群 IP+32188 来访问了。

image

微信 支付宝
上次更新: 2024/07/04, 22:40:37
k8s基本使用入门-了解ReplicaSet
k8s基本使用入门-了解Service

← k8s基本使用入门-了解ReplicaSet k8s基本使用入门-了解Service→

最近更新
01
学习周刊-总第213期-2025年第22周
05-29
02
学习周刊-总第212期-2025年第21周
05-22
03
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式