一、部署组合型的应用
 
1、使用配置文件启动replicas集合
 
k8s通过Replication Controller来创建和管理各个不同的重复容器集合(实际上是重复的pods)。
 
Replication Controller会确保pod的数量在运行的时候会一直保持在一个特殊的数字,即replicas的设置。
这个功能类似于Google GCE的实例组管理和AWS的弹性伸缩。
 

在快速开始中,通过kubectl run以下的YAML文件创建了一个rc运行着nginx:

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-nginx
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

rc可以通过create命令像创建pod一样来创建:

$ kubectl create -f ./nginx-rc.yaml
replicationcontrollers/my-nginx

和直接创建pod不一样,rc将会替换因为任何原因而被删除或者停止运行的Pod,比如说pod依赖的节点挂了。所以我们推荐使用rc来创建和管理复杂应用,即使你的应用只要使用到一个pod,在配置文件中忽略replicas字段的设置即可。

2、查看Replication Controller的状态

$ kubectl get rc
CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR    REPLICAS
my-nginx     nginx          nginx      app=nginx   2
这个状态表示,你创建的rc将会确保你一直有两个nginx的副本。
 
也可以和直接创pPod一样查看创建的Pod状态信息:
$ kubectl get pods
NAME             READY     STATUS    RESTARTS   AGE
my-nginx-065jq   1/1       Running   0          51s
my-nginx-buaiq   1/1       Running   0          51s
3、删除Replication Controller
 
当你想停止你的应用,删除你的rc,可以使用:
$ kubectl delete rc my-nginx
replicationcontrollers/my-nginx
默认的,这将会删除所有被这个rc管理的pod,如果pod的数量很大,将会花一些时间来完成整个删除动作,如果你想使这些pod停止运行,请指定--cascade=false。
如果你在删除rc之前尝试删除pod,rc将会立即启动新的pod来替换被删除的pod,就像它承诺要做的一样。
4、Labels
 
k8s使用用户自定义的key-value键值对来区分和标识资源集合(就像rc、pod等资源),这种键值对称为label。
在上面的例子中,定义pod的template字段包含了一个简单定义的label,key的值为app,value的值为nginx。所有被创建的pod都会卸载这个label,可以通过-L参数来查看:
$ kubectl get rc my-nginx -L app
CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR    REPLICAS   APP
my-nginx     nginx          nginx      app=nginx   2          nginx
默认情况下,pod的label会复制到rc的label,同样地,k8s中的所有资源都支持携带label。
 
更重要的是,pod的label会被用来创建一个selector,用来匹配过滤携带这些label的pods。


实用命令总结:

kubectl get po
kubectl get po -o wide


kubectl get po --all-namespaces
kubectl get po --namespace=kube-system


kubectl get namespace

kubectl get rc

kubectl get svc

kubectl get node

kubectl get po ejabberd-worker-18.4.1.0-1bgf5 -o yaml


kubectl get po ejabberd-worker-18.4.1.0-1bgf5 -o json


edit提供了另一种更新resource源的操作,通过edit能够灵活的在一个common的resource基础上,发展出更过的significant resource。例如,使用edit直接更新前面创建的pod的命令为:

kubectl edit po rc-nginx-btv4j 
上面命令的效果等效于: 
kubectl get po rc-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml   
vim /tmp/nginx-tmp.yaml   
/*do some changes here */   
kubectl replace -f /tmp/nginx-tmp.yaml  
scale用于程序在负载加重或缩小时副本进行扩容或缩小,如前面创建的nginx有两个副本,可以轻松的使用scale命令对副本数进行扩展或缩小。 

扩展副本数到4:

kubectl scale rc rc-nginx-3 —replicas=4
scale虽然能够很方便的对副本数进行扩展或缩小,但是仍然需要人工介入,不能实时自动的根据系统负载对副本数进行扩、缩。autoscale命令提供了自动根据pod负载对其副本进行扩缩的功能。 

     autoscale命令会给一个rc指定一个副本数的范围,在实际运行中根据pod中运行的程序的负载自动在指定的范围内对pod进行扩容或缩容。如前面创建的nginx,可以用如下命令指定副本范围在1~4

kubectl autoscale rc rc-nginx-3 —min=1 —max=4



Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐