1. 工作负载之Controllers
· 阅读需 5 分钟
1.1 ReplicaSet
1.1.1 创建ReplicaSet
# 创建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
kubectl get replicasets.apps
DESIRED: 请求的副本数
CURRENT:实际运行的副本数
READY:副本数为READY的数量
AGE:生命周期
1.1.3 调整ReplicaSet副本数
# 方法一:修改本地yaml文件的replicas: 3
# 方法二:编辑已经运行资源的yaml文件
kubectl edit replicaset `<NAME>`
# 方法三:通过命令行
kubectl scale replicaset --replicas=1 `<NAME>`
1.2 Deployment
1.2.1 创建Deployment
# 方法一:命令行创建
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
kubectl get deployment
READY:Pod READY的数量
UP-TO-DATE: 升级最新的Pod数量
AVAILABLE:可用的Pod数量
AGE:资源的生命周期
1.2.3 调整ReplicaSet副本数
# 方法一:修改本地yaml文件的replicas: 3
# 方法二:编辑已经运行资源的yaml文件
kubectl edit deployment `<NAME>`
# 方法三:通过命令行
kubectl scale deployment --replicas=1 `<NAME>`
1.2.4 升级image
# 方法一
更改本地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 回滚
# 查看历史记录
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 暂停与恢复
# 暂停部署
kubectl rollout pause deployment nginx-deployment
# 恢复部署
kubectl rollout resume deployment nginx-deployment
1.2.7 重新部署应用
# 重新部署
kubectl rollout restart deployment nginx-deployment
1.3 StatefulSet
1.3.1 创建StatefulSet
# 创建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
kubectl get statefulsets.apps
1.3.3 调整ReplicaSet副本数
# 方法一:修改本地yaml文件的replicas: 3
# 方法二:编辑已经运行资源的yaml文件
kubectl edit statefulset `<NAME>`
# 方法三:通过命令行
kubectl scale statefulset --replicas=1 `<NAME>`
1.3.4 升级image
# 方法一
更改本地yaml,并使用apply升级
# 方法二
使用edit更改运行的statefulset,修改container的image
# 方法三
通过命令行升级并记录升级信息:kubectl set image statefulset web nginx=nginx:latest --record
# 查看deployment升级的状态
kubectl rollout status statefulset web
1.3.5 回滚
# 查看历史记录
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 暂停与恢复
# 暂停部署
kubectl rollout pause statefulset web
# 恢复部署
kubectl rollout resume statefulset web
1.3.7 重新部署应用
# 重新部署
kubectl rollout restart statefulset web
1.4 DaemonSet
1.4.1 创建DaemonSet
# 创建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
kubectl get daemonsets.apps
DESIRED: 请求的副本数
CURRENT:实际运行的副本数
READY:副本数为READY的数量
UP-TO-DATE: 升级最新的Pod数量
AVAILABLE:可用的Pod数量
NODE SELECTOR: 节点选择器
AGE:生命周期
1.4.3 升级image
# 方法一
更改本地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 回滚
# 查看历史记录
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 暂停与恢复
# 暂停部署
kubectl rollout pause daemonsets fluentd-elasticsearch
# 恢复部署
kubectl rollout resume daemonsets fluentd-elasticsearch
1.4.6 重新部署应用
# 重新部署
kubectl rollout restart daemonsets fluentd-elasticsearch
1.5 Jobs and CronJob
1.5.1 创建Job
# 编写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
kubectl get job
NAME: Job的名字
COMPLETIONS:完成的数量/总数量
DURATION:持续时间
AGE:生命周期
1.5.3 创建CronJob
# 编写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
kubectl get cronjob
SCHEDULE:时间表
SUSPEND:暂停
ACTIVE:激活的任务
LAST SCHEDULE:最后执行的时间