关键词: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
网友评论