通过分析实操题来学习、巩固cka中的考点。本次的重点是用Scale命令扩展一个应用的实例数。

题目

CKA 备考 - 1 - 建立一个Deloyment并显示状态中建立的Pod的运行实例数扩展到5个, 完成后检查 Deployment 的 Rollout 状态和检查Pod的运行状态。

解题思路

核心概念

本题的核心就是考kubernetes的应用伸缩能力。为方便对应用的处理能力进行横向伸缩,kubernetes提供了scale命令,该命令提供了手动对Deployment、ReplicaSet、Replication Controller或 Job 进行横向伸缩的功能。执行后具体的效果就是对应的Pod数量增加或减少(相对于执行scale命令之前)。

相关命令

本题需要熟练掌握的命令是 kubectl scale, 具体的参数不用记,通过 help 可以现场查看,例如:

1
kubectl scale --help

系统将显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Set a new size for a deployment, replica set, replication controller, or stateful set.

Scale also allows users to specify one or more preconditions for the scale action.

If --current-replicas or --resource-version is specified, it is validated before the scale is attempted, and it is
guaranteed that the precondition holds true when the scale is sent to the server.

Examples:
# Scale a replica set named 'foo' to 3
kubectl scale --replicas=3 rs/foo

# Scale a resource identified by type and name specified in "foo.yaml" to 3
kubectl scale --replicas=3 -f foo.yaml

# If the deployment named mysql's current size is 2, scale mysql to 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

# Scale multiple replication controllers
kubectl scale --replicas=5 rc/foo rc/bar rc/baz

# Scale stateful set named 'web' to 3
kubectl scale --replicas=3 statefulset/web

Options:
--all=false: Select all resources in the namespace of the specified resource types
--allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in
the template. Only applies to golang and jsonpath output formats.
--current-replicas=-1: Precondition for current size. Requires that the current size of the resource match this
value in order to scale. -1 (default) for no condition.
--dry-run='none': Must be "none", "server", or "client". If client strategy, only print the object that would be
sent, without sending it. If server strategy, submit server-side request without persisting the resource.
-f, --filename=[]: Filename, directory, or URL to files identifying the resource to set a new size
-k, --kustomize='': Process the kustomization directory. This flag can't be used together with -f or -R.
-o, --output='': Output format. One of:
json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file.
-R, --recursive=false: Process the directory used in -f, --filename recursively. Useful when you want to manage
related manifests organized within the same directory.
--replicas=0: The new desired number of replicas. Required.
--resource-version='': Precondition for resource version. Requires that the current resource version match this
value in order to scale.
-l, --selector='': Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
--show-managed-fields=false: If true, keep the managedFields when printing objects in JSON or YAML format.
--template='': Template string or path to template file to use when -o=go-template, -o=go-template-file. The
template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
--timeout=0s: The length of time to wait before giving up on a scale operation, zero means don't wait. Any other
values should contain a corresponding time unit (e.g. 1s, 2m, 3h).

Usage:
kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
[options]

Use "kubectl options" for a list of global command-line options (applies to all commands).

解题步骤

在本题中,我们使用扩展 deployment 的方法,执行

1
kubectl scale --replicas=5 deployment/my-dep

my-dep 是在 CKA 备考 - 1 - 建立一个Deloyment并显示状态 练习中建立的 Deployment。

执行后系统显示

1
deployment.apps/my-dep scaled

现在,查看Pod列表系统显示类似如下的信息:

1
2
3
4
5
6
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-655995c9d4-2rr72 1/1 Running 0 55m
my-dep-655995c9d4-4gknh 1/1 Running 0 55m
my-dep-655995c9d4-6x66r 1/1 Running 0 37s
my-dep-655995c9d4-mtqwb 1/1 Running 0 36s
my-dep-655995c9d4-pz849 1/1 Running 0 55m

可以看到对应的Pod数量已经增加到5个。

再查看rollout状态

1
kubectl rollout status deployment/my-dep

或是查看rollout版本

1
kubectl rollout history deployment/my-dep

通过观察可以看到,伸缩应用不会影响rollout的状态