replication controller

Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行,Replication Controller就是这个保证的key,主要的功能如下:

1.确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新的,反之则会删除掉多余的以保证Pod数量不变。
2.确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。
3.弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。
4.滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。

Deployment
Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性: 

1.Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。
2.事件和状态查看:可以查看Deployment的升级详细进度和状态。
3.回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。
4.版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。
5.暂停和启动:对于每一次升级,都能够随时暂停和启动。
6.多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。


1
、创建deployment
[root@linux-node1 ~]# vim nginx-deployment.yaml  #使用yaml的方式进行创建应用
apiVersion: apps/v1  #apiVersion是当前配置格式的版本
kind: Deployment    #kind是要创建的资源类型,这里是Deploymnet
metadata:        #metadata是该资源的元数据,name是必须的元数据项
name: nginx-deployment
labels:
app: nginx
spec:          #spec部分是该Deployment的规则说明
replicas: 3      #relicas指定副本数量,默认为1
selector:
matchLabels:
app: nginx
template:      #template定义Pod的模板,这是配置的重要部分
metadata:     #metadata定义Pod的元数据,至少要顶一个label,label的key和value可以任意指定
labels:
app: nginx
spec:       #spec描述的是Pod的规则,此部分定义pod中每一个容器的属性,name和image是必需的
containers:
- name: nginx
image: nginx:1.13.12
ports:
- containerPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-deployment.yaml #创建nginx-deployment应用
deployment.apps "nginx-deployment" created 2、查看deployment [root@linux-node1 ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
net-test 2 2 2 2 32m
nginx-deployment 3 3 3 0 10s [root@linux-node1 ~]# kubectl describe deployment nginx-deployment #查看deployment详情
Name: nginx-deployment
Namespace: default
CreationTimestamp: Thu, 16 Aug 2018 16:13:37 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision=1
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 0 available | 3 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:1.13.12
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-6c45fc49cb (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set nginx-deployment-6c45fc49cb to 3

3、查看Pod [root@linux-node1 ~]# kubectl get pod #查看pod在状态,正在创建中,此时应该正在拉取镜像
NAME READY STATUS RESTARTS AGE
net-test-5767cb94df-djt98 1/1 Running 0 22m
net-test-5767cb94df-hcwv7 1/1 Unknown 0 34m
net-test-5767cb94df-zb8m4 1/1 Running 0 34m
nginx-deployment-6c45fc49cb-dmc22 0/1 ContainerCreating 0 2m
nginx-deployment-6c45fc49cb-fd8xm 0/1 ContainerCreating 0 2m
nginx-deployment-6c45fc49cb-sc8sh 0/1 ContainerCreating 0 2m [root@linux-node1 ~]# kubectl describe pod nginx-deployment-6c45fc49cb-dmc22 #查看具体某个pod的状态信息 [root@linux-node1 ~]# kubectl get pod -o wide  #创建成功,状态为Running
NAME READY STATUS RESTARTS AGE IP NODE
net-test-5767cb94df-djt98 1/1 Running 0 24m 10.2.73.3 192.168.56.13
net-test-5767cb94df-hcwv7 1/1 Unknown 0 36m 10.2.10.2 192.168.56.12
net-test-5767cb94df-zb8m4 1/1 Running 0 36m 10.2.73.2 192.168.56.13
nginx-deployment-6c45fc49cb-dmc22 1/1 Running 0 4m 10.2.73.6 192.168.56.13
nginx-deployment-6c45fc49cb-fd8xm 1/1 Running 0 4m 10.2.73.4 192.168.56.13
nginx-deployment-6c45fc49cb-sc8sh 1/1 Running 0 4m 10.2.73.5 192.168.56.13 Deployment、ReplicaSet、Pod 都已经就绪。如果要删除这些资源,执行 kubectl delete deployment nginx-deployment 或者 kubectl delete -f nginx-deployment.yaml。 4、测试Pod访问
[root@linux-node1 ~]# curl --head http://10.2.73.6
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Thu, 16 Aug 2018 08:18:14 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes 5、更新Deployment [root@linux-node1 ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record #nginx的版本升级,由1.13.2升级为1.15.2,记录需要加参数--record
deployment.apps "nginx-deployment" image updated [root@linux-node1 ~]# kubectl get deployment -o wide  #查看更新后的deployment,可以看到当前4个副本,说明还在滚动升级中
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
net-test 2 2 2 2 39m net-test alpine run=net-test
nginx-deployment 3 4 1 3 6m nginx nginx:1.15.2 app=nginx 6、查看更新历史
[root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment #查看更新历史记录
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment/nginx-deployment nginx=nginx:1.15.2 --record=true

7、查看具体某一个版本的升级历史 [root@linux-node1 ~]# kubectl rollout history deployment/nginx-deployment --revision=1
deployments "nginx-deployment" with revision #1
Pod Template:
Labels: app=nginx
pod-template-hash=2701970576
Containers:
nginx:
Image: nginx:1.13.12
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>

8、查看更新后的Deployment,并进行访问 [root@linux-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
net-test-5767cb94df-djt98 1/1 Running 0 30m 10.2.73.3 192.168.56.13
net-test-5767cb94df-hcwv7 1/1 Unknown 0 42m 10.2.10.2 192.168.56.12
net-test-5767cb94df-zb8m4 1/1 Running 0 42m 10.2.73.2 192.168.56.13
nginx-deployment-64749d4b59-djttr 1/1 Running 0 37s 10.2.73.8 192.168.56.13
nginx-deployment-64749d4b59-jp7fw 1/1 Running 0 3m 10.2.73.7 192.168.56.13
nginx-deployment-64749d4b59-q4fsn 1/1 Running 0 33s 10.2.73.9 192.168.56.13
[root@linux-node1 ~]# curl --head http://10.2.73.7
HTTP/1.1 200 OK
Server: nginx/1.15.2  #版本已经升级为1.15.2
Date: Thu, 16 Aug 2018 08:24:09 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 24 Jul 2018 13:02:29 GMT
Connection: keep-alive
ETag: "5b572365-264"
Accept-Ranges: bytes 9、快速回滚到上一个版本 [root@linux-node1 ~]# kubectl rollout undo deployment/nginx-deployment #回滚上一个版本
deployment.apps "nginx-deployment" [root@linux-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
net-test-5767cb94df-djt98 1/1 Running 0 32m 10.2.73.3 192.168.56.13
net-test-5767cb94df-hcwv7 1/1 Unknown 0 43m 10.2.10.2 192.168.56.12
net-test-5767cb94df-zb8m4 1/1 Running 0 43m 10.2.73.2 192.168.56.13
nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 24s 10.2.73.11 192.168.56.13
nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 26s 10.2.73.10 192.168.56.13
nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 21s 10.2.73.12 192.168.56.13
[root@linux-node1 ~]# curl --head http://10.2.73.10
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Thu, 16 Aug 2018 08:25:35 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes 回滚完成,每一次更新或者回滚ip都会变化,所以需要通过vip进行访问,这就引入了service 10、使用service的vip进行访问应用 [root@linux-node1 ~]# vim nginx-service.yaml  #使用yaml方式创建service
kind: Service
apiVersion: v1
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80 [root@linux-node1 ~]# kubectl create -f nginx-service.yaml   #创建service
service "nginx-service" created [root@linux-node1 ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 4h
nginx-service ClusterIP 10.1.213.126 <none> 80/TCP 15s  #这个就是vip [root@linux-node2 ~]# curl --head http://10.1.213.126  #在node2节点上进行访问vip测试,在node1上无法访问是因为没有安装kube-proxy导致无法访问
HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Thu, 16 Aug 2018 08:30:08 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Connection: keep-alive
ETag: "5acb8e45-264"
Accept-Ranges: bytes

11、扩容到5个节点 [root@linux-node1 ~]# kubectl scale deployment nginx-deployment --replicas 5  #对应用的副本数进行扩容,直接指定副本数为5
deployment.extensions "nginx-deployment" scaled [root@linux-node1 ~]# kubectl get pod  #查看pod状态,可以看到已经增加到5个副本
NAME READY STATUS RESTARTS AGE
net-test-5767cb94df-djt98 1/1 Running 0 38m
net-test-5767cb94df-hcwv7 1/1 Unknown 0 50m
net-test-5767cb94df-zb8m4 1/1 Running 0 50m
nginx-deployment-6c45fc49cb-b9h84 1/1 Running 0 6m
nginx-deployment-6c45fc49cb-g4mrg 1/1 Running 0 7m
nginx-deployment-6c45fc49cb-k29kq 1/1 Running 0 6m
nginx-deployment-6c45fc49cb-n9qkx 1/1 Running 0 24s
nginx-deployment-6c45fc49cb-xpx9s 1/1 Running 0 24s

##扩容与减容

  #kubectl get deployment ##获取deployment名称
  #kubectl scale deployment nginx-deployment --replicas=3 扩容到3个
  #kubectl scale deployment nginx-deployment --replicas=1 恢复成1个

##动态处理CPU资源

#kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80

Deployment YAML方式创建Nginx服务的更多相关文章

  1. 【学习笔记】启动Nginx、查看nginx进程、查看nginx服务主进程的方式、Nginx服务可接受的信号、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级

     1.启动nginx的方式: cd /usr/local/nginx ls ./nginx -c nginx.conf 2.查看nginx的进程方式: [root@localhost nginx] ...

  2. .NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端

    .NET Core love gRPC 千呼万唤的 .NET Core 3.0 终于在 9 月份正式发布,在它的众多新特性中,除了性能得到了大大提高,比较受关注的应该是 ASP.NET Core 3. ...

  3. 使用.NET Core中创建Windows服务(一) - 使用官方推荐方式

    原文:Creating Windows Services In .NET Core – Part 1 – The "Microsoft" Way 作者:Dotnet Core Tu ...

  4. 使用.NET Core创建Windows服务(一) - 使用官方推荐方式

    原文:使用.NET Core创建Windows服务(一) - 使用官方推荐方式 原文:Creating Windows Services In .NET Core – Part 1 – The &qu ...

  5. ubuntu 16.04通过源码方式安装nginx

    1.下载nginx源码包 wget  http://nginx.org/download/nginx-1.11.12.tar.gz 2.解压该tar包 tar zxvf nginx-1.11.12.t ...

  6. 运行一个nodejs服务,先发布为deployment,然后创建service,让集群外可以访问

    问题来源 海口-老男人 17:42:43 就是我要运行一个nodejs服务,先发布为deployment,然后创建service,让集群外可以访问 旧报纸 17:43:35 也就是 你的需求为 一个a ...

  7. 创建Windows服务(Windows Services)N种方式总结

    最近由于工作需要,写了一些windows服务程序,有一些经验,我现在总结写出来.目前我知道的创建创建Windows服务有3种方式:a.利用.net框架类ServiceBaseb.利用组件Topshel ...

  8. (转)创建Windows服务(Windows Services)N种方式总结

    转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在 ...

  9. 使用.NET Core创建Windows服务(二) - 使用Topshelf方式

    原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tut ...

随机推荐

  1. react 中发布订阅模式使用

    react 中发布订阅模式使用 场景 怎么能将设计模式应用到我们的 React 项目中?以前一直在思考这个问题. 场景一 模块 A 模块 B 需要用到同一个数据 data,A 和 B 都会修改这份数据 ...

  2. spring javabean以及反射机制

    spring是一个管理java对象的一个容器,注入到容器中的对象称之为javabean: spring配置的bean,配置的不是bean而是实例. 反射机制:一个类中的方法,属性等都可以获取本类然后获 ...

  3. spring ioc 源码分析之-- beanDefinition的加载过程以及ComponentScan,@componet,@import @Bean等注解解析过程

    背景:我们启动主启动类后,相应的bean就被扫描进来了,原理是啥? 实现该功能的主要核心类就是:ConfigurationClassPostProcessor,我们看看他的继承体系: 它实现了Bean ...

  4. 一文搞懂AQS及其组件的核心原理

    @ 目录 前言 AbstractQueuedSynchronizer Lock ReentrantLock 加锁 非公平锁/公平锁 lock tryAcquire addWaiter acquireQ ...

  5. 谈谈数据库的事务ACID

    在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况. ...

  6. Code Test(1)

    0922test 最小数Time Limit: 1 Sec Memory Limit: 128 MB文件名:a.cppDescription给定一个正整数n,请去掉其中的m个数字,使其剩下的数字按原先 ...

  7. Python3基础——递归

    递归函数 如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈 ...

  8. C# 软件开机启动

    如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! !---------------------------- ...

  9. 如何在yii2直接执行SQL

    执行SQL $connection=Yii::app()->db;   // 假设你已经建立了一个 "db" 连接 $sql = "SELECT * FROM tb ...

  10. 网站搭建-云服务器ECS的使用

    1. 查看购买的云服务器实例,重置密码 2. 查找IP进行查看,此时网页时不存在的,开始配置: 3. 登录putty或其他终端,进行网页搭建,先按教程走一遍,然后再做个性化处理: #安装Apache ...