摘要:云是由很多小水滴组成的,把每一个计算机设想成小水滴,联结起来就造成了云。个别水滴先呈现,而后呈现治理水滴的平台(如OpenStack,Kubernetes)。
一、云计算–独立宇宙
1.云是由很多小水滴组成的,把每一个计算机设想成小水滴,联结起来就造成了云;传统的水滴就是VM;Docker的呈现,扭转了小水滴的粒度
2.水滴独立可运行,外部残缺 (如 VM,Docker容器)
3.个别水滴先呈现,而后呈现治理水滴的平台(如OpenStack,Kubernetes)
二、Kubernetes简介
1.Kubernetes是一个开源的,用于治理云平台中多个主机上的容器化的利用,Kubernetes的指标是让部署容器化的利用简略并且高效(powerful),Kubernetes提供了利用部署,布局,更新,保护的一种机制
2.Kubernetes一个外围的特点就是可能自主的治理容器来保障云平台中的容器依照用户的冀望状态运行着(比方用户想让dlcatalog始终运行,用户不须要关怀怎么去做,Kubernetes会主动去监控,而后去重启,新建,总之,让dlcatalog始终提供服务)
3.在Kubenetes中,所有的容器均在Pod中运行,一个Pod能够承载一个或者多个相干的容器
三、Kubernetes典型名词
1.Pod
在Kubernetes中,最小的治理元素不是一个个独立的容器,而是Pod;一个Pod是一个容器环境下的“逻辑主机”,一个Pod是由多个相干的并且共享磁盘的容器组成;在同一个Pod里,容器之间的端口不能反复,否则Pod会起不来,或者起来后有限重启
2. Node
Node是Pod真正运行的主机,能够是物理机,也能够是虚拟机;为了治理Pod,每个Node节点上至多要运行container runtime(比方Docker)、kubelet和kube-proxy服务;Node实质上不是Kubernetes来创立的,Kubernetes只是治理Node上的资源;尽管能够通过manifest创立一个Node对象(如下json所示),但Kubernetes也只是去查看是否真的是有这么一个Node,如果查看失败,也不会往上调度Pod
{ “kind”: “Node”, “apiVersion”: “v1”, “metadata”: { “name”: “10.63.90.18”, “labels”: { “name”: “my-first-k8s-node” }
}
}
3. Service
Service是一个形象的概念,是K8s外面的精髓;每个K8s上的App,都能够申请集群外部的“名号”,用来代表本人;K8s就会给你的App调配一个Service许可证,许可证下面带着“假IP”,任何集群外部只有拜访这个IP,就等于拜访你的App
假如咱们领有一些Pod,每个Pod都凋谢了9083端口,并且都带有一个标签app=MyApp;如下这段json代码会创立一个新的Service对象,名称为my-dlcatalog-metastore-service,并且会连贯指标端口9083;并且带有标签app=MyApp的Pod会被调配一个ip地址,这个ip是给kube-proxy应用的,集群外部只有拜访这个ip,就等于拜访你的App;须要留神的是,K8s外面的Pod理论ip个别没什么用
kind: Service,
apiVersion: v1,
metadata:
name: my-dlcatalog-metastore-service
spec:
selector:
app: MyApp
ports: – protocol: TCP,
port: 20403,
targetPort: 9083
4. ConfigMap
ConfigMap用于保留配置数据的键值对,能够用来保留单个属性,也能够用来保留配置文件;ConfigMap跟secret很相似,但它能够更不便地解决不蕴含敏感信息的字符串;
应用volume将ConfigMap作为文件或目录间接挂载
如下示意将创立的ConfigMap间接挂载至Pod的/etc/config目录下
apiVersion: v1
kind: Pod
metadata:
name: vol-test-pod
spec:
containers: - name: test-container
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530 command: [ "/bin/sh", "bin/start_server.sh" ]
volumeMounts: - name: config-volume
mountPath: /etc/config
volumes: - name: config-volume
configMap:
name: special-config
restartPolicy: Never
四、Kubernetes资源花式调度
指定Node节点调度
有三种形式指定 Pod 只运行在指定的 Node 节点上
形式一:
nodeSelector:只调度到匹配指定label的Node上
形式二:
nodeAffinity:性能更丰盛的 Node 选择器,比方反对汇合操作
nodeAffinity 目前反对两种:requiredDuringSchedulingIgnoredDuringExecution与preferredDuringSchedulingIgnoredDuringExecution,别离代表必须满足条件和优选条件
比方上面的例子代表调度到蕴含标签 http://kubernetes.io/e2e-az-name 并且值为 e2e-az1 或 e2e-az2 的 Node 上,并且优选还带有标签 another-node-label-key=another-node-label-value 的 Node
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In
values: - e2e-az1 - e2e-az2
preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference:
matchExpressions: - key: another-node-label-key operator: In
values: - another-node-label-value
containers: - name: with-node-affinity
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530
形式三:
podAffinity:调度到满足条件的 Pod 所在的 Node 上
podAffinity 基于 Pod 的标签来抉择 Node,仅调度到满足条件 Pod 所在的 Node 上,反对 podAffinity 和 podAntiAffinity
这个性能比拟绕,以上面的两个例子作为解说:
第一个例子示意:
如果一个 “Node 所在 Zone 中蕴含至多一个带有 security=S1 标签且运行中的 Pod”,那么能够调度到该 Node;不调度到 “蕴含至多一个带有 security=S2 标签且运行中 Pod” 的 Node 上
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution: - labelSelector:
matchExpressions: - key: security operator: In
values: - S1
topologyKey: failure-domain.beta.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm:
labelSelector:
matchExpressions: - key: security operator: In
values: - S2
topologyKey: kubernetes.io/hostname
containers: - name: with-node-affinity
image: 10.63.30.148:20202/ei_cnnroth7a/jwsdlcatalog-x86_64:1.0.1.20200918144530
第二个例子示意:
如果一个 “Node 所在 Zone 中蕴含至多一个带有 appVersion= jwsdlcatalog-x86_64-1.0.1.20200918144530标签且运行中的 Pod”,那么举荐不调度到该 Node;不调度到 “蕴含至多一个带有app= jwsdlcatalog-x86_64标签且运行中 Pod” 的 Node 上
spec:
restartPolicy: Always #pod重启策略
securityContext:
runAsUser: 2000 fsGroup: 2000 affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm:
labelSelector:
matchExpressions: - key: appVersion operator: In
values: - concat: - get_input: IMAGE_NAME - '-'
- get_input: IMAGE_VERSION
#numOfMatchingPods: "2" #肯定不要加此字段,此字段是华为本人的实现,社区没有接收
topologyKey: "failure-domain.beta.kubernetes.io/zone" weight: 100 requiredDuringSchedulingIgnoredDuringExecution: - labelSelector:
matchExpressions: - key: app operator: In
values: - get_input: IMAGE_NAME
numOfMatchingPods: "1" topologyKey: "kubernetes.io/hostname" containers: - image:
concat: - get_input: IMAGE_ADDR #拼接镜像的地址(#用拼接函数解决数字型参数问题) - "/"
- get_input: IMAGE_NAME #拼接镜像的地址(#用拼接函数解决数字型参数问题) - ":"
- get_input: IMAGE_VERSION #拼接镜像的地址(#用拼接函数解决数字型参数问题)
name: jwsdlcatalog
注:本文纯属个人观点,局部图片如有雷同,纯属意外
点击关注,第一工夫理解华为云陈腐技术~
发表回复