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


一、资源创建

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)的值。可以是整数,也可以是百分比,默认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 ~]# 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

猜你喜欢

转载自blog.csdn.net/g950904/article/details/109199181