• Linux企业运维之k8s-yaml编写


    一、Pod管理

    • Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群
    中运行的一个进程,每个pod都有一个唯一的ip。
    • 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间
    共享IPC、Network和UTC namespace。

    [root@k8s1 ~]# kubectl run demo --image=nginx
    pod/demo created
    [root@k8s1 ~]# kubectl get pod
    NAME   READY   STATUS    RESTARTS   AGE
    demo   1/1     Running   0          55s
    [root@k8s1 ~]# kubectl get pod -o wide
    NAME   READY   STATUS    RESTARTS   AGE     IP           NODE   NOMINATED NODE   READINESS GATES
    demo   1/1     Running   0          4m46s   10.244.2.2   k8s3              
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    kubectl scale deployment demo --replicas=1这是它的一个控制器,可以控制pod的数量,我们可以对其进行扩容和缩容,根据我们的需求

    [root@k8s1 ~]# kubectl create deployment demo --image=nginx
    deployment.apps/demo created
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS              RESTARTS   AGE
    demo-6c54f77c95-tkvfv   0/1     ContainerCreating   0          13s
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS              RESTARTS   AGE
    demo-6c54f77c95-tkvfv   0/1     ContainerCreating   0          17s
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS              RESTARTS   AGE
    demo-6c54f77c95-tkvfv   0/1     ContainerCreating   0          23s
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    demo-6c54f77c95-tkvfv   1/1     Running   0          28s
    [root@k8s1 ~]# kubectl delete pod demo-6c54f77c95-tkvfv 
    pod "demo-6c54f77c95-tkvfv" deleted
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS              RESTARTS   AGE
    demo-6c54f77c95-h2db7   0/1     ContainerCreating   0          3s
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    demo-6c54f77c95-h2db7   1/1     Running   0          15s
    [root@k8s1 ~]# kubectl scale deployment demo --replicas=3
    deployment.apps/demo scaled
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS              RESTARTS   AGE
    demo-6c54f77c95-2f7gh   0/1     ContainerCreating   0          7s
    demo-6c54f77c95-h2db7   1/1     Running             0          49s
    demo-6c54f77c95-m2tj6   0/1     ContainerCreating   0          7s
    [root@k8s1 ~]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    demo-6c54f77c95-2f7gh   1/1     Running   0          21s
    demo-6c54f77c95-h2db7   1/1     Running   0          63s
    demo-6c54f77c95-m2tj6   1/1     Running   0          21s
    
    
    • 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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    kubectl expose deployment demo --port=80 --target-port=80可以将其发布出去,并且暴露端口,svc可以起到pod的负载均衡的作用,由于现在我们只有一个pod,所以在这里体现不出来

    [root@k8s1 ~]# kubectl expose deployment demo --port=80 --target-port=80
    service/demo exposed
    [root@k8s1 ~]# kubectl get svc
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    demo         ClusterIP   10.102.98.54           80/TCP    10s
    kubernetes   ClusterIP   10.96.0.1              443/TCP   9h
    [root@k8s1 ~]# kubectl describe svc demo 
    Name:              demo
    Namespace:         default
    Labels:            app=demo
    Annotations:       
    Selector:          app=demo
    Type:              ClusterIP
    IP Family Policy:  SingleStack
    IP Families:       IPv4
    IP:                10.102.98.54
    IPs:               10.102.98.54
    Port:                80/TCP
    TargetPort:        80/TCP
    Endpoints:         10.244.2.4:80
    Session Affinity:  None
    Events:            
    [root@k8s1 ~]# kubectl delete svc demo 
    service "demo" deleted
    
    
    • 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

    二、资源清单

    pod.yaml/中的就是标准化的资源定义,

    [root@k8s1 ~]# kubectl delete -f pod.yaml 
    pod "demo" deleted
    [root@k8s1 ~]# cat pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: demo
      name: demo
    spec:
      containers:
      - image: nginx
        name: demo
        resources: {}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    我们对其做资源限制,比如限制cpu或者内存,这个点在以后会比较重要

    [root@k8s1 ~]# kubectl describe pod demo 
    Name:             demo
    Namespace:        default
    Priority:         0
    Service Account:  default
    Node:             k8s3/192.168.1.13
    Start Time:       Sun, 13 Nov 2022 02:26:50 +0800
    Labels:           run=demo
    Annotations:      
    Status:           Running
    IP:               10.244.2.5
    IPs:
      IP:  10.244.2.5
    Containers:
      demo:
        Container ID:   docker://827337d551044d248111a4729644b11d9f259abe373f4b72ac7df36286012385
        Image:          nginx
        Image ID:       docker-pullable://nginx@sha256:bab399017a659799204147065aab53838ca6f5aeed88cf7d329bc4fda1d2bac7
        Port:           80/TCP
        Host Port:      80/TCP
        State:          Running
          Started:      Sun, 13 Nov 2022 02:27:06 +0800
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     200m
          memory:  512Mi
        Requests:
          cpu:        100m
          memory:     200Mi
        Environment:  
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-xs6lb (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             True 
      ContainersReady   True 
      PodScheduled      True 
    Volumes:
      kube-api-access-xs6lb:
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  3607
        ConfigMapName:           kube-root-ca.crt
        ConfigMapOptional:       
        DownwardAPI:             true
    QoS Class:                   Burstable
    Node-Selectors:              
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  63s   default-scheduler  Successfully assigned default/demo to k8s3
      Normal  Pulled     48s   kubelet            Container image "nginx" already present on machine
      Normal  Created    48s   kubelet            Created container demo
      Normal  Started    47s   kubelet            Started container demo
    
    
    • 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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    资源清单

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    打标签以及添加资源选择器

    我们可以打标签并且在yaml文件中增加标签选择器

    [root@k8s1 ~]# kubectl label nodes k8s3 disktype=ssd
    spec:
      hostNetwork: true
      nodeSelector:
        disktype: ssd
      containers:
      - image: nginx
        name: demo
        resources:
          limits:
            cpu: 200m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 200Mi
        imagePullPolicy: IfNotPresent
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    [root@k8s1 ~]# kubectl get pod
    NAME   READY   STATUS    RESTARTS   AGE
    demo   1/1     Running   0          6m32s
    [root@k8s1 ~]# kubectl get pod -o wide
    NAME   READY   STATUS    RESTARTS   AGE     IP             NODE   NOMINATED NODE   READINESS GATES
    demo   1/1     Running   0          6m36s   192.168.1.13   k8s3              
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    视联网赋能数字政府建设,推进基层公共服务系统驶入新通道
    PHP 变量
    直流有刷电机转速、电流双闭环调速系统及Matlab/Simulink仿真分析
    OPC UA客户端工具Softing OPC Client使用图文教程
    HTML常见标签用法
    原码,反码,补码 以及 位运算
    i.MX 6ULL 驱动开发 五:LED 驱动
    sysfs 文件系统
    打造千万级流量秒杀系统第一课 功能需求:秒杀业务背景及前端需求是怎么产生的?
    Zookeeper经典应用场景实战
  • 原文地址:https://blog.csdn.net/moumumu/article/details/127827836