Linux操作文档——k8s集群资源管理

it2024-07-01  40

文章目录

一、资源创建1、命令行创建1、创建Pod控制器2、创建Service资源类型 2、配置清单(yml、yaml)创建1、Deployment2、Service3、运行yaml文件4、查看创建资源帮助信息 5、查看资源创建过程 二、Namespace三、Deployment四、Service五、Pod1、常用命令2、镜像获取策略3、重启策略4、默认健康检查1、LivenessProbe(活跃度、存活性)2、Readiness(敏捷探测、就绪性探测) 5、Job资源对象1、ReplicaSet2、DaemonSet3、Job4、CronJob 五、服务升级与回滚1、服务的扩容与缩容1、命令指定服务数量2、更改配置文件 2、服务的升级与回滚1、准备yaml文件指定不同版本的镜像2、运行yaml文件并记录版本信息3、升级版本并记录版本信息4、查看已有版本信息5、回滚指定版本


一、资源创建

1、命令行创建

1、创建Pod控制器

[root@master ~]# kubectl run web1 --image=httpd --replicas=3

2、创建Service资源类型

[root@master ~]# kubectl expose deployment web1 --name=web-svc --port=80 --type=NodePort

2、配置清单(yml、yaml)创建

1、Deployment

[root@master ~]# vim web1.yaml 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 ~]# vim svc.yaml 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 ~]# kubectl apply -f web1.yaml [root@master ~]# kubectl apply -f svc.yaml

4、查看创建资源帮助信息

[root@master ~]# kubectl explain pod //查看pod [root@master ~]# kubectl explain deployments //查看deployments [root@master ~]# kubectl explain pod.spec //查看子目录信息

5、查看资源创建过程

[root@master ~]# kubectl describe deployments. webtest //查看Deployment资源信息 NewReplicaSet: webtest-5c975b4884 (4/4 replicas created) //创建RS控制器 [root@master ~]# kubectl describe rs webtest-5c975b4884 //查看RS信息 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 ~]# kubectl describe pod webtest-5c975b4884-tl8qn //查看pod创建信息 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 ~]# kubectl get ns //查看名称空间 NAME STATUS AGE default Active 15d //默认的名称空间 kube-node-lease Active 15d kube-public Active 15d kube-system Active 15d [root@master ~]# kubectl describe ns default //查看名称空间详细信息 [root@master yaml]# vim namespace.yaml //创建名称空间 apiVersion: v1 kind: Namespace metadata: name: test [root@master yaml]# kubectl delete ns test //删除某个名称空间

三、Deployment

[root@master ~]# kubectl get deployments. -o wide //查看Deployment运行状态 [root@master ~]# kubectl describe deployments. web1 //查看Deployment资源详细信息 [root@master ~]# kubectl delete deployments. web //删除deployment

四、Service

[root@master ~]# kubectl get svc //查看Service资源运行状态 [root@master ~]# kubectl describe svc svc //查看Service资源详细信息 [root@master ~]# kubectl delete svc web-svc //删除Service资源

五、Pod

1、常用命令

[root@master ~]# kubectl get pod -o wide //查看pod详细信息 [root@master ~]# kubectl get pod -n kube-system -o wide //查看指定名称空间pod详细信息(-n) [root@master ~]# kubectl get pod -o wide //进入pod 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 ~]# kubectl exec -it webtest-5c975b4884-bcz7n /bin/bash root@webtest-5c975b4884-bcz7n:/usr/local/apache2# exit 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)的值。可以是整数,也可以是百分比,默认1maxUnavailable不可用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 ~]# kubectl scale deployment web --replicas=8

2、更改配置文件

[root@master ~]# kubectl edit deployments. web1 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 ~]# vim web1.yaml 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 ~]# vim web2.yaml [root@master ~]# vim web3.yaml

2、运行yaml文件并记录版本信息

[root@master ~]# kubectl apply -f web1.yaml --record

3、升级版本并记录版本信息

[root@master ~]# kubectl apply -f web2.yaml --record [root@master ~]# kubectl apply -f web3.yaml --record

4、查看已有版本信息

[root@master ~]# kubectl rollout history deployment web 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 ~]# kubectl rollout undo deployment web --to-revision=1
最新回复(0)