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