1. 工作负载之Controllers

1.1 ReplicaSet

1.1.1 创建ReplicaSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建Yaml文件
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-nginx
labels:
app: nginx
spec:
replicas: 6
selector:
matchLabels:
app: pod-nginx
template:
metadata:
labels:
app: pod-nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent

1.1.2 查看ReplicaSet

1
2
3
4
5
kubectl get replicasets.apps
DESIRED: 请求的副本数
CURRENT:实际运行的副本数
READY:副本数为READY的数量
AGE:生命周期

1.1.3 调整ReplicaSet副本数

1
2
3
4
5
6
7
# 方法一:修改本地yaml文件的replicas: 3

# 方法二:编辑已经运行资源的yaml文件
kubectl edit replicaset <NAME>

# 方法三:通过命令行
kubectl scale replicaset --replicas=1 <NAME>

1.2 Deployment

1.2.1 创建Deployment

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
# 方法一:命令行创建
kubectl create deployment nginx-app --image=nginx:1.9.0

# 方法二:创建Yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: deployment-nginx
spec:
replicas: 4
selector:
matchLabels:
app: pod-nginx
template:
metadata:
labels:
app: pod-nginx
spec:
containers:
- name: nginx
image: nginx:1.7.6
ports:
- containerPort: 80

1.2.2 查看Deployment

1
2
3
4
5
kubectl get deployment
READY:Pod READY的数量
UP-TO-DATE: 升级最新的Pod数量
AVAILABLE:可用的Pod数量
AGE:资源的生命周期

1.2.3 调整ReplicaSet副本数

1
2
3
4
5
6
7
# 方法一:修改本地yaml文件的replicas: 3

# 方法二:编辑已经运行资源的yaml文件
kubectl edit deployment <NAME>

# 方法三:通过命令行
kubectl scale deployment --replicas=1 <NAME>

1.2.4 升级image

1
2
3
4
5
6
7
8
9
10
11
12
# 方法一
更改本地yaml,并使用apply升级

# 方法二
使用edit更改运行的Deployment,修改container的image

# 方法三
通过命令行升级并记录升级信息:kubectl set image deployment nginx-deployment nginx=nginx:latest --record
#考试用的命令

# 查看deployment升级的状态
kubectl rollout status deployment nginx-deployment

1.2.5 回滚

1
2
3
4
5
6
7
8
# 查看历史记录
kubectl rollout history deployment nginx-deployment

# 查看某一个记录的详细信息
kubectl rollout history deployment nginx-deployment --revision=1

# 执行回滚操作
kubectl rollout undo deployment nginx-deployment --to-revision=1

1.2.6 暂停与恢复

1
2
3
4
5
# 暂停部署
kubectl rollout pause deployment nginx-deployment

# 恢复部署
kubectl rollout resume deployment nginx-deployment

1.2.7 重新部署应用

1
2
# 重新部署
kubectl rollout restart deployment nginx-deployment

1.3 StatefulSet

1.3.1 创建StatefulSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 创建Yaml文件
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: pod-nginx
serviceName: "nginx"
replicas: 5
template:
metadata:
labels:
app: pod-nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: web

1.3.2 查看StatefulSet

1
kubectl get statefulsets.apps

1.3.3 调整ReplicaSet副本数

1
2
3
4
5
6
7
# 方法一:修改本地yaml文件的replicas: 3

# 方法二:编辑已经运行资源的yaml文件
kubectl edit statefulset <NAME>

# 方法三:通过命令行
kubectl scale statefulset --replicas=1 <NAME>

1.3.4 升级image

1
2
3
4
5
6
7
8
9
10
11
# 方法一
更改本地yaml,并使用apply升级

# 方法二
使用edit更改运行的statefulset,修改container的image

# 方法三
通过命令行升级并记录升级信息:kubectl set image statefulset web nginx=nginx:latest --record

# 查看deployment升级的状态
kubectl rollout status statefulset web

1.3.5 回滚

1
2
3
4
5
6
7
8
# 查看历史记录
kubectl rollout history statefulset web

# StatefulSet不支持查看history详细信息
kubectl rollout history statefulset web --revision=1

# 执行回滚操作
kubectl rollout undo statefulset web --to-revision=1

1.3.6 暂停与恢复

1
2
3
4
5
# 暂停部署
kubectl rollout pause statefulset web

# 恢复部署
kubectl rollout resume statefulset web

1.3.7 重新部署应用

1
2
# 重新部署
kubectl rollout restart statefulset web

1.4 DaemonSet

1.4.1 创建DaemonSet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建Yaml文件
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: nginx
imagePullPolicy: IfNotPresent

1.4.2 查看DaemonSet

1
2
3
4
5
6
7
8
kubectl get daemonsets.apps
DESIRED: 请求的副本数
CURRENT:实际运行的副本数
READY:副本数为READY的数量
UP-TO-DATE: 升级最新的Pod数量
AVAILABLE:可用的Pod数量
NODE SELECTOR: 节点选择器
AGE:生命周期

1.4.3 升级image

1
2
3
4
5
6
7
8
9
10
11
# 方法一
更改本地yaml,并使用apply升级

# 方法二
使用edit更改运行的daemonsets,修改container的image

# 方法三
通过命令行升级并记录升级信息:kubectl set image daemonsets fluentd-elasticsearch fluentd-elasticsearch=nginx:latest --record

# 查看deployment升级的状态
kubectl rollout status daemonsets fluentd-elasticsearch

1.4.4 回滚

1
2
3
4
5
6
7
8
# 查看历史记录
kubectl rollout history daemonsets fluentd-elasticsearch

# 查看某一个记录的详细信息
kubectl rollout history daemonsets fluentd-elasticsearch --revision=1

# 执行回滚操作
kubectl rollout undo daemonsets fluentd-elasticsearch --to-revision=1

1.4.5 暂停与恢复

1
2
3
4
5
# 暂停部署
kubectl rollout pause daemonsets fluentd-elasticsearch

# 恢复部署
kubectl rollout resume daemonsets fluentd-elasticsearch

1.4.6 重新部署应用

1
2
# 重新部署
kubectl rollout restart daemonsets fluentd-elasticsearch

1.5 Jobs and CronJob

1.5.1 创建Job

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 编写Yaml文件
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
imagePullPolicy: IfNotPresent
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
completions: 6
parallelism: 2

1.5.2 查看Jobs

1
2
3
4
5
kubectl get job
NAME: Job的名字
COMPLETIONS:完成的数量/总数量
DURATION:持续时间
AGE:生命周期

1.5.3 创建CronJob

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 编写Yaml文件
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure

1.5.4 查看CronJob

1
2
3
4
5
kubectl get cronjob
SCHEDULE:时间表
SUSPEND:暂停
ACTIVE:激活的任务
LAST SCHEDULE:最后执行的时间