如果云是水滴,Kubernetes就是水滴管理平台
摘要:云是由很多小水滴组成的,把每一个计算机想象成小水滴,联合起来就形成了云。一般水滴先出现,然后出现管理水滴的平台(如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
注:本文纯属个人观点,部分图片如有雷同,纯属意外
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
了解Kubernetes主体架构(二十七)
前言 Kubernetes的教程一直在编写,目前已经初步完成了以下内容: 1)基础理论 2)使用Minikube部署本地Kubernetes集群 3)使用Kubeadm创建集群 接下来还会逐步完善本教程,比如Helm、ELK、Windows Server容器等等。 目录 Kubernetes主体架构 1.1.主要核心组件 1.1.1. Master组件 1.1.2. 节点(Node)组件 1.1.3. 插件 1.2. 基本概念 1.2.1. 容器组(Pod) 1.2.2. 服务(Service) 1.2.3. 卷(Volume) 1.2.4. 标签(Labels)和标签选择器(Label Selector) 1.2.5. 复制控制器(Replication Controller,RC) 1.2.6. 副本集控制器(Replica Set,RS) 1.2.7. 部署控制器(Deployment) 1.2.8. StatefulSet 1.2.9. 后台支撑服务集(DaemonSet) 1.2.10. 一次性任务(Job) Kubernetes主体架构 k8s的整体架构如下图...
-
下一篇
MyBatis映射器(一)--多参数传递方式
在mybatis映射器的接口中,一般在查询时需要传递一些参数作为查询条件,有时候是一个,有时候是多个。当只有一个参数时,我们只要在sql中使用接口中的参数名称即可,但是如果是多个呢,就不能直接用参数名称了,mybatis中有以下四种 第一种:使用map传递 1⃣️定义接口 1//使用map传递多个参数进行查询 2publicListgetByMap(MapparamMap); 2⃣️sql语句 1 23SELECT*FROMproduct 4WHEREproduct_nameLIKEconcat('%',#{name},'%')AND 5CAST(product_priceASINT)>#{price} 6 需要注意的有: 1、parameterType参数类型为map(此处使用别名) 2、参数名称是map中的key 3⃣️查询 1/** 2*通过map传递多个参数 3* 4*@return 5*/ 6publicvoidgetProductsByMap(){ 7System.out.println("使用map方式传递多个参数"); 8Listproducts=newArray...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker容器配置,解决镜像无法拉取问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- 设置Eclipse缩进为4个空格,增强代码规范
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装




微信收款码
支付宝收款码