zoukankan      html  css  js  c++  java
  • https://kubernetes.io/

    https://kubernetes.io/

    images/flower.svg

    Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications.

    It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.

    https://www.pianshen.com/article/8970872160/

    Kubernetes支持YAML和JSON格式创建资源对象

    1、JSON格式用于接口之间消息的传递

    2、YAML格式用于配置和管理

    YAML是一种简洁的非标记性语言

    语法格式:

      缩进标识层级关系

      不支持制表符缩进,使用空格缩进

      通常开头缩进两个空格

      字符后缩进一个空格,如冒号,逗号等

      “---”表示YAML格式,一个文件的开始

      “#”表示注释

    查看具体资源的详细信息

    1、创建pod

    [root@localhost ~]#  kubectl run nginx --image=nginx:latest --port=80 --replicas=3
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    deployment.apps/nginx created

    2、查看pod,状态为ContainerCreating

    [root@localhost ~]# kubectl get pods
    NAME                     READY   STATUS              RESTARTS   AGE
    nginx-7697996758-j5cwn   0/1     ContainerCreating   0          17s
    nginx-7697996758-nw2v4   0/1     ContainerCreating   0          17s
    nginx-7697996758-sxkp9   0/1     ContainerCreating   0          17s

    3、处于动态监听状态

    [root@localhost ~]# kubectl get pods -w
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-7697996758-j5cwn   1/1     Running   0          39s
    nginx-7697996758-nw2v4   1/1     Running   0          39s
    nginx-7697996758-sxkp9   1/1     Running   0          39s

    4、再查看,状态为Running

    [root@localhost ~]# kubectl get pods
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-7697996758-j5cwn   1/1     Running   0          79s
    nginx-7697996758-nw2v4   1/1     Running   0          79s
    nginx-7697996758-sxkp9   1/1     Running   0          79s

    5、查看镜像资源

    [root@localhost ~]# kubectl describe pod nginx-7697996758-j5cwn
    Name:               nginx-7697996758-j5cwn
    Namespace:          default
    Priority:           0
    PriorityClassName:  <none>
    Node:               192.168.35.102/192.168.35.102
    Start Time:         Wed, 12 Feb 2020 00:07:58 +0800
    Labels:             pod-template-hash=7697996758
                        run=nginx
    Annotations:        <none>
    Status:             Running
    IP:                 172.17.68.2
    Controlled By:      ReplicaSet/nginx-7697996758
    Containers:
      nginx:
        Container ID:   docker://a55be62040ad1bc1667d48a5b4adab626af857bcbb3f4985591381cf19b1f3ff
        Image:          nginx:latest
        Image ID:       docker-pullable://nginx@sha256:ad5552c786f128e389a0263104ae39f3d3c7895579d45ae716f528185b36bc6f
        Port:           80/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Wed, 12 Feb 2020 00:08:14 +0800
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-r5ql5 (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             True 
      ContainersReady   True 
      PodScheduled      True 
    Volumes:
      default-token-r5ql5:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-r5ql5

    6、查看deployment资源

    [root@localhost ~]# kubectl describe deployment/nginx
    Name:                   nginx
    Namespace:              default
    CreationTimestamp:      Wed, 12 Feb 2020 00:07:57 +0800
    Labels:                 run=nginx
    Annotations:            deployment.kubernetes.io/revision: 1
    Selector:               run=nginx
    Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  run=nginx
      Containers:
       nginx:
        Image:        nginx:latest
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-7697996758 (3/3 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  7m1s  deployment-controller  Scaled up replica set nginx-7697996758 to 3

    用YAML格式创建资源对象

    1、首先删除之前所创建的资源

    [root@localhost ~]# kubectl get deployment            查看deployment资源
    NAME     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx    3         3         3            3           3d17h
    [root@localhost ~]# kubectl delete deployment/nginx                 #删除镜像资源
    deployment.extensions "nginx" deleted
    [root@localhost ~]# kubectl get deployment             再次查看deployment资源,确保删除成功
    No resources found.

    [root@localhost ~]# kubectl get svc            #查看是否有服务运行,有的话删除
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   7d3h

    2、查看版本名称

    [root@localhost ~]# kubectl api-versions
    admissionregistration.k8s.io/v1beta1
    apiextensions.k8s.io/v1beta1
    apiregistration.k8s.io/v1
    apiregistration.k8s.io/v1beta1
    apps/v1
    apps/v1beta1
    apps/v1beta2
    authentication.k8s.io/v1
    authentication.k8s.io/v1beta1
    authorization.k8s.io/v1
    authorization.k8s.io/v1beta1
    autoscaling/v1
    autoscaling/v2beta1
    autoscaling/v2beta2
    batch/v1
    batch/v1beta1
    certificates.k8s.io/v1beta1
    coordination.k8s.io/v1beta1
    events.k8s.io/v1beta1
    extensions/v1beta1
    networking.k8s.io/v1
    policy/v1beta1
    rbac.authorization.k8s.io/v1
    rbac.authorization.k8s.io/v1beta1
    scheduling.k8s.io/v1beta1
    storage.k8s.io/v1
    storage.k8s.io/v1beta1
    v1

    3、编写yaml文件进行资源创建

    [root@localhost ~]# mkdir demo

    [root@localhost ~]# cd demo/

    [root@localhost demo]# vim nginx-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.15.4
            ports:
            - containerPort: 80

    4、查看 kubectl create命令语法

    [root@localhost demo]# kubectl create --help

    Usage:

      kubectl create -f FILENAME [options]

     

    5、创建nginx资源

    [root@localhost demo]# kubectl create -f nginx-deployment.yaml
    deployment.apps/nginx-deployment created

    6、查看pod资源状态

    [root@localhost demo]# kubectl get pods
    NAME                              READY   STATUS              RESTARTS   AGE
    nginx-deployment-d55b94fd-7998c   0/1     ContainerCreating   0          14s
    nginx-deployment-d55b94fd-79k65   0/1     ContainerCreating   0          14s
    nginx-deployment-d55b94fd-pvjgd   0/1     ContainerCreating   0          14s
    [root@localhost demo]# kubectl get pods -w                #处于动态监听状态
    NAME                              READY   STATUS              RESTARTS   AGE
    nginx-deployment-d55b94fd-7998c   0/1     ContainerCreating   0          29s
    nginx-deployment-d55b94fd-79k65   0/1     ContainerCreating   0          29s
    nginx-deployment-d55b94fd-pvjgd   0/1     ContainerCreating   0          29s
    nginx-deployment-d55b94fd-79k65   1/1     Running             0          36s
    nginx-deployment-d55b94fd-pvjgd   1/1   Running   0     40s
    nginx-deployment-d55b94fd-7998c   1/1   Running   0     51s
    ^C[root@localhost demo]# kubectl get pods
    NAME                              READY   STATUS    RESTARTS   AGE
    nginx-deployment-d55b94fd-7998c   1/1     Running   0          71s
    nginx-deployment-d55b94fd-79k65   1/1     Running   0          71s
    nginx-deployment-d55b94fd-pvjgd   1/1     Running   0          71s

    [root@localhost demo]# kubectl get deploy             #查看资源
    NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3         3         3            3           7m54s

    7、编写yaml文件进行资源发布

    [root@localhost demo]# vim nginx-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      labels:
        app: nginx
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
      selector:
        app: nginx

    8、发布并查看

    [root@localhost demo]# kubectl create -f nginx-service.yaml 
    service/nginx-service created
    [root@localhost demo]# kubectl get svc
    NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        7d5h
    nginx-service   NodePort    10.0.0.134   <none>        80:32509/TCP   5s

    9、在node节点查看

    node1:

    [root@localhost ~]# ipvsadm -L -n

    TCP  192.168.35.101:32509 rr
      -> 172.17.45.2:80               Masq    1      0          0         
      -> 172.17.45.4:80               Masq    1      0          0         
      -> 172.17.68.2:80               Masq    1      0          0         

    node2:

    [root@localhost ~]# ipvsadm -L -n

    TCP  192.168.35.102:32509 rr
      -> 172.17.45.2:80               Masq    1      0          0         
      -> 172.17.45.4:80               Masq    1      0          0         
      -> 172.17.68.2:80               Masq    1      0          0       

    10、在浏览器上可以进行访问

    11、自动测试命令的正确性,并不执行创建

    [root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    deployment.apps/nginx-deployment created (dry run)

    12、查看生成yaml格式

    [root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        run: nginx-deployment
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          run: nginx-deployment
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            run: nginx-deployment
        spec:
          containers:
          - image: nginx
            name: nginx-deployment
            ports:
            - containerPort: 80
            resources: {}
    status: {}

    13、查看生成json格式

    [root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    {
        "kind": "Deployment",
        "apiVersion": "apps/v1beta1",
        "metadata": {
            "name": "nginx-deployment",
            "creationTimestamp": null,
            "labels": {
                "run": "nginx-deployment"
            }
        },
        "spec": {
            "replicas": 3,
            "selector": {
                "matchLabels": {
                    "run": "nginx-deployment"
                }
            },
            "template": {
                "metadata": {
                    "creationTimestamp": null,
                    "labels": {
                        "run": "nginx-deployment"
                    }
                },
                "spec": {
                    "containers": [
                        {
                            "name": "nginx-deployment",
                            "image": "nginx",
                            "ports": [
                                {
                                    "containerPort": 80
                                }
                            ],
                            "resources": {}
                        }
                    ]
                }
            },
            "strategy": {}
        },
        "status": {}
    }

    14、因为写的语法比较严格,可以把现成的模板重定向保存出来一份,修修改改就可以了。

    [root@localhost demo]# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml
    kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
    [root@localhost demo]# ls
    my-deployment.yaml  nginx-deployment.yaml  nginx-service.yaml

    [root@localhost demo]# vim my-deployment.yaml               #一些不需要的可以删掉

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      creationTimestamp: null              #删掉
      labels:
        run: nginx-deployment
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          run: nginx-deployment
      strategy: {}                #删掉
      template:
        metadata:
          creationTimestamp: null                #删掉
          labels:
            run: nginx-deployment
        spec:
          containers:
          - image: nginx
            name: nginx-deployment
            ports:
            - containerPort: 80
            resources: {}               #删掉
    status: {}              #删掉

    15、将现有的资源生成模板导出

    [root@localhost demo]# kubectl get deploy
    NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3         3         3            3           160m
    [root@localhost demo]# kubectl get deploy/nginx-deployment --export -o yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "1"
      creationTimestamp: null
      generation: 1
      labels:
        app: nginx
      name: nginx-deployment
      selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
    spec:
      progressDeadlineSeconds: 600
      replicas: 3
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.15.4
            imagePullPolicy: IfNotPresent
            name: nginx
            ports:
            - containerPort: 80
              protocol: TCP
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    status: {}

    15、保存到文件中

    [root@localhost demo]# kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml
    [root@localhost demo]# ls
    my-deployment.yaml  my-deploy.yaml  nginx-deployment.yaml  nginx-service.yaml

    16、查看字段帮助信息

    [root@localhost demo]#  kubectl explain pods.spec.containers

    ------------------------- A little Progress a day makes you a big success... ----------------------------
  • 相关阅读:
    HDU
    HDU
    西电OJ
    西电OJ
    西电OJ
    USACO 2.1-Healthy Holsteins
    USACO 2.1-Sorting a Three-Valued Sequence
    HDU
    UVA
    codeforces 811A Vladik and Courtesy
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/14597788.html
Copyright © 2011-2022 走看看