Kubernetes Cookbook 编程指南 中文版教程
创建时间:2018-12-07  访问量:3673  7  0

Kubernetes Cookbook 编程指南 中文版教程

扩展你的容器

Kubernetes有一个调度器来将容器分配到合适的Node节点上。另外,你可以简单的向上或向下扩展容器的数量。Kubernetes的扩展功能将引导副本控制器调整容器的数量。

开始

准备以下YAML文件,这是一个运行两个nginx容器的简单副本控制器。同样,服务将暴露TCP端点30080:

# cat nginx-rc-svc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
	name: my-nginx
spec:
    replicas: 2
    selector:
    	sel : my-selector
    template:
        metadata:
            labels:
            sel : my-selector
        spec:
            containers:
            - name: my-container
            image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx

spec:
    ports:
        - protocol: TCP
            port: 80
            nodePort: 30080
    type: NodePort
    selector:
        sel: my-selector

NodePort将与所有Kubernetes Node节点绑定;因此,确保NodePort没有被其它进程使用

使用kubectl命令创建资源,如下所示:

# kubectl create -f nginx-service.yaml
replicationcontroller "my-nginx" created
service "my-nginx" created

稍等一会,完全运行两个nginx容器,如下所示:

# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-iarzy 1/1 Running 0 7m
my-nginx-ulkvh 1/1 Running 0 7m

# kubectl get services
NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE
kubernetes 192.168.0.1 <none> 443/TCP <none> 44d
my-nginx 192.168.95.244 nodes 80/TCP sel=my-selector 7m

如何去做...

Kubernetes有一个命令可以改变服务副本数量:

  1. 输入如下所示的kubectl scale命令指定期望的副本数量:

# kubectl scale --replicas=4 rc my-nginx
replicationcontroller "my-nginx" scaled

这个例子表明了副本控制器,它的名称是my-nginx,副本数量变成了4。

  1. 输入kubectl get pods来确认下结果,如下所示:

# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-iarzy 1/1 Running 0 20m
my-nginx-r5lnq 1/1 Running 0 1m
my-nginx-uhe8r 1/1 Running 0 1m
my-nginx-ulkvh 1/1 Running 0 20m

kubectl scale命令的功能是可以改变副本数量;不仅仅是增加,也可减少。例如,你可将副本数量改变只有两个,如下所示:

# kubectl scale --replicas=2 rc my-nginx
replicationcontroller "my-nginx" scaled

# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-iarzy 0/1 Terminating 0 40m
my-nginx-r5lnq 1/1 Running 0 21m
my-nginx-uhe8r 1/1 Running 0 21m
my-nginx-ulkvh 0/1 Terminating 0 40m
# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-r5lnq 1/1 Running 0 25m
my-nginx-uhe8r 1/1 Running 0 25m

有一个--current-replicas选项指定了期望的当前副本。如果它不匹配,Kubernetes就不执行扩展,如下所示:

//abort scaling, because current replica is 2, not 3
# kubectl scale --current-replicas=3 --replicas=4
rc my-nginx
Expected replicas to be 3, was 2

# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-r5lnq 1/1 Running 0 27m
my-nginx-uhe8r 1/1 Running 0 27m

它将有助于防止人为错误。黙认情况下,--current-replicas等于-1,这意味着绕开了对当前副本数量的检查:

//no matter current number of replicas, performs to change to 4
# kubectl scale --current-replicas=-1 --replicas=4 rc my-nginx
replicationcontroller "my-nginx" scaled

# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-dimxj 1/1 Running 0 5s
my-nginx-eem3a 1/1 Running 0 5s
my-nginx-r5lnq 1/1 Running 0 35m
my-nginx-uhe8r 1/1 Running 0 35m

还可以参考

本节描述了如何使用扩展选项来通过副本控制器改变Pod的数量。它对于快速的向上或向下扩展应用是非常有用的。为了了解更多关于如何更新你的容器,参考以下章节:

  • 更新活动容器

  • 保证容器的灵活使用