文章目录
-
- 一、资源创建
-
- 1、命令行创建
-
- 1、创建Pod控制器
- 2、创建Service资源类型
- 2、配置清单(yml、yaml)创建
-
- 1、Deployment
- 2、Service
- 3、运行yaml文件
- 4、查看创建资源帮助信息
- 5、查看资源创建过程
- 二、Namespace
- 三、Deployment
- 四、Service
- 五、Pod
-
- 1、常用命令
- 2、镜像获取策略
- 3、重启策略
- 4、默认健康检查
-
- 1、LivenessProbe(活跃度、存活性)
- 2、Readiness(敏捷探测、就绪性探测)
- 5、Job资源对象
-
- 1、ReplicaSet
- 2、DaemonSet
- 3、Job
- 4、CronJob
- 五、服务升级与回滚
-
- 1、服务的扩容与缩容
-
- 2、服务的升级与回滚
-
- 1、准备yaml文件指定不同版本的镜像
- 2、运行yaml文件并记录版本信息
- 3、升级版本并记录版本信息
- 4、查看已有版本信息
- 5、回滚指定版本
一、资源创建
1、命令行创建
1、创建Pod控制器
[root@master ~]
2、创建Service资源类型
[root@master ~]
2、配置清单(yml、yaml)创建
1、Deployment
[root@master ~]
kind: Deployment //资源对象的类别
apiVersion: extensions/v1beta1 //api版本信息
metadata: //元数据
name: web //服务名称
spec: //用户期望的状态
replicas: 4 //服务数量
template:
metadata:
labels: //标签
web: web
spec:
containers:
- name: httpd //容器名称
image: 192.168.1.10:5000/web1 //所用镜像
2、Service
[root@master ~]
kind: Service
apiVersion: v1
metadata:
name: websvc //serivice资源名称
spec:
type: NodePort //指定类型,让外网访问
selector: //标签选择器(使用相同的标签和标签选择器内容,使两个资源对象相互关联)
web: web
ports:
- protocol: TCP //端口协议
port: 80 //指定内部端口80
targetPort: 80 //对外提供映射端口80
nodePort: 32222 //指定集群映射端口,范围是30000-32767
3、运行yaml文件
[root@master ~]
[root@master ~]
4、查看创建资源帮助信息
[root@master ~]
[root@master ~]
[root@master ~]
5、查看资源创建过程
[root@master ~]
NewReplicaSet: webtest-5c975b4884 (4/4 replicas created) //创建RS控制器
[root@master ~]
Name: webtest-5c975b4884
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 17m replicaset-controller Created pod: webtest-5c975b4884-hjh86
Normal SuccessfulCreate 17m replicaset-controller Created pod: webtest-5c975b4884-bcz7n
Normal SuccessfulCreate 17m replicaset-controller Created pod: webtest-5c975b4884-fmk9c
Normal SuccessfulCreate 17m replicaset-controller Created pod: webtest-5c975b4884-tl8qn
[root@master ~]
Name: webtest-5c975b4884-tl8qn
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 15m default-scheduler Successfully assigned default/webtest-5c975b4884-tl8qn to node02
Normal Pulling 15m kubelet, node02 Pulling image "httpd"
Normal Pulled 15m kubelet, node02 Successfully pulled image "httpd"
Normal Created 15m kubelet, node02 Created container httpd
Normal Started 15m kubelet, node02 Started container httpd
二、Namespace
[root@master ~]
NAME STATUS AGE
default Active 15d //默认的名称空间
kube-node-lease Active 15d
kube-public Active 15d
kube-system Active 15d
[root@master ~]
[root@master yaml]
apiVersion: v1
kind: Namespace
metadata:
name: test
[root@master yaml]
三、Deployment
[root@master ~]
[root@master ~]
[root@master ~]
四、Service
[root@master ~]
[root@master ~]
[root@master ~]
五、Pod
1、常用命令
[root@master ~]
[root@master ~]
[root@master ~]
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
webtest-5c975b4884-bcz7n 1/1 Running 0 38s 10.244.1.5 node02 <none> <none>
[root@master ~]
root@webtest-5c975b4884-bcz7n:/usr/local/apache2
exit
2、镜像获取策略
kind: Pod
apiVersion: v1
metadata:
name: http
nameSpace: test
spec:
nodeName: node01
containers:
- name: http
image: httpd
imagePullPolicy: IfNotPresent //镜像获取策略
策略 |
说明 |
Always |
镜像标签为"latest"或镜像标签不存在时,总是从指定的仓库(默认的官方仓库、或者私有仓库)中获取最新镜像 |
IfNotPresent |
仅当本地镜像不存在时才从目标仓库中下载。也就意味着,如果本地存在,直接使用本地镜像,无需再联网下载 |
Never |
禁止从仓库中下载镜像,即只使用本地镜像 |
3、重启策略
apiVersion: v1
kind: Pod
apiVersion: v1
metadata:
name: http
nameSpace: test
spec:
restartPolicy: OnFailure //重启策略
containers:
- name: pod1
image: httpd
imagePullPolicy: IfNotPresent
策略 |
说明 |
Always |
但凡Pod对象终止就将其重启,此为默认设定,如果Pod是正常退出,而且重启策略为Always,那么Pod也会被重启 |
OnFailure |
仅在Pod对象出现错误时才将其重启 |
Never |
从不重启 |
4、默认健康检查
方式 |
原理 |
区别 |
LivenessProbe |
根据探测某个文件是否存在 |
根据Pod重启策略操作容器,大多数是重启容器;判断容器是否需要重启实现自愈 |
Readiness |
指示容器是否准备好服务请求 |
将容器设置为不可用,不接收Service转发的请求;判断容器是否已经准备好对外提供服务 |
1、LivenessProbe(活跃度、存活性)
kind: Pod
apiVersion: v1
metadata:
name: liveness
labels:
test: liveness
spec:
restartPolicy: OnFailure //重启策略
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/test; sleep 60; rm -rf /tmp/test; sleep 300
livenessProbe:
exec:
command:
- cat
- /tmp/test
initialDelaySeconds: 10 //Pod运行10秒后开始探测
periodSeconds: 5 //每5秒探测一次
2、Readiness(敏捷探测、就绪性探测)
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: web
namespace: test
spec:
strategy:
rollingUpdate:
maxSurge: 4 //允许同时出现的Pod的总数量
maxUnavailable: 2 //最大不可用Pod的值
replicas: 8
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: web
image: 192.168.1.10:5000/web-v1
参数 |
说明 |
maxSurge |
此参数控制滚动更新过程中,副本总数超过预期数(replicas)的值。可以是整数,也可以是百分比,默认1 |
maxUnavailable |
不可用Pod的值。默认为1,可以是整数,也可以是百分比 |
5、Job资源对象
1、ReplicaSet
apiVersion: extensions/v1beta1 //api版本定义
kind: ReplicaSet //定义资源类型为ReplicaSet
metadata: //元数据定义
name: myapp //ReplicaSet名称
namespace: default //ReplicaSet所属manespace
spec: //ReplicaSet的规格定义
replicas: 2 //定义副本数量为2个
selector: //标签选择器,定义匹配pod的标签
matchLabels:
app: myapp
release: canary
template: //pod的模板定义
metadata: //pod的元数据定义
name: myapp-pod //自定义pod的名称
labels: //定义pod的标签,需要和上面定义的标签一致,也可以多出其他标签
app: myapp
release: canary
environment: qa
spec: //pod的规格定义
containers: //容器定义
- name: myapp-container //容器名称
image: ikubernetes/myapp:v1 //容器镜像
ports: //暴露端口
- name: http
containerPort: 80
2、DaemonSet
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
name: daemonset
namespace: test
spec:
template:
metadata:
labels:
name: test-web
app: httpd
spec:
containers:
- name: web
image: 192.168.1.10:5000/web-v1
ports:
- containerPort: 80
3、Job
kind: Job
apiVersion: batch/v1
metadata:
name: test-user
namespace: test
spec:
parallelism: 2
completions: 6
template:
metadata:
name: user
spec:
containers:
- name: touch
image: busybox
command:
- /bin/sh
- -c
- touch /tmp/user.txt
restartPolicy: Never
4、CronJob
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: date
namespace: test
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: date
image: busybox
command: ["date"]
restartPolicy: OnFailure
五、服务升级与回滚
1、服务的扩容与缩容
1、命令指定服务数量
[root@master ~]
2、更改配置文件
[root@master ~]
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-10-17T02:05:12Z"
generation: 1
labels:
run: web1
name: web1
namespace: default
resourceVersion: "13197"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/web1
uid: aea68884-1ed3-4fa8-a613-6d073858dc6f
spec:
progressDeadlineSeconds: 600
replicas: 8 //指定数量
revisionHistoryLimit: 10
selector:
matchLabels:
run: web1
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
2、服务的升级与回滚
1、准备yaml文件指定不同版本的镜像
配置文件内仅image指定镜像不同
[root@master ~]
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: web
spec:
replicas: 4
template:
metadata:
labels:
web: web
spec:
containers:
- name: httpd
image: 192.168.1.10:5000/web1
[root@master ~]
[root@master ~]
2、运行yaml文件并记录版本信息
[root@master ~]
3、升级版本并记录版本信息
[root@master ~]
[root@master ~]
4、查看已有版本信息
[root@master ~]
deployment.extensions/web
REVISION CHANGE-CAUSE
1 kubectl apply --filename=web1.yaml --record=true
2 kubectl apply --filename=web2.yaml --record=true
3 kubectl apply --filename=web3.yaml --record=true
5、回滚指定版本
[root@master ~]