K8S概述

作者: 无善无恶 | 来源:发表于2018-07-09 11:44 被阅读29次

    关键词:master,worker,node,pod,depolyment,service,kubectl,scale,set image

    集群

    • Mastser

    • Worker

    • 命令

    kubectl cluster-info
    
    kubectl get nodes
    

    部署应用

    • Deployment 指示 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes Master 会将应用程序实例分配到集群中的独立节点上。

    • 命令

    kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
    
    kubectl delete deployments --all
    
    kubectl get deployments
    
    kubectl proxy
    

    应用构成

    • Pod

    Pod 是一个 Kubernetes 抽象,表示一个由一个或多个应用容器(Docker 或 rkt)及用于这些容器的共享资源组成的分组。这些资源包括:共享存储、网络和信息。

    • Node

    Pod 总是在 Node 上运行。Node 是 Kubernetes 中的工作机器,可能是虚拟机或物理机,具体取决于集群

    如果容器紧密耦合并需要共享资源(如磁盘),则只能将它们一起安排在一个 Pod 中。

    • 命令:
    kubectl get pods
    
    kubectl describe pods
    
    kubectl logs $POD_NAME
    
    kubectl exec $POD_NAME env
    
    kubectl exec -ti $POD_NAME bash
    

    暴露应用到外网环境

    • Service

    Kubernetes Service 是一个抽象层,定义了 Pod 的逻辑分组,并为这一组 Pod 实现外部流量暴露,负载均衡和服务发现。

    服务使得相关 Pod 之间建立松散耦合。通过 YAML(首选)或 JSON 来定义 Service。

    虽然每个 Pod 具有唯一的 IP 地址,但是如果没有 Service,这些 IP 不会暴露到集群外部。Service 允许应用程序接收流量。

    可以在创建 Deployment 的同时在 kubectl 中使用 --expose 创建 Service。

    
    kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
    
    kubectl get services
    
    kubectl describe services/kubernetes-bootcamp
    
    kubectl delete service -l run=kubernetes-bootcamp
    
    • 例子
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: tf-serving-0bd3a
      namespace: tfworkflow
      labels:
        app: tf-serving-0bd3a
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tf-serving-0bd3a
      template:
        metadata:
          labels:
            app: tf-serving-0bd3a
        spec:
          containers:
          - args:
            - /usr/bin/tensorflow_model_server
            - --port=9000
            - --model_name=mnist
            - --model_base_path=/data/models/myjob/export/mnist
            image: zuowang/tf-model-server-cpu:latest
            imagePullPolicy: IfNotPresent
            name: tf-serving-0bd3a
            ports:
            - containerPort: 9000
              protocol: TCP
            volumeMounts:
            - mountPath: /data
              name: data-persistent-storage
          restartPolicy: Always
          volumes:
          - name: data-persistent-storage
            persistentVolumeClaim:
              claimName: tfworkflow-pvc
    
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: tf-serving-0bd3a
      annotations:
        getambassador.io/config: |-
          ---
          apiVersion: ambassador/v0
          kind:  Mapping
          name: tfserving-mapping-tf-serving-0bd3a-get
          prefix: /models/tf-serving-0bd3a/
          rewrite: /
          method: GET
          service: tf-serving-0bd3a.tfworkflow:8000
          ---
          apiVersion: ambassador/v0
          kind:  Mapping
          name: tfserving-mapping-tf-serving-0bd3a-post
          prefix: /models/tf-serving-0bd3a/
          rewrite: /model/tf-serving-0bd3a:predict
          method: POST
          service: tf-serving-0bd3a.tfworkflow:8000
      name: "tf-serving-0bd3a"
      namespace: tfworkflow
    spec:
      externalTrafficPolicy: Cluster
      ports:
      - name: tf-serving
        port: 9000
        protocol: TCP
        targetPort: 9000
      - name: tf-serving-proxy
        port: 8000
        protocol: TCP
        targetPort: 8000
      selector:
        app: tf-serving-0bd3a
      sessionAffinity: None
      type: NodePort
    

    伸缩应用

    • 应用的伸缩是通过改变 Deployment 中副本的数量来完成的。

    扩展 Deployment 将确保创建新 Pod 并将其调度到具有可用资源的节点。收缩 Deployment 将减少 Pod 到新的期望数量。Kubernetes 还支持 Pod 的 自动缩放,

    • 命令
    kubectl get deployments
    
    kubectl scale deployments/kubernetes-bootcamp --replicas=4
    
    kubectl scale deployment/kubernetes-bootcamp --replicas=2
    

    更新应用

    • 滚动更新使用新的实例逐个更新 Pod(而不是一次全部更新),从而实现不停机对 Deployment 的更新。

    如果 Deployment 暴露到外网,在更新期间 Service 会将流量负载平衡到可用的 Pod。

    滚动更新允许执行以下操作:(1)将应用程序从一个环境推到另一个环境(通过容器镜像更新)(2)回退到以前的版本
    (2)以零停机时间持续集成和持续交付应用程序

    • 命令

    执行 set image 命令,并指定 Deployment 名称及新镜像,升级应用程序的镜像到版本 2。

    kubectl set image deployments/kubernetes-bootcampkubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 
    
    kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
    

    参考文章:

    Kubernetes tutorial - K8S 官方入门教程 中文翻译

    相关文章

      网友评论

          本文标题:K8S概述

          本文链接:https://www.haomeiwen.com/subject/quvzuftx.html