k8s缩放应用程序
参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/
步骤1:扩展部署
要列出部署,请使用GET部署命令:kubectl get deployments
我们应该有一个POD。如果没有,请再次运行该命令。这显示:所需的状态显示的是已配置的副本数量,当前的状态显示了现在运行的副本的数量,最新的是更新以匹配所需(配置的)状态的副本的数量,可用状态显示用户实际可用的副本数量。
输出的自字段含义:
NAME: Deployments名称
DESIRED:创建Deployments时指定的副本数量。
CURRENT:当前正在运行的副本数量。
UP-TO-DATE:成功升级的副本数量。
AVAILABLE:可用的副本数量,注意副本在运行不等于可用。
AGE:应用运行时间。
接下来,让我们将部署扩展到4个副本。我们将使用kubectl Scale命令,后面跟着deployment类型、名称和所需的实例数:
$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 15m
现在我们有4个可用的应用程序实例。接下来,让我们检查一下Pods的数量是否发生了变化:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-bootcamp-6bf84cb898-7mcsw 1/1 Running 0 2m53s 172.18.0.7 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-92gcb 1/1 Running 0 17m 172.18.0.4 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-949rh 1/1 Running 0 2m53s 172.18.0.6 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-r678j 1/1 Running 0 2m53s 172.18.0.5 minikube <none> <none>
现在有4种不同的IP地址。更改已在deployments事件日志中注册。要检查这一点,请使用Description命令:
$ kubectl describe deployments/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
CreationTimestamp: Sun, 07 Apr 2019 08:48:24 +0000
Labels: run=kubernetes-bootcamp
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=kubernetes-bootcamp
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable #这里
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=kubernetes-bootcamp
Containers:
kubernetes-bootcamp:
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Port: 8080/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: kubernetes-bootcamp-6bf84cb898 (4/4 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 1
Normal ScalingReplicaSet 5m39s deployment-controller Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 4
您还可以在此命令的输出中查看现在有4个副本。
步骤2:负载平衡
让我们检查一下service是否是负载平衡的流量。为了找到公开的IP和端口,我们可以使用 describe service:
$ kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: run=kubernetes-bootcamp
Annotations: <none>
Selector: run=kubernetes-bootcamp
Type: NodePort
IP: 10.96.175.74
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31242/TCP
Endpoints: 172.18.0.4:8080,172.18.0.5:8080,172.18.0.6:8080 + 1 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
创建一个名为Node_Port的环境变量,其值为Node端口:
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT=31242
接下来,我们将对公开的IP和端口进行curl。多次执行该命令
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-949rh | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-r678j | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-949rh | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-r678j | v=1
我们每次请求都会碰到不同的情况。这表明负载平衡是有效的。
查看Deployments的推进状态(rollout status):
$ kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out
第三步:缩小规模
若要将服务缩小到2个副本,请再次运行Scale命令:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 35m
$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 2/2 2 2 42m
复制数减少到2个。列出Pods的数量:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-bootcamp-6bf84cb898-4rhbr 1/1 Running 0 5m35s 172.18.0.6 minikube <none> <none>
kubernetes-bootcamp-6bf84cb898-v6zf2 1/1 Running 0 5m39s 172.18.0.3 minikube <none> <none>
k8s缩放应用程序的更多相关文章
- .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查
上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod kubectl create -f netcore-pod.yaml ...
- k8s 部署应用程序
k8s相关工具介绍: Kubeadm Kubeadm解决了处理TLS加密配置.部署核心Kubernetes组件和确保其他节点可以轻松地加入集群的问题.生成的集群通过RBAC等机制得到保护. 有关Kub ...
- 入门 - k8s伸缩应用程序 (六)
目标 使用 kubectl 伸缩应用程序. Scaling(伸缩)应用程序 在之前的文章中,我们创建了一个 Deployment,然后通过 服务 提供访问 Pod 的方式.我们发布的 Deployme ...
- .net core i上 K8S(七).netcore程序的服务发现
上一章我们分享了k8s的网络代理模式,今天我们来分享一下k8s中的服务发现. 1.环境变量模式的服务发现 k8s默认为我们提供了通过环境变量来实现服务发现的功能,前提是 1.需要service在pod ...
- .net core i上 K8S(六).netcore程序的service网络代理模式
上一章我们讲了pod的hostip模式,但在生产环境中,我们都是通过service来访问k8s集群的,service有两种模式来暴漏端口,今天我们来分享一下 1.clusterIP模式 我们在创建se ...
- k8s 更新应用程序
参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/ 更新应用程序 用户希望应用程序始终可用,开发人员每天需要部署几次新版本的应用程序. ...
- .net core i上 K8S(五).netcore程序的hostip模式
上一章讲了pod的管理,今天再分享一个pod的访问方式 1.Pod的HostIP模式 Pod的HostIP模式,可以通过宿主机访问pod内的服务,创建yaml文件如下 apiVersion: v1 k ...
- 如何把应用程序移植到k8s
程序部署环境的容器化已经是大势所趋,微服务为容器化提供了广阔的应用舞台,k8s已经把Docker纳入为它的底层支撑容器引擎,一统江湖,成为了容器技术事实上的标准.一般的应用程序是不能直接拿来部署到容器 ...
- 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)
本文说明从安装linux系统开始,一直到在k8s运行springboot程序全过程 本文假设在自己电脑操作,因此linux系统使用vmware虚拟机,linux发行版使用centos 7.6.1810 ...
随机推荐
- 批量处理JDBC语句提高处理速度
当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面两个方法: – ...
- ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 题目大意就是求一个序列里面长度为m的递增子序列的个数. 首先可以列出一个递推式p(len, i) = ...
- C# Hashtable赋值给另一个Hashtable时
c#中想将一个hashtable的元素全部给另一个hashbale时, 使用迭代一个一个元素赋值 如: ammus.Clear(); IDictionaryEnumerator ie = _temp. ...
- Starting MySQL....The server quit without updating PID file错误解决办法
出现错误:Starting MySQL....The server quit without updating PID file 检查错误文件: /var/lib/mysql/xxxx.err,根据其 ...
- boost::io_service解读
boost::io_service解读 asio是boost提供的一个c++异步编程模型库,其核心类io_service,在多线程编程里面提供了任务队列和任务分发功能,在socket.io编程里主要作 ...
- 三、使用maven创建scala工程(scala和java混一起)
本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现spark的本地运行.最后,成功运行scala编写的spark程序. 刚开始我的eclipse+maven环境是配 ...
- 杂项:art-template-loader
ylbtech-杂项:art-template-loader 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://www.npmjs.com/p ...
- Windows 2008 远程登陆时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限"
ECS Win2008 远程时提示"要登录到此远程计算机,您必须被授予允许通过终端登录登录的权限"的解决方法 问题描述 ECS Windows 2008 远程登陆时提示&quo ...
- 12.Redis Select 命令 - 切换到指定的数据库
转自:http://www.runoob.com/redis/redis-tutorial.html Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 ...
- linux日常管理-rsync后台服务方式-2
把本地的数据拷贝到远程 这里是个错误,read only.只允许读,不允许写. 改一下远程机器的配置文件 把read only改为no 拷贝到远程成功 tree一下远程机器的目录 ////////// ...